你这周在做什么?
摘要
一位开发者分享了可嵌入类型化语言 Ekto 的最新进展,该语言受 Lua、Koka 和 Erlang 启发,并讨论了为 Casper VM 实现引用计数、内存管理及有界续体时面临的挑战。
<p>你这周在做什么?欢迎分享!</p>
<p>请记住,什么都不做也完全没问题。</p>
查看缓存全文
缓存时间: 2026/04/21 02:58
# 这周你在做什么?
Source: https://lobste.rs/s/hqvxoj/what_are_you_doing_this_week
我正在继续开发 Ekto 的 VM。
Ekto 将是一门易于嵌入、带类型、效应管理的语言,设计上受到 Lua、Koka 和 Erlang 的影响。目前,它还只是一份半懂不懂的规范和一台名为 Casper 的半成品 VM。
其实到目前为止我非常喜欢 Casper 的设计,但接下来要啃两块“硬骨头”。首先,Ekto 采用引用计数,我需要一种表示方法来追踪数据结构,以便递归地释放(drop)它们。起初,我走了捷径,假设可以直接对每个类型进行单态化(monomorphize),并为每个类型生成 drop 代码。我知道单态化可能有点激进,但我起初没想到的是,这种做法会在第二块硬骨头面前彻底崩掉。
第二块硬骨头是将限定续延实现为对 VM 状态的“切片”。最初,我打算采用 Xie 和 Leijen 在 2021 年提出的 "Generalized Evidence Passing" 技术,将所有这些编译为闭包捕获,但我想既然已经有了 VM,不如直接利用它。
不幸的是,如果我想实现这种完全通用的限定续延,就必须为被捕获的恢复状态提供一套内存管理方案。这意味着我至少还得在“把每个恢复状态都捕获为闭包”的方向上走一半:我需要在每一个潜在的 yield 点,追踪哪些寄存器是堆指针。
(在通常假设下,大多数 yield 点都是“尾恢复式”的,根本不需要捕获任何续延,所以实际情况并没有看上去那么糟。)
因此,我现在正在琢磨一些方案,比如用游程编码来压缩“活跃”寄存器的追踪信息,并为每个 yield 点存储一份。同时,我也在认真重新考虑,是否应该直接把这些 yield 点完全转换为闭包(更准确地说,是 contify)。
相似文章
你这个周末打算做什么?
一位开发者分享了他这个周末的项目,即构建一种编译为WebAssembly的低级中缀语言,并提供了从上下文自动补全到前沿模型等AI编码工具的个人排名。
@msimoni:我一天内创建了这个,它有点像拼凑的语言,但确实有一些有趣的想法和结果:Idle…
一位开发者创建了 Idle,这是一个用于 WebAssembly GC 的静态类型、低级 Lisp,具有 O(1) 方法查找和从 Wasm 模块加载宏等有趣功能。
一个固执的程序员尝试语言服务器
一位开发者反思传统的编码工作流程,并探讨在Haskell中使用语言服务器如何能近似Lisp程序员的交互体验。
@blackanger: 从 Epic Lora 里蒸馏了不少好的实践
An experiment on using Rust's type system as an AI coding specification, distilling practices from Epic Lora.
A preview of Roc 0.1.0
Richard Feldman presents a preview of Roc 0.1.0 at a functional programming meetup, showcasing a GUI demo with hot code reloading and discussing the language's goals of being fast, friendly, and functional.