常見編程語言對REPL支持情況小結

REPL(Read-eval-print-loop)
服務器君一共花費了159.700 ms進行了5次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

最近跟一個朋友聊起編程語言的一些特性,他有個言論讓我略有所思:“不能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都能很快的看到結果. 這種分享代碼片段的方式比snipplrgithub gist這種單純貼代碼的方式要更為先進一些.
支持的語言如下:

  • C
  • C++
  • D
  • Haskell
  • Lua
  • OCaml
  • PHP
  • Perl
  • Plain Text
  • Python
  • Ruby
  • Scheme
  • Tcl

WIKI的列表

WIKI的列表也挺詳細的:http://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop

本文地址:http://www.snpmgr.live/librarys/veda/detail/2462,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.snpmgr.live/librarys/veda/detail/2462

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏

大家都在看

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《UNIX環境高級編程(第2版)》 史蒂文斯 (作者), 拉戈 (作者), 尤晉元 (譯者), 張亞英 (譯者), 戚正偉 (譯者)

《UNIX環境高級編程(第2版)》是被譽為UNIX編程“圣經”的Advanced Programming in the UNIX Environment一書的更新版。在本書第1版出版后的十幾年中,UNIX行業已經有了巨大的變化,特別是影響UNIX編程接口的有關標準變化很大。本書在保持了前一版的風格的基礎上,根據最新的標準對內容進行了修訂和增補,反映了最新的技術發展。書中除了介紹UNIX文件和目錄、標準I/O庫、系統數據文件和信息、進程環境、進程控制、進程關系、信號、線程、線程控制、守護進程、各種I/O、進程間通信、網絡IPC、偽終端等方面的內容,還在此基礎上介紹了多個應用示例,包括如何創建數據庫函數庫以及如何與網絡打印機通信等。

更多計算機寶庫...

燃烧吧足球登陆