我想知道Java是否是正交的,如果是,那么它的哪些特性使其正交。如何确定一种语言是否正交?比如我在某个网站上发现C++不是正交的,但是没有解释,为什么不呢。还有哪些其他语言是正交的?请帮助我,因为互联网上几乎没有关于这个主题的信息。
谢谢
我想知道Java是否是正交的,如果是,那么它的哪些特性使其正交。如何确定一种语言是否正交?比如我在某个网站上发现C++不是正交的,但是没有解释,为什么不呢。还有哪些其他语言是正交的?请帮助我,因为互联网上几乎没有关于这个主题的信息。
谢谢
UNIX 编程艺术,第 4 章。模块化,正交性,第 89 页:
正交性
正交性是最重要的属性之一,它可以帮助使复杂的设计变得紧凑。在纯正交设计中,操作没有副作用;每个操作(无论是 API 调用、宏调用还是语言操作)只改变一件事,而不会影响其他操作。改变你控制的任何系统的每个属性只有一种方法。
编程语言语用学,第 6 章,第 228 页:
正交性意味着特征可以以任何组合使用,组合都有意义,并且给定特征的含义是一致的,而不管它与其他特征组合。
在 Lisp 上,5.2 正交性:
正交语言是一种可以通过以多种不同方式组合少量运算符来表达很多内容的语言。
我认为正交编程语言的每个功能都具有最小或没有副作用,因此可以使用它们而无需考虑该用法将如何影响其他功能。我从正交 API 的定义中借用了这一点。
例如,在 Java 中,您必须评估是否存在在标识符上同时使用时可能相互影响的关键字/结构的组合。例如,在将public
andstatic
应用于方法时,它们不会相互干扰,因此这两者是正交的(除了关键字打算做的事情之外没有副作用)
您必须对其所有功能都这样做以证明正交性。这是解决问题的一种方法。我认为在这件事上也不存在一个明确的界限是正交还是不正交。
使用术语正交编程语言是不寻常的。通常,在计算机科学中,您实际上是在谈论正交指令集。但是,如果我们要将含义扩展到语言的语法:
“......意思是[语言]具有相对较少数量的基本结构和一组用于组合这些结构的规则。每个结构都有一个与之关联的类型,并且对这些类型没有限制......” 参见 ALGOL
然后我们可以假设,如果不是语言中的所有指令都适用于所有数据类型,那么将产生非正交性。然而,这并不意味着反之亦然,也就是说,如果所有语言指令都适用于所有数据类型,并不一定意味着该语言是正交的。
更正式地说,正交语言将只有一种方法来执行给定的操作。非正交语言将有不止一种方法来实现相同的效果。
最简单的例子:
for loop; vs. while loop;
for 和 while 是非正交的。
正交性是独立于语言的设计特征。当然,某些语言可以让您更轻松地为您的系统进行正交设计,但您不应该专注于特定语言来保持系统设计尽可能正交。
正交性本身并不是真正的语言特性,即使某些语言具有促进正交性的特性(例如注释、内置 AOP 等)。关于 Java 中的正交性:我已经使用 log4j 作为示例编写了一个关于此的小案例研究:“ Orthogonality By Example ” - 您可能会发现这很有用。
C中缺乏正交性:
void
如果满足以下条件,则认为编程语言是正交的:
有一组相对较少的原始结构可以以相对较少的方式组合来构建数据和控制结构
每个可能的结构都是合法的
例如,具有 4 种基本数据类型(Int、Float、Double、Char)和两种
类型运算符(Array 和 Pointer)的语言可以创建相对大量的数据结构。
所以正交性的好处是让语言简单而规律,因为异常少。