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

文章转载自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
时间: 2024-10-16 22:11:16

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

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

最近跟一个朋友聊起编程语言的一些特性,他有个言论让我略有所思:“不能REPL的都是渣”.当然这个观点有点偏激,但我们可以探究一下,我们常用的编程语言里面,哪些支持REPL,哪些不支持,还有REPL的一些概况. 在一般的脚本语言中,有REPL是常态,因为REPL非常的方便.编程术语 REPL(Read-Eval-Print Loop) 中文的话有翻译成“交互式解释器”或“交互式编程环境”的.不过我觉得不用翻译,直接REPL就好了,这样的术语,翻译成中文后,读者更难理解.下面是对 REPL 的解释:

Word 2003中对不同的节设置不同的页面边框的特殊情况小结

除了使用普通思路给不同节(或者节中的首页,或者其他中其他页)可以设置不同的页面边框外,在实现这个操作的过程中还有一些特殊情况值得注意.在此作小结如下: 对于两个连续类型分节符围起来的节,且此节是一个页面(文档中的任何一页)内容的一部分,则给本节添加页面边框是没有效果的.想有此效果,必须确保目标页是单独的一个节.注意:这时页面边框预览存在一个BUG,你会发现当时预览下存在边框,但实际退出时却根本没有添加边框!!! 对于两个连续类型分节符围起来的节,且此节跨越多个页面,且最开始处对应半个页面,则这个

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

所有很酷的功能特征的出现最关键的就是浏览器的支持情况,幸运的是,所有的现代浏览器都支持HTML5 Web存储(Web Storage),从IE8开始也支持它.HTML5 Web存储(Web Storage)非常简单但也非常有用.因为HTML5 Web存储(Web Storage)需要使用JavaScript进行操作,所以,在使用它执行一些关键功能时要确保浏览器支持这个特征并开启了JavaScrpt脚本功能.

VS2010编译器工具cl对c++11标准支持情况测试

本文探讨了VS2010编译工具cl对C++11标准的支持情况,提供了利用C++11新特性的两段代码来进行测试,并同g++ 4.9.3编译器的编译情况相对比.总的说来:VS2010的编译器工具cl部分支持了C++11标准,而g++ 4.9.3则全部支持C++11标准.虽然现在已出现了C++14等新的标准,但熟悉了C++11标准的支持情况有利于我们正确选用符合自己需要的编译工具. 1. 问题产生 一个月前由于编写算法的而使用C++语言,看了一些英文版的算法设计和分析书.一个偶然的机会发现了C++11

【翻译自mos文章】Oracle Audit Vault 和Database Firewall 12.x 的平台支持情况

Oracle Audit Vault 和Database Firewall 12.x 的平台支持情况 来源于: Oracle Audit Vault and Database Firewall 12.x Platform Support (文档 ID 1536380.1) 适用于: Oracle Audit Vault and Database Firewall - Version 12.1.0.0 and later Information in this document applies t

关于windows phone 8.1系统手机对html5触摸事件的支持情况

近日购入一部微软Lumia 640手机,目的主要就是为了测试年中开发完成的响应式移动web项目,同时也为了将来升级win10 mobile系统.由于我们的项目目前只考虑支持IOS与Android系统,所以只支持了html5触摸事件(如touchstart). 印象中WP系统应该只支持MS开头(如MSPointerDown)的指针事件,但测试结果很出人意料:项目在WP8.1的Lumia 640手机上竟完全可以正常运行,并支持了所有的触摸事件... 对于这个问题我挺不解的,于是就查阅了下msdn文档

ECMAScript5和ECMAScript6_浏览器支持情况

ECMAScript5浏览器支持情况: Opera 11.60 Internet Explorer 9* Firefox 4 Safari 5.1** Chrome 13 * IE9不支持严格模式 - IE10 添加 ** Safari 5.1 仍不支持 Function.prototype.bind, 尽管 Function.prototype.bind现在已经被Webkit所支持. 具体支持情况可以查看 http://kangax.github.io/compat-table/es5/ (E

JS的六大对象:Global、Math、Number、Date、JSON、console,运行在服务器上方的支持情况分析

在ASP中使用runat="server"来调用JS的相关函数,代码如下: <script runat="server" language="javascript"> // 代码部份 </script> 下表列举JS六大对象在runat="server"中的支持情况: 对象 是否支持 Global 支持 Math 支持 Number 支持 Date 不支持 JSON 不支持 console 不支持 原文

standard判断浏览器支持情况

https://github.com/standard/standard //判断浏览器支持情况,注意,standard只支持IOS系统 // https://github.com/standard/standard let elementStyle = document.createElement('div').style let vendor = (() => { let transformNames = { webkit: 'webkitTransform', Moz: 'MozTrans