写点什么

Java 模块化提案: iJAM

2007 年 10 月 12 日

一个新的提案, 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

2007 年 10 月 12 日 07:59357
用户头像

发布了 47 篇内容, 共 72375 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
  • Oracle 启动针对 Java 的 Valhalla 项目

    Oracle启动了Valhalla项目,用于实验JVM和Java语言的高级特性,其中包括对Java泛型实现方式的重大修改。

  • Jigsaw 项目另起炉灶

    Mark Reinhold在jigsaw-dev邮件列表上宣布,旨在令JDK实现模块化的Jigsaw项目将会重新出发。本文简要归纳了项目目前的状况和未来的可能性。

  • 实战(四):“画图”程序后端实战

    基于 OpenID Connect 协议来提供帐号系统,基于 OAuth 2.0 协议来实现 Open API 体系。

    2019 年 9 月 24 日

  • Python 程序的书写规则

    2018 年 5 月 28 日

  • Practical Go

    演讲嘉宾David Cheney,Heptio 资深工程师, 著名Go语言专家内容介绍Go is a language designed for engineering teams. It’s central themes are simplicity, readability, and maintainability. This talk will provide best practice real world advice for teams building projects in Go covering five areas; idiomatic code, package and api design, error handling, concurrency, and testing.内容大纲Identifiers Choose identifiers for clarity, not brevity Use a consistent declaraton style Package Design A good package starts with its name An identifier’s name includes its package name Prefer lower case package names and import paths Rather than nesting deeply, return early Make the zero value useful Eschew package level state. No package level variables. Avoid global side effects. Project Structure Consider fewer, larger packages Arrange code into files by import statements. Prefer nouns for file names. Eschew elaborate package hierarchies, resist the desire to apply taxonomy Keep package main small as small as possible API Design Design APIs that are hard to misuse. Design APIs for their default use case. Prefer var args to []T parameters Let callers define the interface they require Prefer streaming interfaces Use type assertions for optional behaviour Error handling Elminate handling by eliminating errors Only handle an error once Concurrency Never start a goroutine without when it will stop. When sending or receiving on a channel, consider what happens if the other party never receives the message Keep yourself busy while waiting for a goroutine. or, do the work yourself. Leave concurrency to the caller

    2018 年 12 月 18 日

  • Mark Reinhold 谈“Java9 及其未来”

    在今年3月的EclipseCon上,Mark Reinhold作了主题为“Java9及其未来”的演讲,他分享了即将到来的在Java 9中的功能和Java生态系统未来的一些计划。InfoQ总结了其中未来可能发生的主要事项。

  • 标准 Java 模块系统的需求

    Mark Reinhold前些天公布了Java模块化的第一份公开草案。由于这只是一份草案,有些问题仍然需要商讨,但它已经对什么是Java模块化进行了统一的定义。有IBM的参与,这份草案比以往更加关注与OSGi之间的互操作性。

  • Java 9 新特性汇总

    继2014年3月份Java 8发布之后,Java 9的发布已经提上日程,预计将在2016年发布。任职于Takipi的Alex Zhitnitsky整理了Java 9中纳入JSR的一些新特性和大家一直期待但未确定的一些特性。

  • Sun 对 OSGi 支持者就 JSR 277 所提诸多问题保持沉默

    JSR 277背后的专家组一直比较安静,丝毫不理会来自社区关于其现状及与OSGi兼容的可能性问题。最近几周,要求提供信息及批评之声日渐高涨。

  • Android MVP 的 Kotlin 代码 & 结课测试

    2018 年 8 月 15 日

  • Rust 语法面面观:模块

    2020 年 11 月 5 日

  • Oracle 为 JDK 8 寻求社区参与

    随着Java 7功能的日益完备,Oracle正在为下一个版本寻求社区参与,下个版本计划于2012年末发布。我们来看一下新版本中可能有些什么,Java 8的大方向是怎么样的。

  • JDK 11 版本时间表

    Oracle首席架构师Mark Reinhold最近提出了将于2018年9月发布的JDK 11 GA版本的时间表。JEP-320的新功能之一是移除可能会破坏现有应用程序的Java EE和CORBA模块。

  • Oracle 的 Java 模块化系统保卫战

    2017年企业新兴技术(ETE)大会上最为及时的演讲之一要算由Oracle JVM负责人Karen Kinnear呈献的“Java的未来:模块化及其他”。在她演讲之前的这段时间发生了很多事情,其中最为引人瞩目的就是5月8号针对JSR 376的投票事件。

  • Update By Query & Reindex API

    2019 年 8 月 21 日

  • Java 平台模块化系统(JSR 376)通过公开测评复议投票

    在JSR-376最初公开测评投票未获通过的近两个月后,现在JCP执行委员会以压倒性多数通过了近期的复议投票。就这一最新投票结果,InfoQ采访了Java伦敦社区的联合创始人及jClarity的CEO Martijn Verburg和IBM资深技术人员Tim Ellison。

  • IBM 和 Red Hat 会对 Java 模块系统(Jigsaw)投反对票

    InfoQ之前曾经报道过JSR 376(Java平台模块系统)的开发现状,它通常被称为“Jigsaw项目”。现在,有一件不太寻常事情,IBM和Red Hat都公开表示,将会对Jigsaw目前的状态投反对票。

  • Java 9 正式版有可能被推迟到 9 月 21 号发布

    Oracle Java Platform Group首席架构师Mark Reinhold在五月份的一系列专家组电话会议中建议将Java 9的正式发布日期向后延期8周,也就是在9月21号发布。

发现更多内容

奈学:reaseShared共享式释放锁

古月木易

reaseShared 共享锁

使用 Golang 和 HTML5 开发一个 MacOS App

郭旭东

go macos

区块链:在发展的同时,准备好你的产品。

石云升

区块链 DCEP 创新

Apache 顶级项目 Apache Pulsar 成长回顾

Apache Pulsar

kafka 云原生 中间件 Apache Pulsar 消息系统

认识分布式系统

多颗糖

分布式 分布式系统 分布式存储

开发一款视频直播有多吃香?

anyRTC开发者

奈学:Executor框架的概述

古月木易

Executor Executor框架

职教黄金时代,河南如何继续“乘风破浪”?

InfoQ_967a83c6d0d7

央行发行的数字货币会带来哪些变化?

石云升

区块链 数字货币 DECP

Java NIO 是 NIO么?

soolaugust

Java io nio

排序算法二(归并排序、快速排序、希尔排序)

xcbeyond

Java 算法 快速排序 归并排序 希尔排序

微服务-技术专题-使用 API 网关构建微服务

李浩宇/Alex

微服务

架构师训练营 - 第十周 - 总结

Anrika

极客大学架构师训练营

微服务-技术专题-初步介绍服务发现

李浩宇/Alex

Java 技术 微服务

最佳实践:使用阿里云CDN加速OSS访问

巨侠说

CDN

知识点梳理:聊聊iOS SDK数据采集那点事儿

易观大数据

SpringMVC-技术专题-支持可版本管理的Restful接口

李浩宇/Alex

springmvc

优雅快速的统计千万级别uv

架构师修行之路

哈希表 数据结构与算法

云计算的可信新边界:边缘计算与协同未来——【两万五千字长文】

华为云开发者社区

云计算 云原生 5G 边缘计算 云服务

白鹭引擎助力《迷你世界》研发团队开发3D小游戏版

DT极客

区块链技术助力基础建设

CECBC区块链专委会

新基建 区块链技术 国家电力

排序算法一(冒泡排序、选择排序、插入排序)

xcbeyond

Java 算法 冒泡排序 选择排序 插入排序

微服务架构的整套解决方案

xcbeyond

架构 微服务 IT建设

区块链技术与福彩事业结合的变革

CECBC区块链专委会

区块链技术 福彩平台

2. 整体把握 CocoaPods 核心组件

Edmond

ruby ios swift CocoaPods 包管理工具

高效程序员的45个习惯:敏捷开发修炼之道(2)

石云升

读书笔记 敏捷开发 对事不对人 欲速则不达

企业应用开发或迎新趋势 “低代码平台”备受追捧

爱极客侠

奈学:Executor框架的概述

奈学教育

Executor Executor框架

经济优势再显,江苏如何通过职教打造人才高地?

InfoQ_967a83c6d0d7

Volcano:带你体验容器与批量计算的碰撞的火花

华为云开发者社区

Kubernetes 容器 分布式 Volcano 批量计算

实用心理学之识人篇

代码制造者

低代码 零代码 职场成长 编程开发 职场搞笑

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

Java模块化提案: iJAM-InfoQ