2013-04-15 44 views
3

嗯,我知道這是一個愚蠢的問題,但讓我們思考一下。爲什麼沒有用於Java的Repl模式

爲什麼我們不能擁有repl模式或種類的Java shell。假設我只想執行Math.max(2,3)來獲得輸出3.它可以類似於Scala repl模式,默認情況下處理類和主要聲明(它擴展到App),並且只評估一個表達式。

技術上:

  1. 沒有在後面跟着跑可以執行一個解釋 - 如果Scala和Groovy的就可以了,那麼這意味着JVM是不是主要的問題
  2. 如果javac的就是這個道理,說我們刪除所有的優化,並且它直接將行逐行轉換爲java字節碼,那麼應該有一條出路。類型推理可能不是很強大,可以顯示大量信息,但至少可以顯示方法的輸出。可能javac可能會針對這種情況進行一些修改
  3. 例如:在調試器中,我們將斷點連接到該行,然後向前執行。類似的策略可以應用

這將是很酷的每個JVM進程,在對運行,一臺可以上網或設置一些說靜態變量,並有實時信息,默認外殼程序。

這一切本來以爲過,但爲什麼沒有它被大多數人所接受(也有一些開源實現,雖然)

回答

4

這或多或少正是BeanShell一樣。

+0

它被接受爲JSR-274 http://www.javarepl.com/或控制檯版本,但我不知道爲什麼還沒有它尚未納入 – Jatin

+0

的東西,接受不一定納入的Java SE或EE或我。 JSR只是標準化事物的一種方式。在這種情況下,它不是Java SE的一部分的原因是絕大多數Java應用程序不需要這種類型的東西。你會爲每一個未來的Java JRE安裝程序添加一個兆字節(大部分)無用的東西......永久存在, –

2

Eclipse中的Display視圖在此區域提供了許多方便的操作,包括命令完成,對正在運行的應用程序堆棧的訪問以及通過System.out進行的控制檯輸出。

2

像@Sean建議你確實可以在repl模式下使用bean shell。

java -cp ./bsh-2.0b4.jar bsh.Interpreter 
BeanShell 2.0b4 - by Pat Niemeyer ([email protected]) 
bsh % System.out.println("Hello World"); 
Hello World 

可替換地,在Eclipse IDE鮮爲人知Display標籤可以執行任意的Java代碼和評估的飛行表達式。 Ctrl+U運行表達式,Ctrl+Shift+I對它們進行評估。這不是repl模式,而是接近。

相關問題