文章转载自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命令。

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

转载于:https://www.cnblogs.com/langren1992/p/5491365.html

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

  1. 调研CSS选择器在浏览器中的支持情况

    网上有很多这样的信息,很多的图表对各个浏览器进行比较,关于特性的支持,其实有些不全面,本文就日常常见的一些css选择器进行一个总结(本文在标准模式下). 1)关于:active,:link,:hove ...

  2. java ipv6校验_Java对IPv6的支持详解:支持情况、相关API、演示代码等

    本文由朱益盛.杨晖.傅啸分享,来自IBM Developer社区,原题"使用 Java 开发兼容 IPv6 的网络应用程序",本次收录时有改动. 1.引言 前几天,有个群友跟我讨论 ...

  3. 支持linux的热门游戏,Linux_2007年Linux平台下的8款最佳游戏(图),Linux游戏支持情况糟糕一直是 - phpStudy...

    2007年Linux平台下的8款最佳游戏(图) Linux游戏支持情况糟糕一直是广为诟病的问题,不过07年的这8款游戏相当精彩,具有可玩性,并且最重要的是,这八款游戏不需要Wine就可以直接运行,当然 ...

  4. 使用modernizr.js检测浏览器对html5以及css3的支持情况

    使用modernizr.js检测浏览器对html5和css3的支持情况 详情请看主页:modernizr主页 1. modernizr 是什么? modernize 是一个js库----一个用于检测当 ...

  5. modernizr 支持html5,使用modernizr.js检测浏览器对html5以及css3的支持情况

    使用modernizr.js检测浏览器对html5和css3的支持情况 1.modernizr 是什么? modernize 是一个js库----一个用于检测当前浏览器对html5&css3 ...

  6. 支持html5特性的浏览器,HTML 5浏览器的支持情况

    我经常看到有很多人询问HTML5某个特性当前各浏览器的支持情况.的确,因为HTML5内容庞大,特性众多,而浏览器的支持情况又混杂不一,随时都有可能变化,所以了解起来比较困难.在这里,我汇总了一些常用的 ...

  7. 报表工具流行度以及对linux的支持情况调研

    以前程无忧为例,调研下企业最爱用的BI工具的应用频率 BI工具 前程无忧上的招聘页码数量(页) 与大数据组建的配合使用 对linux的支持情况 Power BI 9页 可以连接kylin来分析hado ...

  8. 华为云.NET Core支持情况调查

    各大公有云都提供了开发者开发的SDK,今天我们来看看华为云对.NET Core的支持情况怎么样? .NET SDK地址 https://developer.huaweicloud.com/sdk#.N ...

  9. IE 浏览器各个版本 JavaScript 支持情况一览表

    不同版本的 Internet Explorer 浏览器支持不同的 JavaScript 元素集.标准模式(有 <!doctype> 指令时 Internet Explorer 所有当前版本 ...

最新文章

  1. 忘记Windows 7 登录密码,3分钟我来搞定
  2. python向数据库写入数据_如何用Python向Mysql中插入数据
  3. 选择最大值的那条记录 sql
  4. 小明分享|WiFi协议迭代历程
  5. 百度贴吧10亿量级LAMP架构分享
  6. 反向索引(Inverted Index)
  7. 评审系统:查看互评信息实现及优化显示
  8. NoSql数据库确实非常适合网站
  9. Mugeda(木疙瘩)H5案例课—拍拍员工被玩坏了-岑远科-专题视频课程
  10. 乐高叉车wedo教案_24乐高教育wedo编程摩天轮教案
  11. 绝对差值和 —— 二分
  12. 漫威超级英雄大全(一)
  13. 《手语图像识别系统设计--人体动作识别》设计与实现
  14. 滴滴2023秋招笔试 老张的美数课 (C++ DP)
  15. jib构建镜像(使用阿里云容器镜像服务拉取镜像)
  16. C++基础知识(常函数)
  17. Qt 音乐盒子(在线搜索下载+本地读取播放)
  18. 地图上的两点,计算出两点之间的角度
  19. Eclipse+WIN7+CC2538移植开发Contiki
  20. 【Linux】centos解压缩rar

热门文章

  1. 10.13NOIP模拟赛
  2. 超详细超快的免费图床设置教程
  3. 登录蒸汽平台显示连接服务器异常,蒸汽平台连接服务器失败
  4. html页面添加大于号,2.7 在 HTML5 页面中插入半角的大于号“ ” , 使用的标记符应该是( )...
  5. ts文件引入js文件_如何编写一个d.ts文件的步骤详解
  6. cadence SPB17.4 - allegro - Artwork will be rounded down
  7. 自动化测试框架STAF介绍
  8. Thingworx自定义扩展开发(二)- Widget Demo Coding
  9. mui日期选择器html,MUI 移动端时间选择器
  10. python plt pyplot matplotlib绘图时形状异常