常见编程语言对REPL支持情况小结

最近跟一个朋友聊起编程语言的一些特性,他有个言论让我略有所思:“不能REPL的都是渣”。当然这个观点有点偏激,但我们可以探究一下,我们常用的编程语言里面,哪些支持REPL,哪些不支持,还有REPL的一些概况。

在一般的脚本语言中,有REPL是常态,因为REPL非常的方便。编程术语 REPL(Read-Eval-Print Loop) 中文的话有翻译成“交互式解释器”或“交互式编程环境”的。不过我觉得不用翻译,直接REPL就好了,这样的术语,翻译成中文后,读者更难理解。下面是对 REPL 的解释:

A Read-Eval-Print-Loop (REPL) is available both as a standalone program and easily includable in other programs. REPL provides a way to interactively run JavaScript and see the results. It can be used for debugging, testing, or just trying things out.
交互式解释器(REPL)既可以作为一个独立的程序运行,也可以很容易地包含在其他程序中作为整体程序的一部分使用。REPL为运行JavaScript脚本与查看运行结果提供了一种交互方式,通常REPL交互方式可以用于调试、测试以及试验某种想法。

下面列举一些常见编程语言对 REPL 的原生支持:

  • 原生就有REPL的语言
    • Common Lisp
    • Ruby
    • Python
    • Lua
  • 原生不带REPL的语言
    • JavaScript
    • PHP
    • JAVA
    • C#
    • C++
    • Haxe
原生就有REPL的语言
  1. Common Lisp
    一般的Common Lisp实现都有REPL,比如在Mac下用的Clozure CL,该实现甚至还有Mac App Store的版本.
  2. Ruby
    官方实现就带REPL,只是命令是irb,意思是Interactive Ruby Shell,而不是ruby。exit(),quit()命令都可以退出。同时,也有个网页版tryruby(同时也是个ruby的在线教学),有兴趣可以看看。
  3. Python
    官方实现带REPL,直接用python命令,不带参数时即进入REPL环境,用exit()退出。
  4. Lua
    官方实现带REPL, 直接用lua命令即可。
原生不带REPL的语言
  1. JavaScript
    类似JavaScript这种量级的脚本语言本来应该都是有REPL的,可是JavaScript是个一般在浏览器中运行的语言,所以有些特殊了。不过有一些实现,比如Mozilla的Rhino,可以自行Google。
    另外,我推荐使用最近流行的node.js来做REPL,虽然node.js一般都被认为是一个服务端的脚本环境,但是本身就是个很不错的REPL环境,还自带一些common javascript的库环境,同时支持npm,比Rhnio要更加强大一些。在Mac下简单的使用node.js方法是用brew,虽然版本可能有些老。
  2. PHP
    PHP作为服务端的一个常用脚本语言,本身设计就是作为一个apache的mod语言,所以本身也不带REPL,虽然以它的语言类型来说应该是带的,不过Facebook为我们实现了一个PHP的REPL phpsh。有意思的是该实现竟然是通过Python来安装的…
  3. JAVA
    JAVA作为传统的静态类型语言,本身是不带REPL环境的,但是有BeanShell
    BeanShell下载后,将.jar文件放在JAVA可以找的到的库目录中,比如Mac下的~/Library/Java/Extension目录,然后通过命令java bsh.Interpreter来运行,使用exit();命令退出。
    一般在.bash_profile中用alias ijava='java bsh.Interpreter'简化为ijava命令。
    同时也有一些人推荐使用类似Closure, Groovy, Scala等jvm上带REPL的语言环境(一般兼容JAVA)来做REPL的,没有试用过,不评价。
  4. C#
    据说以后将会有官方实现的REPL,目前有一些第三方的实现,比如Mono就自带REPL。安装完Mono后,执行csharp命令就可以进入C#的REPL了。
  5. C++
    cling,有Mac版本直接下载,不过运行的方式有些诡异,那就是在解压后的目录中运行./bin/root(在bin目录中运行反而不行),需要先安装XQuartz这个Mac下的X环境,用exit();退出。
    发现C++能有REPL真是惊喜,虽然本质上C++并不是一个适合REPL的语言。而cling这个REPL甚至都没法方便的定义一个函数。
  6. Haxe
    ihx,可以直接通过haxelib install ihx安装,然后通过haxelib run ihx运行。也有一个网页运行版本http://try.haxe.org/,在~/.bash_profile中添加alias ihx='haxelib run ihx',执行ihx即可进入Haxe的REPL。
其他

repl.it
这个不知道怎么归类, repl.it本身支持多种语言, 运行在网页上. 虽然感觉有些版本比较老(比如Ruby还是1.8.x的版本), 但是作为网页服务, 并且支持那么多语言, 省事的时候可以尝试一用. 支持的语言如下:

  • 经典的语言(Classic)QBasic:
    • Structured programming for beginners.
    • Forth: An interactive stack-oriented language.
  • 实用的语言(Practical)Ruby (beta):
    • A natural dynamic object-oriented language.
    • Python: A dynamic language emphasizing readability.
    • Lua: A lightweight multi-paradigm scripting language.
    • Scheme: An elegant dynamic dialect of Lisp.
  • 诡异的语言(Esoteric)Emoticon:
    • Programming with an extra dose of smile.
    • Brainfuck: A pure Turing machine controller.
    • LOLCODE: The basic language of lolcats.
    • Unlambda: Functional purity given form.
    • Bloop: Nothing but bounded loops.
  • 网页语言(Web)JavaScript:
    • The de facto language of the Web.
    • Javascript.next: The JavaScript of tomorrow.
    • Move: The easy way to program the web.
    • Kaffeine: Extended JavaScript for pros.
    • CoffeeScript: Unfancy JavaScript.
    • Roy: Small functional language that compiles to JavaScript.
codepad

codepad这个算不上REPL,但是允许你不安装任何编译器就可以在网页上运行很多语言,所以有时候也算很方便。特别是你想简单的给出一些代码片段,让别人可以迅速的得出结果时。codepad会自动的生成一个地址,你直接分享这个地址即可,比如这个Python的片段. 任何人点击submit都能很快的看到结果. 这种分享代码片段的方式比snipplrgithub gist这种单纯贴代码的方式要更为先进一些.支持的语言如下:

  • C
  • C++
  • D
  • Haskell
  • Lua
  • OCaml
  • PHP
  • Perl
  • Plain Text
  • Python
  • Ruby
  • Scheme
  • Tcl

WIKI的列表也挺详细的:[http://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop]

REPL Online

刚开始学编程的时候,搭建环境感觉非常棘手,有时候只是为了做一个简单的验证,没必要花半天或者一天的时间去搭建环境。REPL很好的解决的了这一难题,我收集了一些 REPL Online(有些网站可能被“墙”了,你懂的),欢迎大家留言补充:

  1. W3C School
    W3C School 是一个现在学习 Web 开发技术的公益网站,它自带了一个 Try it Youself 的网站,允许执行 HTML, CSS, JavaScript 等客户端代码:http://www.w3school.com.cn/tiy/t.asp?f=html_basic
  2. PHP
    http://writecodeonline.com/php/ 允许你在线执行 PHP 代码;此外,该网站也同时提供了 JavaScript 的在线运行环境:http://writecodeonline.com/javascript/
  3. JavaScript Console
    http://jsconsole.com/ 虽然它也是一个 JavaScript 运行环境,但顾名思义(控制台),它一次只能运行一行代码,而不是诸如上面两个能执行一段代码。
  4. Python
    http://datamech.com/devan/trypython/trypython.py 虽然看起来是一次只能输入一行,但是对于 if Ture: 这样的多行代码它还是能正确处理的。就是你如果不小心输错了就不好改了。
  5. ActionScript
    写 Flash 的同学有福了,这个网站能在线执行 ActionScript 3 的代码:http://eval.hurlant.com/demo/
  6. Perl
    这个网站支持 Perl 5 版本:http://colabv6.dan.co.jp/lleval.html
  7. Scala
    有做 Java 开发的同学可能最近会经常听到 Scala 语言,号称要去代替 Java。想要学习这门语言可以先到这个网站尝尝鲜:http://www.simplyscala.com/
    8.Groovy
    和 Scala 一样,运行在 JVM 上另一门脚本语言:http://groovyconsole.appspot.com/
  8. Clojure
    Scala 说我改进了 Java,Clojure 说 我改进了 Scala... 真是叫我们这些程序员情何以堪。顺便说一句,Clojure 是一门 Lisp 方言:http://tryclj.com/
    10.Scheme
    Scheme 也是一门 Lisp 方言。这个网站采用 JApplet:http://sisc-scheme.org/sisc-online.php
  9. repl.it
    看这个域名就知道多霸气了!专业的 REPL 网站,支持包括 QBasic、Ruby、Python、Lua、Scheme、JavaScript 等在内的多种编程语言:http://repl.it/#:languages(http://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值