文章摘要
Goeteia是一个纯Scheme语言构建的自托管编译器,能将Scheme代码在浏览器中编译为WebAssembly并实时渲染页面,支持WebGL粒子云等交互功能。
文章总结
Goeteia是一个用纯Scheme语言构建的、自托管的WebAssembly编译器,专为WebAssembly GC时代设计。它通过npm安装,核心功能是在浏览器内将Scheme代码实时编译为WebAssembly并渲染页面。该页面本身由Goeteia编译,标题是一个WebGL粒子云,用户可编辑代码并运行。
Goeteia的主要特点包括: - 自托管:编译器用自身编译的Scheme子集编写,自托管构建的输出字节一致,并通过CI检查。 - 原生Wasm GC对象:使用i31ref、GC结构体等,无需JavaScript影子堆。 - 卫生宏:支持syntax-rules和syntax-case,通过重命名实现卫生性。 - 真实闭包与尾调用:使用类型化函数引用,支持变参和apply,尾调用高效。 - call/cc与dynamic-wind:利用Wasm异常处理提案实现逃逸延续。 - 响应式Web栈:包括sx模板、响应式信号、HTML渲染器和JS FFI。 - 3D与WebGL:支持Three.js和原始WebGL,着色器以s表达式编写。 - Scheme间通信:后端为Scheme时,RPC使用s表达式,保持精确数值。 - 库系统:支持R6RS风格的库文件,未使用代码会被修剪。
快速启动包括克隆仓库、运行测试、自构建编译器,以及编译和运行Scheme模块。编译后的模块可在支持Wasm GC和尾调用的引擎上运行,如Node 22+、Chrome、Firefox、Safari和wasmtime。
评论总结
根据评论内容,总结如下:
主要观点与论据:
Scheme在浏览器中的优势(评分:无,作者:guenchi)
- 支持浏览器内自托管和卫生宏
- 通过宏扩展处理HTML/CSS
- 使用S表达式与服务器通信
- 关键引用:"Self hosting in browser with hygienic macros" / "handle HTML and CSS like Scheme (Expand with macro)"
AI时代JavaScript的局限性(评分:无,作者:compacct27)
- JavaScript缺乏静态可验证性,DOM操作易静默失败
- TypeScript和框架只是权宜之计
- Scheme虽难读难写,但AI可将其作为编译目标,提供可靠性
- 关键引用:"it's just not a terribly statically verifiable language" / "Scheme is ugly to read...but with the new way..maybe we can try"
现有替代方案(评分:无,作者:trescenzi)
- Hoot项目已实现Scheme在WebAssembly中运行
- 关键引用:"Hoot already exists and does a very good job of running scheme in web assembly"
技术特性与问题(评分:无,作者:bramadityaw、koolala、papaver-somnamb、genxy)
- 正面:内置Three.js(koolala)、减少JS体积(papaver-somnamb)、38.2kB/75ms性能(guenchi)
- 负面:编辑光标错位bug(bramadityaw)、AI写作风格令人反感(genxy)
- 关键引用:"Pretty slick it has Three.js built in" / "the AI writing is a turn off"
平衡性总结: - 支持者认为Scheme在浏览器中能解决JavaScript的可靠性问题,且性能优秀 - 反对者指出实际使用存在bug,且AI生成内容风格不佳 - 现有项目Hoot已提供类似功能,但本项目仍有独特优势(如内置Three.js)