常见编程语言对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都能很快的看到结果. 这种分享代码片段的方式比snipplr和github gist这种单纯贴代码的方式要更为先进一些. 支持的语言如下:
- C
- C++
- D
- Haskell
- Lua
- OCaml
- PHP
- Perl
- Plain Text
- Python
- Ruby
- Scheme
- Tcl
常见编程语言对REPL支持情况小结的更多相关文章
- 常见编程语言对REPL支持情况小结[转]
文章转载自http://www.nowamagic.net/librarys/veda/detail/2462 最近跟一个朋友聊起编程语言的一些特性,他有个言论让我略有所思:“不能REPL的都是渣”. ...
- ECMAScript 5和ECMAScript6的新特性以及浏览器支持情况
ECMAScript简介: 它是一种由Ecma国际(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范,javascript在它基础上经行了自己的封装.但通常来说,术语ECMAScript和java ...
- TLSv1.3 Support:主流 Web 客户端和服务端对 TLSv1.3 的支持情况
TLSv1.3 Support:主流 Web 客户端和服务端对 TLSv1.3 的支持情况 请访问原文链接:https://sysin.org/blog/tlsv1-3-support/,查看最新版. ...
- 浏览器对localstorage的支持情况以及localstorage在saas系统中的应用实践思考
首先,还是要说,任何一种新特性的引入,通常有着其特有的场景和解决的目标需求,localstorage也一样.在我们的应用场景中,主要在金融业务服务的saas系统.其中涉及很多更改频率很多的元数据的客户 ...
- 关于HTML5音频——audio标签和Web Audio API各平台浏览器的支持情况
对比audio标签 和 Web Audio API 各平台浏览器的支持情况: audio element Web Audio API desktop browsers Chrome 14 Yes ...
- Web存储(Web Storage)的浏览器支持情况
所有很酷的功能特征的出现最关键的就是浏览器的支持情况,幸运的是,所有的现代浏览器都支持HTML5 Web存储(Web Storage),从IE8开始也支持它.HTML5 Web存储(Web Stora ...
- css选择器浏览器支持情况
css选择器浏览器支持情况
- 检测浏览器对HTML5和CSS3支持情况的利器——Modernizr
Modernizr是什么? Modernizr 是一个用来检测浏览器功能支持情况的 JavaScript 库. 目前,通过检验浏览器对一系列测试的处理情况,Modernizr 可以检测18项 CSS3 ...
- HTML5 API 浏览器支持情况检测
HTML5发展到现在,虽说没有大规模的普及,但在我们日常生活中,也很容易见到了,HTML5的游戏.网站.应用也是层出不穷.而作为前端人员,也应该多了解这些API为以后应用打基础,下面我将给大家介绍 H ...
随机推荐
- stm32+lwip(二):UDP测试
我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...
- 集成运放输入电压范围指标参数Uicmax,Uidmax
图中Uicmax最大共模输入电压:是运放能正常工作下的最大输入电压: Uidmax最大差模输入电压:是运放要损坏的最大输入电压
- MyBatis的笔记
1.#{}和${}的区别是什么? #{}是预编译处理,${}是字符串替换. #{}是sql的参数占位符,${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替 ...
- JQuery中的load()、$.get()和$.post()详解 (转)
load() 1.载入HTML文档 load()方法是jQuery中最为简单和常用的Ajax方法,能载入远程HTML代码并插入DOM中. 它的结构为: load(url [,data][,callba ...
- jpa Specification复杂查询
public List<Receipts> test(List<String> costIds){ Specification<Receipts> specific ...
- python的正则表达一
一.常用的正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种 ...
- mac 安装php redis扩展
git clone git://github.com/nicolasff/phpredis.git cd ./phpredis phpize 如果报 Cannot find autoconf. Ple ...
- 1,理解java中的IO
IO中的几种形式 基于字节:InputStream.OutputStream 基于字符:Writer.Reader 基于磁盘:File 基于网络Socket 最终都是字节操作,字符到字节要编码转换 ...
- jenkins手动安装插件
插件下载地址: 搜索:https://plugins.jenkins.io/ 列表:https://updates.jenkins-ci.org/download/plugins/ 打开jenkins ...
- ABP框架设置默认语言
在Global.asax文件中设置 private readonly IAbpWebLocalizationConfiguration _webLocalizationConfiguration; p ...