|
|
1
2
有很多语言都有模块系统。三个立即浮现在脑海中的是标准ML的模块系统、球拍的单元系统和Newspeak的模块系统。 有些人认为这三个系统比OSGi或类似的系统更强大或设计更好(或两者兼而有之)。 有 认真地 ,类自动成为模块定义,对象自动成为模块。 这与其他模块系统(如标准ML、Racket或OSGi)形成了鲜明的对比,它们通常是 疯狂的 复杂。以下是BitC编程语言设计师Jonathan Shapiro关于设计模块系统的一段有趣的话: 当Haskell的设计师之一Simon Peyton Jones被问及为什么Haskell只有这样一个基本的模块系统时,他说他们觉得自己不够聪明,无法设计出一个真正的模块系统。让它沉入。。。这个 Haskell的设计师 不聪明 NeXTalk的设计非常精彩:在面向对象中,每件事情都是一个消息发送(在java中,这是一个(非静态的)方法调用,在C++中,这是一个虚函数调用)。在大多数面向对象语言中,不幸的是这不是真的。您有变量、字段、常量、非虚拟函数、静态方法、类字典、包字典等。访问其中任何一个都不是通过消息发送完成的,而是通过其他一些方式。
在Newspeak上就不是这样了:在Newspeak中,一切都是消息发送。甚至类的超类也是消息发送。(即:如果我写
是不是 封闭范围。并且不能调用从超类继承的方法,因为 声明 作为一个超类,您需要调用一个方法,但您只能调用定义的方法 全班同学。 只有 将依赖项注入类的方法,因此类初始值设定项作为模块依赖项规范发挥作用。
其他一些很酷的功能也自然会从中脱颖而出。许多其他模块系统没有的特性:由于模块实际上只是一个类,所以可以有一个模块的多个实例,只需像调用任何其他类一样多次调用构造函数。在许多其他模块系统中,模块是单例的。 而且,您可以将参数传递给构造函数,从而为您提供参数化模块,这通常仅由非常高级的模块系统(如果有的话)支持。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 11 月前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 11 月前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 11 月前 |
|
pebble unit · 如何检查以前缀开头、以后缀结尾的属性(不是属性值) 11 月前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |