文章转载自http://www.nowamagic.net/librarys/veda/detail/2462

最近跟一个朋友聊起编程语言的一些特性,他有个言论让我略有所思:“不能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命令。

同时也有一些人推荐使用类似ClosureGroovyScala等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

常见编程语言对REPL支持情况小结[转]的更多相关文章

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

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

  2. ECMAScript 5和ECMAScript6的新特性以及浏览器支持情况

    ECMAScript简介: 它是一种由Ecma国际(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范,javascript在它基础上经行了自己的封装.但通常来说,术语ECMAScript和java ...

  3. TLSv1.3 Support:主流 Web 客户端和服务端对 TLSv1.3 的支持情况

    TLSv1.3 Support:主流 Web 客户端和服务端对 TLSv1.3 的支持情况 请访问原文链接:https://sysin.org/blog/tlsv1-3-support/,查看最新版. ...

  4. 浏览器对localstorage的支持情况以及localstorage在saas系统中的应用实践思考

    首先,还是要说,任何一种新特性的引入,通常有着其特有的场景和解决的目标需求,localstorage也一样.在我们的应用场景中,主要在金融业务服务的saas系统.其中涉及很多更改频率很多的元数据的客户 ...

  5. 关于HTML5音频——audio标签和Web Audio API各平台浏览器的支持情况

    对比audio标签 和 Web Audio API 各平台浏览器的支持情况:   audio element Web Audio API desktop browsers Chrome 14 Yes  ...

  6. Web存储(Web Storage)的浏览器支持情况

    所有很酷的功能特征的出现最关键的就是浏览器的支持情况,幸运的是,所有的现代浏览器都支持HTML5 Web存储(Web Storage),从IE8开始也支持它.HTML5 Web存储(Web Stora ...

  7. css选择器浏览器支持情况

    css选择器浏览器支持情况

  8. 检测浏览器对HTML5和CSS3支持情况的利器——Modernizr

    Modernizr是什么? Modernizr 是一个用来检测浏览器功能支持情况的 JavaScript 库. 目前,通过检验浏览器对一系列测试的处理情况,Modernizr 可以检测18项 CSS3 ...

  9. HTML5 API 浏览器支持情况检测

    HTML5发展到现在,虽说没有大规模的普及,但在我们日常生活中,也很容易见到了,HTML5的游戏.网站.应用也是层出不穷.而作为前端人员,也应该多了解这些API为以后应用打基础,下面我将给大家介绍 H ...

随机推荐

  1. Kattis - Aaah!

    Aaah! Photo by Unknown Jon Marius shouted too much at the recent Justin Bieber concert, and now need ...

  2. XtraBackup增量备份

    mysql:5.6.29xtrabackup:2.2.10mysql数据目录:/data/mysqlmysql备份目录:/data/dbbak/ #确保有足够的磁盘空间 官方文档:https://ww ...

  3. soa服务治理-dubbo

    dubbo官网:http://dubbo.io/Home-zh.htm 学习点: 1.  日志的配置

  4. JS正则表达式之特殊符号

    在正则表达式中,许多标点符号具有特殊含义,比较难记,现归纳备个份: 这些符号有:^ $ . * +  - ? = ! : | \ / ( ) [ ] { } 1."[ ]"表示字符 ...

  5. yarn的调度器

    三种调度器 1.FIFO Scheduler 把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,等最前面的应用需求满足后再给下一个分配,以 ...

  6. Egret --视觉编程,显示对象,事件

    1,在egret中,视觉图形都是由显示对象和显示对象容器组成的: 显示对象:准确的说,就是在舞台上显示出来的,包括能真实看见的图形,文字,图片,视频等:也包括不能看见但真实存在的显示对象容器: 一:显 ...

  7. shrio初体验(1)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #e6427a } p.p2 { margin: 0.0px 0 ...

  8. express mongoose 新手上路 问题记录

    1.npm start启动报错,提示端口占用 app.js中添加了app.listen(3000),删掉即可 2.跳转到html页面 //ejs改为html app.engine('.html', r ...

  9. swift3 控件创建

    //MARK:- UIScrollView let scrollView = UIScrollView() scrollView.delegate = target scrollView.backgr ...

  10. hibernate、easyui、struts2整合

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...