你这周在做什么?

Lobsters Hottest 新闻

摘要

一位开发者分享了可嵌入类型化语言 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)。

相似文章

你这个周末打算做什么?

Lobsters Hottest

一位开发者分享了他这个周末的项目,即构建一种编译为WebAssembly的低级中缀语言,并提供了从上下文自动补全到前沿模型等AI编码工具的个人排名。

无类型检查的生命周期借用检查

Lobsters Hottest

一篇博客文章介绍了一种玩具语言,它在运行时而非静态类型系统中强制执行借用检查,通过在栈上使用轻量级引用计数来支持内部指针和单一所有权,适用于动态类型环境。