Java 9除了软件包外还将具有模块。通常,语言有其中一种。大多数程序员将两个术语视为同义词。模块建立在包的顶部,将它们视为原语。复合模式建议对原始体和复合体进行统一处理。否则会发生不好的事情。例如,看一下Valhalla项目,他们尝试在其中尝试为基元(值)和引用类型改造通用超类型。
模块和包代表语义上独立的概念吗?这意味着对于任何一种语言都应同时使用(关注点分离)。还是Java必须兼具两者才能向后兼容?
为什么要引入新概念而不是增加现有概念?
JSR 376:在Jigsaw项目中实现的“ Java平台模块系统” 。
根据SOTMS
模块是一个命名的,自描述的代码和数据集合。它的代码被组织为一组包含类型(即Java类和接口)的软件包。其数据包括资源和其他种类的静态信息。
JLS小心地避免定义什么是包。来自维基百科:
Java软件包是一种将Java类组织到类似于Modula模块的名称空间中的技术,以Java提供模块化编程。
我知道引用Wikipedia是一种不好的做法,但它反映了大家的共识。从模块化编程入门:
有时使用术语包而不是模块(如Dart,Go或Java)。在其他实施方式中,这是一个独特的概念。在Python中,程序包是模块的集合,而在即将到来的Java 9中,计划引入新的模块概念(具有增强的访问控制的程序包的集合)。
package
/ does / means 这样的语言关键字,它们也不会更改为JRE中的类路径系统(让我们面对现实,这非常可怕)。问题2我觉得是主要是舆论导向的(它的交代,但我的回答和别人的可能不同,我们俩都必然是错误的)。
jigsaw
-style模块只是对软件包的技术改进吗?3)(如果不是1,如果是2),是Java只是(或表面上)保留两个概念以实现向后兼容。这些问题中有一些是可以回答的,有些主要是基于观点的。我认为,在此处进行简化所需的澄清的编辑是有必要的。