文章转载自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. [z] .net与java建立WebService再互相调用

    http://blog.csdn.net/yenange/article/details/5824967 : .net建立WebService,在Java中调用. 1.在vs中新建web 简单修改一下 ...

  2. 主成分分析 R语言

    主成分分析(Principal Component Analysis,PCA), 是一种统计方法.通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分. 原理: ...

  3. jmeter(八)-JDBC请求(sqlserver)

    做JDBC请求,首先要了解这个JDBC对象是什么,然后寻找响应的数据库连接URL和数据库驱动. 数据库URL:jdbc:sqlserver://200.99.197.190:1433;database ...

  4. TypeScript 学习二 表达式和循环

    表达式: 1,箭头表达式:将function用箭头代替,参数相应进行处理: 用来声明匿名函数,消除了传统匿名函数的this指针问题: 1) 例:简单的方法体为单行的方法,此时不需要大括号和return ...

  5. 利用VR技术,走进白宫,走进奥巴马

    奥马巴卸任演讲由诺基亚OZO全程360° VR直播,并不是每个人都能去白宫拜访,一窥白宫内部的模样,更不可能有多少人有机会在奥马巴面前听他讲讲他的家.   现在前任总统巴拉克奥巴马以及其夫人米歇尔奥巴 ...

  6. 专注VR/AR广告 ,内容感知广告公司Uru获80万美元投资

    随着AR/VR技术不断地跃进,越来越多的公司开始运用这项技术为消费者提供广告和营销信息.Uru是一家打造计算机视觉驱动内容广告的公司,专注于数字视频和VR/AR类似的沉浸式媒介,就在刚刚这家公司宣布完 ...

  7. mouseover和this的巧用

    mouseover & mouseout 的问题 在JS中,使用mouseover & mouseout会有触发多次的问题,这里Jquery有了替代的新属性 mouseover == ...

  8. jqery总结

  9. easyui datagrid分页

    datagrid分页设置 pagination="true" 貌似是不行的!  只是显示分页工具栏 没有达到分页效果 前端 $(function (){ var p = $('#d ...

  10. CVE-2016-0143 漏洞分析(2016.4)

    CVE-2016-0143漏洞分析 0x00 背景 4月20日,Nils Sommer在exploitdb上爆出了一枚新的Windows内核漏洞PoC.该漏洞影响所有版本的Windows操作系统,攻击 ...