最近跟一個朋友聊起編程語言的一些特性,他有個言論讓我略有所思:「不能REPL的都是渣」。固然這個觀點有點偏激,但咱們能夠探究一下,咱們經常使用的編程語言裏面,哪些支持REPL,哪些不支持,還有REPL的一些概況。javascript
在通常的腳本語言中,有REPL是常態,由於REPL很是的方便。編程術語 REPL(Read-Eval-Print Loop) 中文的話有翻譯成「交互式解釋器」或「交互式編程環境」的。不過我以爲不用翻譯,直接REPL就行了,這樣的術語,翻譯成中文後,讀者更難理解。下面是對 REPL 的解釋:php
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.html
交互式解釋器(REPL)既能夠做爲一個獨立的程序運行,也能夠很容易地包含在其餘程序中做爲總體程序的一部分使用。REPL爲運行JavaScript腳本與查看運行結果提供了一種交互方式,一般REPL交互方式能夠用於調試、測試以及試驗某種想法。java
1. Common Lisppython
通常的Common Lisp實現都有REPL,好比在Mac下用的Clozure CL,該實現甚至還有Mac App Store的版本.git
2. Rubygithub
官方實現就帶REPL,只是命令是irb,意思是Interactive Ruby Shell,而不是ruby。exit(),quit()命令均可以退出。同時,也有個網頁版tryruby(同時也是個ruby的在線教學),有興趣能夠看看。web
3. Pythonshell
官方實現帶REPL,直接用python命令,不帶參數時即進入REPL環境,用exit()退出。
4. Lua
官方實現帶REPL, 直接用lua命令便可。
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的版本), 可是做爲網頁服務, 而且支持那麼多語言, 省事的時候能夠嘗試一用. 支持的語言以下:
codepad這個算不上REPL,可是容許你不安裝任何編譯器就能夠在網頁上運行不少語言,因此有時候也算很方便。特別是你想簡單的給出一些代碼片斷,讓別人能夠迅速的得出結果時。codepad會自動的生成一個地址,你直接分享這個地址便可,好比這個Python的片斷. 任何人點擊submit都能很快的看到結果. 這種分享代碼片斷的方式比snipplr和github gist這種單純貼代碼的方式要更爲先進一些. 支持的語言以下: