跳到主要内容

JEP 199:智能 Java 编译,第二阶段

QWen Max 中英对照

概述

改进 sjavac 工具,使其能够默认在 JDK 构建中使用,并将其通用化,以便可以用于构建除 JDK 以外的大型项目。

目标

由于存在各种与稳定性及可移植性相关的问题,sjavac 并未在 JDK 构建脚本中默认使用。本 JEP 的首要目标是解决这些问题。这涉及到确保该工具在所有软件/硬件配置上始终产生可靠的结果。

总体目标是提高 sjavac 的质量,使其能够作为一个通用的 javac 包装器,能够编译大型任意 Java 项目。

后续项目将探讨 sjavac 应该如何在 JDK 工具链中被引入(如果有的话);这可能是一个单独支持的独立工具、不受支持的独立工具、与 javac 的集成,或者其他形式。

非目标

此 JEP 的目标并不是引入如今不存在、我们的构建脚本不需要、且无助于通用 javac 包装器的新功能。其意图并非重写该包装器。当前运行良好的功能将保持不变。

如果需要将 sjavac 纳入产品中,这将是另一份 JEP 的主题。

动机

当前的实现已经被证明是有用的,并且确实提高了构建速度,允许增量构建。然而,代码的质量和工具整体的稳定性并不令人满意,并且肯定还没有准备好公开发布。

描述

这项工作建立在之前提交的 JEP 139 中描述的实现之上。本 JEP 中描述的工作将通过编写、测试和提交增量补丁到现有实现来逐步完成。

最初的工作重点是解决与构建 JDK 相关的问题。这包括解决:

其他将要处理的问题包括:

  • 重构协议,可能通过利用 RMI 实现
  • 使选项名称和语法与 javac 的更加一致
  • 用更合适的内容替换 System.{out,err} 日志记录
  • 在可能的情况下,通过在 javac 中共享更多资源来提高并行性

日后需要进一步解决的问题包括但不限于:

  • 国际化
  • 对 Jigsaw 的支持

javac 需要进行一些调整。最值得注意的是,必须对 javac 进行重构,以允许多个并发编译共享通用数据结构,从而在多核机器上实现更好的加速效果和更高的 CPU 利用率。

测试

除了常规的强制单元测试之外,sjavac 将在所有平台上进行彻底测试,因为该工具的部分功能涉及特定于平台的方面,例如文件路径和后台进程的生成。

此外,由于服务器-客户端架构本质上是并行的,sjavac 将在考虑并发的情况下进行压力测试。

依赖

这项 JEP 提出的工作建立在 JEP 139 的结果之上:增强 javac 以提高构建速度。