一款古老的 Scheme 编译器,一台古老的“机器”

在每一版的 Scheme RnRs 语言报告上大概都有这么一段话:

We gladly acknowledge the influence of manuals for MIT Scheme [24], T [28], Scheme 84 [15], Common Lisp [34], and Algol 60 [25]

阅读报告的人大概不会注意到这一段文字,就算注意到了这段文字,大概也不会注意到注脚为[28]的,单独一个字母 T

T 是一款 Scheme 语言的早期实现,早期曾被称为 Yale Scheme, 因为它是在耶鲁大学开发的。 T 是第一款优化的 Scheme 编译器,并且在很长一段时间内也是最快的 Scheme 编译器。T 有很多开创性的设计,对 Scheme 的发展产生过重大的影响。 T 的编译器、汇编器、链接器这一整套工具链都是用 T 自己写的,实现了自举; T 将对象系统和模块系统加进语言里 。而 Scheme 却为这些东西要不要加进语言标准争吵了几十年。所以, T 其实是 Scheme 的超集,就象现在 Racket 相对于 Scheme。

T 的开发始于一个玩笑式的提议,于是,几个年青人聚在一起,准备搞出一个优秀的语言来与 C 和 Fortran 竞争。遗憾的是开发只持续了一段时间就停止了,开发人员各奔东西。源码散落在各个大学实验室的 FTP 上。解散后,团队成员中的 Richard Kelsey 和 Jonathan Rees 又聚在一起,花了两天时间又写了个 Scheme 实现,就是后来著名的 Scheme48。与 T 不同的是 Scheme48 基于一个字节码解释器,而非原生编译器。

T Project 主页 由 Jonathan Rees 建立。

这里是 T 的另一份历史, 由开发人员 Olin Shivers 写的回忆录。

曾经有人试图复活这个项目,这里是项目主页存档。这个项目已经死掉了。

我经过漫长的尝试,终于用一款虚拟机软件把 T 给跑起来了。

我用的虚拟机叫做 SIMH , 专注于虚拟历史上著名的机型,PDP 系列,VAX 等等。好有沧桑感!

本文所用到的所有材料已经上传到 Github, 有兴趣的童子可以自行尝试。

https://github.com/uternet/language-t

posted @ 2017-01-12 17:13  fmcdr  阅读(733)  评论(0编辑  收藏  举报