Java 模块化提案: iJAM

  • Geoffrey Wiseman
  • 曹云飞

2007 年 10 月 12 日

话题:Java语言 & 开发架构

一个新的提案,iJAM, 已经在JSR-294modules-dev的邮件列表中流传了。它对strawman 提案中 JSR-294 的超级包('superpackages')的相关逻辑提出了一些修改,并已经收到了 Doug Lea 的正面反馈

这个提案太棒了!它简明扼要的说明了非反向的深度优先搜索不仅仅是你想要的,而且是干净利落的支持“导入自己的 M 包”和“把包 M 作为 X 导入”的关键部分。

iJAM: 一种更有表达力更直观的语法一文中描述了 Java 模块系统潜在的弱点。:

我们发现,虽然模块系统解决了许多复杂的软件设计问题,但是在解决高级分离问题时它的表达力不够强大。我们还发现模块和类定义的查找功能有一些非直观的行为。

当两个模块依赖于第三个模块,而又不愿意共享上述的第三个模块时,便会出现高级分离问题非直观的查询功能使用了反向深度优先搜索(先父后己),这种方式会使得低级别模块难于控制自己的作用域。

iJAM 提案试图通过以下解决方案解决这些问题:——通过深度优先(先己后父)来搜索类和模块定义。——使用允许控制模块共享的导入从句。

Java 模块系统(Java Module System)的提前试用版和 iJAM 都可以下载,供做试验和测试用,这是试验这些提案的好机会,请实践它们并给出你的反馈。

要获得与这些主题更多的信息,请参考 JSR-277:Java 模块系统JSR-294:在 Java 编程语言中改进的模块化支持JSR-291: 对Java SE的动态组件支持和 InfoQ 的关于辩论的报道,这些辩论涉及到了各个提案的搭配和各自的价值,以及 OpenJDK 项目中的277 和 294的提前试用版

查看英文原文Java Modularity Proposal: iJAM


译者简介曹云飞,西安交通大学计算机软件硕士。现就职于Ethos,热衷于新技术的钻研,软件架构与敏捷开发,目前从事流媒体方面的工作。参与 InfoQ 中文站内容建设,请邮件至china-editorial[at]infoq.com
Java语言 & 开发架构