为什么没有Java的Repl模式

时间:2013-04-15 13:35:39

标签: java

我知道这是一个愚蠢的问题,但我们可以暂时考虑一下。

为什么我们不能为Java提供repl模式或shell类型。假设我只想做Math.max(2,3)来获取输出3.它可以类似于Scala repl模式,默认情况下处理类和主声明(它扩展到App)并且只有表达式是评价。

技术上:

  1. 有一个后面运行的解释器可以执行它 - 如果scala和groovy可以,那么这意味着JVM不是主要问题
  2. 如果javac是原因,比如我们删除所有优化并且它直接逐行转换为java字节代码,那么应该有一条出路。类型推断可能不会很强,无法显示大量信息,但至少可以显示方法的输出。对于这种情况,可能会对javac进行一些修改
  3. 例如:在调试器中,我们将断点附加到该行,然后执行前进。可以应用类似的策略
  4. 为每个JVM进程提供一个默认shell会很酷,在运行时,可以访问或设置一些静态变量并拥有实时信息。

    所有这些都会被考虑过,但为什么它没有被多数人接受(虽然有一些开源实现)

4 个答案:

答案 0 :(得分:4)

这或多或少与BeanShell完全相同。

答案 1 :(得分:2)

Eclipse中的Display视图在此区域提供了许多方便的行为,包括命令完成,对正在运行的应用程序堆栈的访问以及通过System.out的控制台输出。

答案 2 :(得分:2)

就像@Sean建议你确实可以在repl模式下使用bean shell。

java -cp ./bsh-2.0b4.jar bsh.Interpreter
BeanShell 2.0b4 - by Pat Niemeyer (pat@pat.net)
bsh % System.out.println("Hello World");
Hello World

或者,eclipse IDE上鲜为人知的Display选项卡可以执行任意java代码并动态评估表达式。 Ctrl+U运行表达式,Ctrl+Shift+I对它们进行评估。它不是repl模式,而是接近。

答案 3 :(得分:1)