Paul Graham 宣布推出新的编程语言 Bel

贝尔语是用贝尔语书写的。

Paul Graham 宣布推出新的编程语言 Bel
1960 年,John McCarthy 描述了一种新型编程语言 Lisp。 我说“新类型”是因为 Lisp 不仅仅是一种新语言,而且是一种描述语言的新方式。

为了定义 Lisp,他从一小组语句(一种公理)开始,然后用它来为该语言本身编写一个解释器。

它并不是要描述通常意义上的编程语言——一种用来告诉计算机做什么的语言。 在他 1960 年的作品中,Lisp 被理解为类似于图灵机的正式计算模型。 麦卡锡并没有考虑在计算机上使用它,直到他的研究生史蒂夫·拉塞尔提出建议。

1960 年的 Lisp 不具备编程语言共有的功能。 例如,没有数字、错误或 I/O。 因此,使用 Lisp 作为计算机编程语言基础的人们必须自己添加这些功能。 他们通过放弃公理化方法来做到这一点。

因此,Lisp 的开发分为两个看似相当独立的阶段:一个是在 1960 年的论文中介绍的正式阶段,另一个是实现阶段,该阶段对该语言进行了修改和扩展以在计算机上运行。 如果以实施机会的数量来衡量,主要工作发生在实施阶段。 1960 年的 Lisp,翻译成 Common Lisp,仅包含 53 行。 它仅执行解释表达式所需的操作。 其他一切都是在实施阶段添加的。

我的假设是,尽管 Lisp 有着艰难的历史,但它的发展分两个阶段这一事实使 Lisp 受益匪浅。 通过编写解释器来定义语言的最初做法赋予了 Lisp 最好的品质。 如果是这样,为什么不更进一步呢?

贝尔 试图回答这样一个问题:如果不是尽早从正式阶段转向执行阶段,而是尽可能晚地进行这种转变会怎样? 如果您继续使用公理方法,直到您拥有接近完整的编程语言,那么您将需要哪些公理,以及最终的语言会是什么样子?

我想弄清楚 Bel 是什么、不是什么。 尽管 Bel 比 McCarthy 的 1960 Lisp 具有更多的功能,但它仍然是一个处于正式阶段的产品。 就像 1960 年一篇论文中描述的 Lisp 一样,它不是一种可以用来编程的语言。 主要是因为,像麦卡锡的 Lisp 一样,它不关心效率。 当我向 Bel 添加某些内容时,我会描述添加内容的含义,而不尝试提供有效的实现。

为了什么? 为什么要延长正式阶段? 一个答案是看看公理化方法可以带我们去哪里,这本身就是一个有趣的练习。 如果计算机像我们希望的那样强大,那么语言会是什么样子?

但我也相信通过添加限制来编写一个高效的基于 Bel 的实现是可能的。 如果你想要一种具有表达能力、清晰度和效率的语言,那么可能值得从表达能力和清晰度开始,然后添加限制,而不是走相反的方向。

因此,如果您想尝试编写基于 Bel 的实现,请继续。 我将成为第一批用户之一。

最终我还是从以前的方言中复制了一些东西。 要么是他们的设计师做得对,要么是受到以前使用的方言的影响,我看不到正确的答案——时间会证明一切。 我也尽量不偏离 Lisp 惯例太远。 这意味着如果你看到 Lisp 约定的改变,可能是有原因的。

这里继续描述语言.

感谢您的翻译:丹尼斯·米特罗波尔斯基

PS

来源: habr.com

添加评论