一个新的提案, iJAM , 已经在 JSR-294 和 modules-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 。
评论