好吧,我知道这是一个愚蠢的问题,但让我们考虑一下。
为什么我们不能有一个用于 Java 的 repl 模式或某种 shell。假设我只想Math.max(2,3)
获得输出 3。它可以类似于 Scala repl 模式,其中默认处理类和 main 声明(它扩展为App
)并且只评估一个表达式。
技术上:
- 后面有一个解释器可以执行它 - 如果 scala 和 groovy 可以,那么这意味着 JVM 不是主要问题
- 如果javac是原因,假设我们删除了所有优化并且它直接将严格逐行转换为java字节码,那么应该有一个出路。类型推断可能无法显示大量信息,但至少可以显示方法的输出。对于这种情况,可能
javac
会稍作修改 - 例如:在调试器中,我们将断点附加到该行,然后向前执行。可以应用类似的策略
为每个 JVM 进程拥有一个默认 shell 会很酷,在运行时,可以访问或设置一些静态变量并拥有实时信息。
所有这些都被考虑过了,但为什么它没有被大多数人接受(虽然有一些开源实现)