返回

文章详情

小程序和语言

Hacker News2026年10月24日 21:44

页面开始: 2025-06-02 页面发布: 2026-07-28 我关于 Forth 的文章得到了很好的反馈,特别是在微型 Forth 实现的主题上。(这也是列出我见过的一些最小 Forth 的借口。)我知道我并不孤单,在看到微型 Forth、微型语言、微型程序和一般的小东西的吸引力。到底是怎么回事呢? 小程序的吸引力 小程序是易于接近的。如果我看到某个东西有 200 行代码,我更可能阅读它,而不是 2,000 或 20,000 行。此外,如果它是一个在 20 行内做一些有趣事情的程序,而我期望的是 2,000 行,那么我会非常非常感兴趣去阅读这 20 行!当我在创建 RetroV 之前研究 DOM diffing 库时,我查看的一个库是 Luke Jackson 的 ijk。在那个时候我已经习惯了查看冗长的 JavaScript 库,所以当我打开 ijk 的源代码文件时,我真的很惊讶。这是源代码: index.js (githubusercontent.com)。只有 25 行!我立即被吸引了。 更近一些,针对我之前提到的 Forth 文章的一个回应是 Philippe Brochard 提供的一个 46 字节的 "Forth"。46 字节!它如此小,我可以直接在这里放出十六进制转储: 50b8 8e00 31d8 e8ff 0017 003c 0575 00ea 5000 3c00 7401 eb02 e8ee 0005 0588 eb47 b8e6 0200 d231 14cd e480 7580 c3f4 当然,很少有人会急于阅读原始机器码。但这正是我的观点。这样小的东西不会让人感到太可怕,对吧?我是说,46 字节。如果你花时间去了解,你知道最终可以弄清楚它是如何工作的。 下一个几乎可以作为反例,因为代码是如此密集和可怕,但我还是忍不住要提到它。我最喜欢的软件故事之一是 Roger K.W. Hui 的附录 A "早期文献",在 An Implementation of J 中,他描述了 Arthur Whitney 编写一个基于数组的语言解释器,"……在一页和一个下午——在 AT&T 3B1 计算机上的一个解释器片段。我研究这个解释器大约一周,关注其组织和编程风格……" Hui 可以在附录中列出整个解释器,因为它就是那么一页,仅仅 122 行极其难懂的 C,你可以在这里查看:我个人还没有解决这个难题,但它在我未写出的繁琐计算机事物清单中,如果我突然被社会抛弃并被迫独自生活在山上,肯定会打印出来带上。(顺便说一下,J 属于包括 APL 的数组语言家族。如果你喜欢简洁、难懂的编程难题和高性能数值计算,这些语言会满足你的需求!) 更新 2026 年 7 月:说到 Arthur Whitney,Alex (alexalejandre.com) 给我发了一条链接,我知道我必须在这里添加。看看这个: https://fall.tr/kos 这是 Geo Carncross 讲话的文字记录,描述了一个操作系统 kOS,包含 Whitney 的 k 数组语言、kdb 数据库,以及一个 90 Kb 可引导映像的 GUI 和窗口管理器。单个源代码的统计同样令人印象深刻(例如,用于前述 GUI 和窗口管理器的 60 行 C)。显然 kdb 只有 100 行 C?是真的吗?即使是 Whitney C,这仍然令人印象深刻。现在我对 kdb 的兴趣比以往任何时候都更加浓厚!如果这些都让你觉得有趣,你肯定会喜欢这篇文章《即将到来的 kOS》(vector.org.uk)。 我带到那座孤独山上的另一个必备项目必须是《有史以来最美丽的程序》,这是 William Byrd 演讲的标题。剧透警报:这是这个 Lisp 中的 Lisp 解释器:(define eval-expr (lambda (expr env) (pmatch expr [`,x (guard (symbol? x)) (env x)] [`(lambda (,x) ,body) (lambda (arg) (eval-expr body (lambda (y) (if (eq? x y) arg (env y)))))] [`(,rator ,rand) ((eval-expr rator env) (eval-expr rand env))]))) 娱乐还是基本真理? 现在,我们都知道代码高尔夫(wikipedia.org)是程序员的娱乐游戏,仅仅是为了好玩,对吗?但这其中有什么实际的用处吗?我说是的。更进一步:它们是有意义的。当你看到一个可以放在名片上的光线追踪器(fabiensanglard.net)时,这让你意识到光线追踪器是可以放在名片上的!这是关于光线追踪器的最小复杂性的确切事实。"……产生该对象作为输出的最短计算机程序(用预定编程语言)长度。"(我从一本关于库尔特·哥德尔的书中了解了科尔莫戈洛夫复杂性,这是我在本书其余比较枯燥和令人沮丧的内容中最喜欢的东西。)我从中理解到的是,代码高尔夫玩家为了整个人类的利益,生产出表现这些程序最小复杂性的程序版本。干得好,代码高尔夫玩家!关于 Lisp 编程语言的基本复杂性,我们知道什么?

阅读全文 →

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

☕请我喝杯咖啡