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

原创 2016年06月30日 12:46:33

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

好奇心满满的笔者不禁点击链接进入它的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.0 国际 许可协议进行许可。

几个免费的Scheme(Lisp)解释器

几个免费的Scheme(Lisp)解释器 关键字: lisp scheme Lisp是一个古老的函数式编程语言,Scheme则起源于MIT的一种Lisp方言。当前编程语言...

Lisp语言:列表(List)

终于开始讨论列表了,列表是Lisp的精华之一,也是学习Lisp的难点之一。列表的精彩之处在于,它不仅仅是Lisp中的一种数据结构,它也是Lisp语言的构成部分,Lisp语言中的所有语句都是一个列表。反...

(转)清华博士王垠的退学申请——研究生,无论你想不想搞研究,都该读读这篇文章。

经过深思熟虑,我决定放弃清华大学的博士学位。其中的原因,你们有兴趣的话可以看看下面的文章。这就是我的一生与中国教育的故事。一个用血和泪换来的教训。 清华梦的粉碎—写给清华大学的退学申请 2005...
  • erpindao
  • erpindao
  • 2012年04月22日 10:27
  • 11449

Python,Php,Ruby 三者中为什么会选择Python

内容摘自知乎  看到这个热烈的讨论, 想谈一谈其他的观点, 希望think out of box 我在06年左右开始放弃自己十多年的C++转python, 当时我和周围的C...
  • Ritsu_
  • Ritsu_
  • 2013年07月24日 15:49
  • 6620

JavaScript 编写的迷你 Lisp 解释器

感谢@李欲纯 的热心翻译。如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线。】 Little Lisp是一个解释器,支持函数调用、lambda表达式、 变量绑定(let)、数字、字符串、...
  • novelly
  • novelly
  • 2013年10月10日 18:10
  • 539

几个免费的Scheme(Lisp)解释器

几个免费的Scheme(Lisp)解释器  关键字: lisp scheme Lisp是一个古老的函数式编程语言,Scheme则起源于MIT的一种Lisp方言。当前编程语言的一些特...

BJTU 1687 lisp的解释器

lisp的解释器 Time Limit: 2000 MS    Memory Limit: 65535 Kb Total Submission: 22   Accepted: ...
  • wchhlbt
  • wchhlbt
  • 2016年04月10日 16:32
  • 400

写一个brainfuck语言的解释器

Brainfuck 语法介绍有一种很神奇的编程语言叫做brainfuck. 很多人都学过C++, Java, Python等主流的语言,总是会有一种“天哪,语法好复杂”的感觉,brainfuck的语法...
  • lwfcgz
  • lwfcgz
  • 2016年06月26日 12:38
  • 1428

「C++」一个brainfuck 语言解释器

在ArchWiki 上的Arch is the best 项目上发现的brainfuck,看了看wikipedia 发现语法非常简单,于是写了一个brainfuck 的解释器。...

C语言编写解释器.doc

  • 2011年06月20日 22:38
  • 71KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:56种语言编写一个Lisp解释器
举报原因:
原因补充:

(最多只允许输入30个字)