为什么Java没有Repl模式



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

为什么我们不能有一个repl模式或者Java的shell呢?假设我想通过Math.max(2,3)得到输出3。它可以类似于Scala的repl模式,默认情况下处理类和主声明(扩展到App),并且只计算表达式。

技术:

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

如果每个JVM进程都有一个默认shell就好了,在运行过程中,可以访问或设置一些静态变量,并拥有实时信息。

所有这些都是可以考虑的,但是为什么它没有被大多数人接受(尽管有一些开源实现)

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

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

就像@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求值。

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

最新更新