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

标签: githublispclojure编程语言开源
13570人阅读 评论(3) 收藏 举报
分类:

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

好奇心满满的笔者不禁点击链接进入它的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

3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    关注「CSDN物联网开发」公众号


    关注「CSDN物联网开发

    个人资料
    • 访问:268064次
    • 积分:2669
    • 等级:
    • 排名:第14196名
    • 原创:40篇
    • 转载:1篇
    • 译文:2篇
    • 评论:139条
    博客专栏
    近匠

    文章:12篇

    阅读:53838
    问源

    文章:0篇

    阅读:0