听说过一种只存在于书本上的编程语言“Monkey”吗?
读了一篇有趣的文章《MonkeyTheprogramminglanguagethatlivesinbooks》。初读此文,还以为是这是一篇调侃程序猿的文章呢,怎么会有一种编程语言叫“Monkey”呢?
搜索了一下,恕我孤陋寡闻了,的确有这样一门语言。正如标题所言,这是一种存在于书本上的编程语言,所以鲜有人知。
现在也有一些程序的命名中带有Monkey的,如Android系统自带的Monkey程序,MonkeyRunner等,但是它们和本文讨论的不是一个概念。Monkey是一种类似JavaScript的语言,至于为什么没有流行起来呢,不得而知。
看完该文,我的感觉是Monkey还是一个很新的语言,需要自己实现,学习者可以实现成解释型语言,也可以基于字节码和虚拟机来构建它,可能主要时用以学习和研究的吧。如果能搞清楚这门语言,说不定也自己发明一种新语言呢!
MonkeyisaprogramminglanguagethatyoucanbuildyourselfbyreadingthroughWritingAnInterpreterInGoandWritingACompilerInGo.
Monkey是一种编程语言,你可以通过阅读《用Go语言写一个解释器》和《用Go语言写一个编译器》这两本书来自己构建Monkey语言。
目前,Monkey语言还没有正式被实现,它存在于书本上,实现它完全由您、广大读者们决定。它可以作为一种树形解释器实现,也可以基于字节码编译器和虚拟机实现。(补充理解:译者认为这里是在说Monkey编写的程序是如何运行的,是像JS那样基于解释器执行呢,或者像Java那样基于虚拟机字节码运行。)
通常,Monkey语言编写的代码长这样:
它还可以定义函数:
并且也有条件分支,显式或者隐式的返回值、递归函数等,这意味着我们可以用Monkey这样写:
但是,对每种Monkey实现来说,其镇山之宝是闭包。
《用Go语言写一个解释器》发布于2016年,最新的版本是2019年发布的,版本号为1.6。
Monkey标准的第一本书定义了Monkey的语法,并且描述了它作为一种树形解释器必须包含的特征:
《遗失的章节:一个Monkye的宏系统》这本书发布于2017年,作为一个免费的资料库指导人们如何使用Go语言编写Monkey解释器。它可以被认为是《用Go语言写一个解释器》这本书第五章节的内容,因为它直接建立在前面四章的基础上,并且在书中的末尾扩展了Monkey解释器。
《遗失的章节:一个Monkye的宏系统》为Monkey添加了一个“全天候”、lisp风格的宏系统,这与Elixir的宏系统的工作方式很接近。
《用Go语言写一个编译器》是在2018年发布的,最新版本是2019年新出的1.1。它与《用Go语言写一个解释器》这本书是等价的,因为它没有改变语法,也没有添加任何新特性,它只是将Monkey的实现从一个遍历树的解释器变成一个字节码编译器和虚拟机。类似于从解释型语言(如JavaScript)转换为字节码运行语言(如Java)。
从该书的结尾来看,除了速度提升了三倍以上之外,Monkey的表现和行为跟《用Go语言写一个解释器》这本书结尾描述的没什么两样!
有些读者在阅读本书时喜欢绕道而行:一种不同的实现语言、一些新特性、语法上的一些变化。由于书中展示的代码是MIT授权的,每个人都随心所欲地构建自己的Monkey实现,并向世界上其他地方的人们展示。
这里收集了一些有趣而且很酷的Monkey实现者与我分享的内容。你也构建了自己的Monkey版本吗?让我知道吧,只要给我发邮件就可以了,我的邮箱是:me@thorstenball.com。
其他实现项目:
原文官网:https://monkeylang.org/感兴趣的朋友可以看看。
主题测试文章,只做测试使用。发布者:最新稳定辅助网,转转请注明出处:https://www.744broad.com/14959.html