- 浏览: 43138 次
- 性别:
- 来自: 上海
最新评论
程序设计语言正交特性的一点思考
程序设计语言正交特性的一点思考
作者:佚名 文章来源:不详 点击数: 更新时间:2007-7-1
在《程序员》2003年第12期的一篇访谈录中,Ruby的发明人Matz较详细地阐述了Ruby的设计思想及遵循的原则,其中大部分我都深以为然,特别是他高度重视语言设计过程中人的因素则更是让人激赏。
不过他对正交特性的看法却让我颇为迷惑。
正交(orthogonal)本来是一个几何概念,表示的是垂直相交,后来又被扩展到线性代数中,表示内积为零的两个向量之间的关系。线性空间中一组两两正交的非零向量被称为正交向量组,而在n维线性空间中,n个向量组成的正交向量组一定线性无关,因而也就一定是该空间的基。这意味着什么呢?这意味着该空间中的任意向量都可以由这一组正交向量经线性组合(linear combination)得出,因此我们可以通过这n个向量表达整个线性空间。
在计算机科学领域,正交这个词通常表示基本元素之间互相独立与良好隔离,并且它们具备组合出一个完整"空间"的能力,而缺少其中任何一个都会丧失这种能力。如果把全面的逻辑运算想象成一种"运算空间"的话,那么not、and、or就是三个互不影响、互相不可替代的正交操作。由它们出发可以完成任意复杂的逻辑运算,但是无论少了谁,我们都会遇到某些无法完成的逻辑任务。再比如unix/linux系统提供了许多基本工具,其中每种工具都只专注于完成一种基本任务,并且基本任务也不互相重叠,所以工具的接口之间是正交关系,而用户则能通过管道等机制组合使用这些工具以完成各种复杂的任务。
一门程序语言的功能可以看作是一个"功能空间",语言只需拥有一组数量合适的正交特性(这些特性各自提供了互相独立的基本功能)便可以通过组合它们来实现"功能空间"中的任何功能。很明显,这种设计是在不损失语言能力的前提下的最简方案。不过最简是否意味着最优则仁者见仁智者见智了。在这点上Matz认为:正交性是设计的工具,而不是设计的主要目标。但是接下来Matz用来证明他观点的例子则似乎有些问题。
Matz举的例子是C++的缺省参数和函数重载。他认为这两种特性是正交的,可以同时使用,但是混合使用有时却会导致问题,这就需要人脑去猜测编译器的处理规则,而这种规则往往并不显然,所以这是一个有关正交性的反例。我同意同时提供缺省参数和函数重载并不是个好主意,尤其对初学者来说。比如下面的代码就会产生一个有些晦涩的编译错误:
void foo(int a = 2005)
{
//do something using a
...
}
void foo()
{
// do something
...
}
int main()
{
foo(3); //OK
foo(); //compile error:
//ambiguous call to overloaded function
return 0;
}
但是这两个特性是正交特性吗?实际上缺省参数功能可以非常容易地由函数重载特性来实现:
void foo(int a)
{
// do something using a
...
}
void foo()
{
foo(2005);
}
int main()
{
foo(3); //OK
foo(); //OK,就好象调用一个缺省参数值为2005的foo函数
return 0;
}
由此可以看出,缺省参数这个特性在功能上是冗余的,与函数重载不可能是正交关系。这个例子恰恰演示了某些不遵循正交性的设计会带来什么样的不良后果。不过能够做一样事情和能方便地做一样事情是有区别的,人们常常会为了现实的好处而牺牲理论的优美,个人认为这也是为什么C++会提供缺省参数这么一种语法糖衣(syntactic sugar)。
Matz用一个错误的例子来证明自己的观点,给我留下了很大的问号。希望下次能看到他用真正有说服力的论据来阐明对正交性的看法
文章录入:admin 责任编辑:admin
发表评论
-
阅读文章 最简单解决CHM文件无法显示的办法
2009-12-03 10:07 979在CHM文件右键——属性——解除锁定!万事大吉! -
log4j:ERROR LogMananger.repositorySelector was null likely due to error in class
2009-11-28 13:13 4755Log4j 1.2.15存在一个bug -
Hibernate: Log SQL Statements
2009-11-28 13:12 1315Hibernate: Log SQL Statements A ... -
程序员修炼之道:正交软件架构方法
2009-11-28 13:09 1107程序员修炼之道:正交软 ... -
ICEFaces 值修改事件处理 ValueChangeEvent
2009-11-28 13:01 1093public void genreOthersChang ... -
"node to traverse cannot be null"
2009-11-28 13:00 3415java hibernate 中"node to t ... -
Debugging Tomcat Using JDB
2009-11-28 12:59 974Debugging Tomcat Using JDB Subm ... -
what is “Microsoft-WebDAV-MiniRedir/5.1.2600″ ?
2009-11-28 12:58 244210 1月 2009 So, what is “Microso ... -
漏洞扫描工具nikto使用心得
2009-11-28 12:57 24002009-03-18 12:33:14 www.hackba ... -
Windows添加移动到 右键菜单
2009-11-28 12:56 968Windows Registry Editor Version ... -
Windows隐藏登录界面用户名
2009-11-28 12:55 980Windows Registry Editor Version ... -
Windows XP 注册表设置文件
2009-11-28 12:54 1751Windows XP 注册表设置文件 作者:admin 日期: ... -
Distributed Transaction Coordinator 服务因 3221229584 (0xC0001010) 服务性错误而停止
2009-11-28 12:53 2173Distributed Transaction Coordin ... -
安装GNOME中文桌面环境
2009-11-28 12:52 14258.3. 安装GNOME中文桌面环境 Prev Chapter ... -
Oracle命令行修改表空间大小
2009-11-28 12:50 2503alter tablespace system resize ... -
Oracle批量删除对象
2009-11-28 12:50 1546DECLARE TYPE name_list IS TABLE ... -
免安装Oracle运行pl/sql developer
2009-11-28 12:47 929Keiboc发布于 2008-5-08 | 1062次阅读 ... -
undefined reference to `_strcasestr'
2009-11-28 12:42 1561undefined reference to `_strcas ... -
使用automake的顺序
2009-11-28 12:41 964acloacl, autohead, automake --a ... -
ORA-01658: 无法为表空间XXX中的段创建 INITIAL 区
2009-11-28 12:40 2375表空间耗尽
相关推荐
程序设计语言原理的重点涵盖了多个层面的内容,包括语言的评价标准、语言的基本特性和分类、语言设计的影响因素以及语言核心概念的定义和机制。 首先,语言的评价标准是衡量一种程序设计语言优劣的关键因素。标准...
正交设计助手II 3.1版本可能包含了以下改进和特性: - 界面优化,提升用户体验,使操作更加直观易用。 - 增强了对复杂实验设计的支持,如多因素、多水平的情况。 - 更新了统计模型,提供了更精确的数据分析方法。 -...
在OFDM系统中,正交性是关键特性,确保了不同子载波间的干扰最小。正交性检测是验证OFDM系统设计是否正确的重要步骤。上述代码提供了一个完整的MATLAB程序,用于验证OFDM系统的正交性。程序中主要涉及以下几个知识点...
正交设计助手是一款专为实验设计打造的工具,旨在帮助用户高效、系统地进行各种实验方案的规划与分析。在科学研究、工程优化、产品质量控制等领域,正交设计是一种常用的方法,它通过精巧的实验安排,能以最少的实验...
正交试验设计是一种统计学上的方法,主要用于通过少量的试验次数来获得对因素影响大小的结论,从而确定最优的试验条件。它广泛应用于各行各业中,尤其是在工程建设中,为了缩短试验周期、减少成本,正交试验设计成为...
正交试验助手破解版,可以做混合正交实验表,很方便快捷。
一次回归正交设计、二次回归正交设计和二次回归旋转设计都是常用的实验设计方法,它们广泛应用于实际生产中,例如产品的产量与时间、温度、压力和溶液浓度之间的关系。通过这些设计方法,可以分析和优化产品的生产...
正交试验设计是一种在科学研究和工程实践中广泛应用的统计方法,主要目的是通过有限次的试验,高效地探索多个因素(因子)及其不同水平(状态)对试验指标的影响,从而找到最优的试验条件。这一方法最早由统计学大师...
正交试验设计方法 正交试验设计方法是试验设计中的一种重要方法,它可以帮助研究人员设计合理的试验方案,以获取有价值的试验数据。在本章节中,我们将详细介绍正交试验设计方法的定义、特点、优点和应用。 5.1 ...
正交试验设计是一种高效的方法,尤其适用于多因素试验情况,旨在通过有限的试验次数找到最优因素组合。在实际工业生产和科学研究中,往往涉及到多个因素,如材料成分、工艺参数等,这些因素共同影响最终产品的性能或...
在信号处理领域,正交性是一个非常重要的概念,特别是在数字信号处理、通信系统以及频谱分析中。...通过DFT,我们可以有效地检验两个信号是否正交,这对于设计高效的数据传输系统、频谱利用和信号分析都至关重要。
正交试验设计是一种高效的方法,尤其适用于解决多因素试验的问题,它通过精心设计的正交表来安排试验,以减少试验次数并确保因素间的均衡搭配。这种方法最初在美国诞生,后来在日本得到了广泛应用,对于提高生产效率...
正交矩阵表通常列出了一系列预设计好的正交序列,这些序列具有良好的统计特性,比如均匀性和平衡性。在实验设计中,使用正交矩阵可以最小化实验次数,同时保证各个因素对结果的影响可以被有效地估计和比较。例如,在...
《正交设计助手:探索与应用》 正交设计是一种高效、系统且经济的实验方法,广泛应用于工业、农业、医学、化学等多个领域。它通过精心设计的实验方案,能够以最少的实验次数获取最全面的数据,从而有效地探索变量间...
而"正交设计助手II专业版"则应该是软件的安装程序,用户可以通过这个文件安装并启动软件。 总之,这款正交试验设计软件是科研和生产人员的得力助手,它通过专业且易用的功能,使复杂的数据分析变得简单,有助于用户...
课程设计1正交幅度调制(QAM)及设计与仿真.pdf课程设计1正交幅度调制(QAM)及设计与仿真.pdf课程设计1正交幅度调制(QAM)及设计与仿真.pdf课程设计1正交幅度调制(QAM)及设计与仿真.pdf课程设计1正交幅度调制(QAM)及设计...
正交表和正交矩阵是统计学和实验设计领域中重要的工具,特别是在质量控制和优化实验设计中。本文将深入探讨这两个概念以及相关的正交设计助手软件。 首先,正交表是一种高效的实验设计方法,它允许在有限的实验次数...
正交实验设计是一种实验设计方法,它通过选择部分具有代表性的实验点进行试验,以获得关于系统或者过程的信息。这种方法基于正交表,正交表是一种特殊的矩阵表格,能够高效地安排和分析多因素实验设计。 在学习正交...
正交实验设计法是一种在科学研究和工程实践中广泛使用的统计优化技术,主要用于探究多个因素(因子)对某一响应变量(指标)的影响。这种方法的核心是利用正交表来安排实验,以达到在最少的实验次数内获取尽可能多的...