你这周在做什么?
摘要
一位开发者分享了可嵌入类型化语言 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编码工具的个人排名。
@blackanger: 从 Epic Lora 里蒸馏了不少好的实践
An experiment on using Rust's type system as an AI coding specification, distilling practices from Epic Lora.
无类型检查的生命周期借用检查
一篇博客文章介绍了一种玩具语言,它在运行时而非静态类型系统中强制执行借用检查,通过在栈上使用轻量级引用计数来支持内部指针和单一所有权,适用于动态类型环境。
@evanyou: https://x.com/evanyou/status/2060409444123729935
一位开发者分享了一个有趣的案例:在浏览器中运行LLM以检查其内部工作原理,强调了客户端AI的一个有意义场景。
我用 Vibe Coding 写了一个让工程师在 GitHub 上关注的东西
作者宣布了 iai-mcp,这是一款专为 Claude Code 设计的本地记忆工具,能够跨会话保留上下文。作者还反思了该项目在 GitHub 发布后收到的积极社区反馈以及随之而来的快速迭代。