56种语言编写一个Lisp解释器

今晨,在微博上看到这样一个项目:

好奇心满满的笔者不禁点击链接进入它的GitHub主页研究了起来。

这个名为mal的Make a Lisp项目,截止目前收获了2466个star,主要贡献者Joel Martin@bus_kanaka),现任ViaSat (前LonoCloud.com)Principal Engineer。在mal的README.md中,如此表述:

mal是一个受Clojure启发的Lisp解释器,使用到了 56 种语言,分别为:

Ada、GNU awk、Bash shell、C、C++、C#、Clojure、CoffeeScript、Crystal、D、Elixir、Emacs Lisp、Erlang、ES6 (ECMAScript 6 / ECMAScript 2015)、F#、Factor、Forth、Go、Groovy、GNU Guile、Haskell、Haxe、Io、Java、JavaScript (Online Demo)、Julia、Kotlin、Logo、Lua、GNU Make、mal itself、MATLAB、miniMAL、Nim、Object Pascal、Objective-C、OCaml、Perl、Perl 6、PHP、PL/pgSQL (Postgres)、PL/SQL (Oracle)、 Postscript、Python、RPython、R、Racket、Ruby、Rust、Scala、Swift、Swift 3、Tcl、VHDL、Vimscript、Visual Basic.NET

看到这里,笔者不禁产生了「我和我的小伙伴们都惊呆了」的感觉。

mal的每一次的实现都会被分割成11个独立的步骤,分别为:

详情可参阅make-a-lisp process guide

关于具体的实现,README.md中是这样介绍的:“最简单的方式是使用Docker,每次的实现都会有一个基于语言依赖预构建的Docker图像。”

各种语言实现举例,进入GitHub主页可查看全部:

Ada

make
./stepX_YYY

C

cd c
make
./stepX_YYY

C++

cd cpp
make
    # OR
make CXX=clang++-3.5
./stepX_YYY

C#

cd cs
make
mono ./stepX_YYY.exe

Haxe

cd haxe
# Neko
make all-neko
neko ./stepX_YYY.n
# Python
make all-python
python3 ./stepX_YYY.py
# C++
make all-cpp
./cpp/stepX_YYY
# JavaScript
make all-js
node ./stepX_YYY.js

Java 1.7

cd java
mvn compile
mvn -quiet exec:java -Dexec.mainClass=mal.stepX_YYY
    # OR
mvn -quiet exec:java -Dexec.mainClass=mal.stepX_YYY -Dexec.args="CMDLINE_ARGS"

JavaScript/Node

cd js
npm update
node stepX_YYY.js

Objective-C

cd objc
make
./stepX_YYY

Swift 3

cd swift3
make
./stepX_YYY

免责声明:笔者的编程功底并不好,也在不断的学习中,欢迎各位大牛交流指导。欢迎关注公众号mobilehub,一起学习,共同进步。

mobilehub

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐门教主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值