vector ratfactor rat logo Home | About | Now | Repos | Cards | Contact | RSSrss feed icon

我学习了 Snobol,然后写了一个玩具 Forth

页面创建时间:2025-04-19 更新时间:2025-05-07 Drawing of a little rat on a snowball with a heart

这个页面是关于我探索 Snobol 的一个迷你站点,包含以下页面的链接:

  1. 我对 Snobol 的思考
  2. 用 Snobol 编写的玩具 Forth 解释器
  3. 关于用 Snobol 编写玩具 Forth 解释器的想法

开始展示...

the green snobol4 book by griswold et al next to an mnt pocket reform laptop editing my snobol4th interpreter

我终于学习了 SNOBOL!

Snobol 已经在我的编程语言愿望清单上很久了。

Snobol

以下是我对 Snobol4 语言本身的结论,它们都有各自的页面:

简而言之,我认为 Snobol 非常迷人。它对模式匹配的独特关注让我想起了 Awk。 只是 Awk 在模式处理上没做什么,它会退化成一个类似 C 的脚本来处理模式匹配的结果。 Snobol 没有使用任何这样的拐杖,而是使用模式匹配语句来进行所有逻辑和控制流。 它的纯粹性令人印象深刻。

毫不夸张地说:Snobol 程序中的 每一行 都包含五个部分:label, subject, pattern, replacement, goto。 所有这些部分都是可选的。

这当然使它成为现代开发人员眼中的一门“怪异的语言”,但是一旦你掌握了它,就很容易理解为什么 Snobol 曾经受到各种计算机用户的欢迎和好评。

经验丰富的开发人员很容易忘记,即使是简单的循环结构对于初学者来说也是一个概念上的飞跃。 我还记得我还是一个初学者的时候。 相比之下,我认为条件 GOTO 风格的控制流对于初学者来说很容易理解,因为你可以“看到”它。 你可以用手指追踪逻辑。

当然,语言的简单性有利于小型编程,但可能不利于大型编程。 Snobol4 基本上是 20 世纪 60 年代风格的“非结构化编程”,通常认为这种编程方式在大程序中会迅速崩溃。

这就是 Edsger Dijkstra 著名的“Go To Statement Considered Harmful”信件中的信息。 请参阅 David R. Tribble 的 Go To Statement Considered Harmful: A Retrospective (david.tribble.com)。

尽管如此,Snobol 证明了使用“这个奇怪的技巧”进行编程可能出奇地有效。

Snobol4th - 一个用 Snobol4 编写的 Forth

The Threaded Interpreted Languages book by Loeliger next to an MNT Pocket Reform laptop editing my snobol4th interpreter

我了解到,很容易以为自己理解了一个概念,但当被迫付诸实践时才发现自己并没有真正理解。 因此,我需要用 Snobol 做一些小项目,以确保我没有自欺欺人。

要做什么呢?

“我知道了!” Dave 说。“这是一个让我保持对 Forth 语言概念新鲜感的机会。 我应该用 Snobol 实现一个玩具 Forth 解释器。”

但是我应该实现 多少 Forth 呢? 我没有盲目地随机选择语言特性,而是决定选择一个小型的 Forth 程序来执行。 目标是:一旦我的实现可以执行它,我就完成了。

我选择的程序是 99.forth ,这是 Arf Dysg 编写的 “99 Bottles of Beer”,发布在我最喜欢的编程相关网站之一上:

http://www.99-bottles-of-beer.net/language-forth-793.html

这是结果,一个用 Snobol 编写的 Forth,可以执行一个程序,该程序可以运行上述程序,该程序可以打印完整的 “99 Bottles of Beer” 歌曲的歌词:forth.sno

这是结果: The Snobol4th Repo

生成的 Forth 实现不到 500 行 Snobol 代码。 repo 中的 README 更详细地解释了该程序,并且解释器的源代码具有相当的可读性 - 尽管它对于学习 Forth 的工作方式来说可能是一种奇怪的方式。

制作玩具来制作玩具

我真的很喜欢这种拥有一个小型目标程序的方法。 一个 Forth 解释器测试了我的 Snobol 知识。

Forth 不是我的创作,但这个奇怪的 Snobol4th 实现肯定是我的 - 无论是在其不寻常的执行方式方面,还是在我选择实现的语言子集方面。 因此,就某些 “我的” 价值而言,我将其称为我的玩具编程语言。

如果你要测试自己的小型玩具编程语言,我认为目标程序是值得考虑的。 这是我写的一张关于这个的“卡片”:

Have a target for your toy language

说到卡片,这是我深入研究 Snobol 之前写的第一张关于 Snobol 的卡片。 对于现代开发人员来说,开始使用 Snobol4 可能有点令人困惑。 这是另一张小“卡片”页面:

Getting started with Snobol

版本说明

这个项目是我深夜在床上完成的,当时家里其他人都在睡觉。

上面照片中的计算机是 MNT Pocket Reform

我在本页顶部绘制的小老鼠和雪球使用了我最喜欢的 FOSS 绘图程序 Krita

此页面上次生成于 2025-05-12 11:03:16 -0400 严格禁止使用本网站上的任何内容来训练大型语言模型 (LLMs)。 所有内容 © Copyright Dave Gaue