QB64 搜索技巧 核手提箱 文字记录 海洋云增白 开源地图 Bliss AI 搜索答案 深海沉船 自由职业 policy 小团队 颈挂空调 Chumby 个人电脑 极端主义 团队 世界 PostgreSQL AI工具 证券 DirectX 防溢 DrawingPics Zulip 儿童读物 化学 连续滚动 代码审查 三菱电机 更多

保守式垃圾回收可以比精确式垃圾回收更快 (wingolog.org)

这篇文章探讨了保守式垃圾回收(GC)和精确式垃圾回收的性能差异。作者认为,普遍观点认为精确式 GC 更好,因为它能精确识别垃圾对象,但保守式 GC 也有其优势。文章列举了保守式 GC 速度更快的几个原因,包括:更小的对象生命周期、更小的栈帧、无需运行时开销和栈映射等。作者认为,在设计 GC 系统时,不应忽视保守式 GC,它可能是某些系统的更好选择。

具有块结构堆的复制收集器是不可靠的 (wingolog.org)

文章探讨了具有块结构堆的复制垃圾收集器的可靠性问题。作者指出,这种类型的垃圾收集器在内存分配方面存在不确定性,因为碎片整理后的结果可能比碎片整理前更糟。多线程和并行收集器线程进一步加剧了这种不可靠性。文章还讨论了其他导致垃圾收集器不可靠的因素,例如,收集期间的内存分配以及虚拟内存和分页。尽管存在这些挑战,但作者认为,通过增加堆大小和使用可增长的堆,可以减轻与碎片相关的不可靠性。

Hoot 中的 CPS 变换 (wingolog.org)

这篇文章详细介绍了 Hoot Scheme-to-Wasm 编译器如何使用 Continuation-Passing Style (CPS) 变换来实现 push 调用。文章首先解释了 Scheme 中尾调用和非尾调用的区别,以及在 WebAssembly 中实现 push 调用的挑战。然后,文章探讨了三种可能的实现策略:通用切片、插桩切片和 CPS 变换,并解释了 Hoot 选择 CPS 变换的原因。最后,文章讨论了 Hoot 在实现 CPS 变换时遇到的一些挑战和解决方案,例如如何拆分函数、如何保存变量以及如何处理调用约定等。

构建 Hoot 语言:从基础到高级 (wingolog.org)

本文探讨了如何构建 Hoot 语言,Hoot 是一种编译为 WebAssembly 的 Scheme 方言。文章分析了 Hoot 的依赖关系图,强调了所有模块都依赖于 (hoot primitives) 模块,该模块提供了核心绑定和语法定义。文章还介绍了 %inline-wasm 宏,它允许在 Scheme 代码中嵌入 WebAssembly 代码,并讨论了如何使用 cond-expand 在编译时和运行时提供不同的定义。最后,文章展望了 Hoot 的未来发展方向,包括完成对 Guile 运行时库的支持。

hoot,启动——wingolog (wingolog.org)

这篇文章主要介绍了Hoot Scheme-to-WebAssembly编译器的开发历程,作者详细阐述了从最初的纸上设计到实现完整Guile语言的过程。作者重点介绍了Hoot的启动过程,包括时间轴上的发展以及功能的逐步完善。文章还讨论了Guile模块系统的静态语义,以及Hoot如何实现与Guile的兼容性。最后,作者展望了Hoot的未来发展方向,即与Guile合并,为用户提供更强大的WebAssembly开发体验。

误入歧途的园艺算法:Tree-Shaking (wingolog.org)

WebAssembly (Wasm)在网页端的成功有限,尽管其在Photoshop等大型C++程序移植方面表现出色。文章探讨了Wasm在DOM重型应用中的局限性,并指出其在非C/Rust语言中的成功案例不多。作者认为,随着Wasm对垃圾回收的支持,它在Python等语言的Web开发中将更有潜力。然而,要实现大规模应用,需要有效的tree-shaking算法来减小Wasm模块的大小。文章详细分析了tree-shaking的原理和挑战,并强调了优化编译器和标准库的重要性。