3

好吧,我知道这是一个愚蠢的问题,但让我们考虑一下。

为什么我们不能有一个用于 Java 的 repl 模式或某种 shell。假设我只想Math.max(2,3)获得输出 3。它可以类似于 Scala repl 模式,其中默认处理类和 main 声明(它扩展为App)并且只评估一个表达式。

技术上:

  1. 后面有一个解释器可以执行它 - 如果 scala 和 groovy 可以,那么这意味着 JVM 不是主要问题
  2. 如果javac是原因,假设我们删除了所有优化并且它直接将严格逐行转换为java字节码,那么应该有一个出路。类型推断可能无法显示大量信息,但至少可以显示方法的输出。对于这种情况,可能javac会稍作修改
  3. 例如:在调试器中,我们将断点附加到该行,然后向前执行。可以应用类似的策略

为每个 JVM 进程拥有一个默认 shell 会很酷,在运行时,可以访问或设置一些静态变量并拥有实时信息。

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

4

4 回答 4

4

这或多或少正是BeanShell所做的。

于 2013-04-15T13:39:57.783 回答
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

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

于 2013-04-15T13:47:24.863 回答
2

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

于 2013-04-15T13:46:32.757 回答
1

您可以尝试http://www.javarepl.com/或来自https://github.com/albertlatacz/java-repl的控制台版本

于 2013-05-07T13:06:11.690 回答