程序设计语言正交特性的一点思考

面向逻辑思维的程序设计方法——如何设计人形机器人一个“脑“ 面向逻辑思维的程序设计方法——如何设计人形机器人一个"脑"基于七层认知层次模型与世界大模型的大脑—小脑双层神经层(L4)架构作者:冯胤清 三门峡黄河明珠集团有限公司水力发电公司,河南三门峡 472000,peak918 @qq.com中图分类号:TP242.6   文献标志码:A系列论文说明:本文为"面向逻辑思维的程序设计方法"系列论文第四篇。系列脉络为:总纲《七层认知层次模型与社会化测试框架》→ 世界模型篇《分析世界模型》→ 肢体篇《如何设计一双灵巧的手》→ 本篇:神经层(L4)"脑"专论。 阅读详情

    在《程序员》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用一个错误的例子来证明自己的观点,给我留下了很大的问号。希望下次能看到他用真正有说服力的论据来阐明对正交性的看法。

【STABLE_BASELINE3】强化学习算法实战:模型的保存,读取,再训练 STABLE-BASELINE3,模型读取,再训练:有时候需要在已经训练好的模型基础上进行再次训练。 阅读详情

相关推荐

企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程

本文详细解析了企业微信群机器人的Webhook配置全流程,从创建机器人、获取关键Webhook地址,到使用代码发送文本、Markdown等多种消息类型。内容涵盖安全加固、错误处理及与CI/CD等系统集成的实战指南,帮助企业快速构建高效、稳定的内部通知系统。

ik678901的博客 1783

计算机语言的正交性,什么是“正交性”?

程序设计语言中的正交性意味着可以用相对较少的方式组合相对较小的一组基本构造,以构建语言的控制和数据结构。而且,每个基元的所有可能组合都是合法的和有意义的。例如,考虑数据类型。假设一种语言有四种基本数据类型(整型,浮点型,双精度型和字符型)以及两个类型运算符(数组和指针)。如果两个 类型运算符可以应用于自己和四种基本数据类型 可以定义大量的数据结构。 正交语言特征的含义独立于其在程序中出现的 上下文...

weixin_28933027的博客 2252

信息奥赛课课通(C++)p154-1近似排序

试题描述 读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出,该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30. 输入要求 1行,包含两个用空格隔开的自然数,这两个自然数给出了待排序数的范围,其中1≤第一个数≤第二个数≤999999999,两个数之差不超过100. 输出要求 输出排序后的数据,每行输出...

mengdicfm的博客 7282

C++的缺省参数与函数重载是正交特性吗?

    在《程序员》2003年第12期的一篇访谈录中,Ruby的发明人Matz较详细地阐述了Ruby的设计思想及遵循的原则,其中大部分我都深以为然,特别是他高度重视语言设计过程中人的因素则更是让人激赏。不过他对正交特性的看法却让我颇为迷惑。    正交(orthogonal)本来是一个几何概念,表示的是垂直相交,后来又被扩展到线性代数中,表示内积为零的两个向量之间的关系。线性空间中一组两两正交的非

歌谣在风中飘舞 4834

如何用 Python 实现自动化测试?详细步骤和代码示例

Python自动化测试实战指南 本文系统介绍了使用Python构建自动化测试体系的完整方案。主要内容包括: 环境搭建:Python 3.8+虚拟环境配置,安装pytest、Selenium等核心测试库 分层测试实现: 单元测试:通过计算器示例演示pytest断言和异常测试 API测试:使用requests库进行RESTful接口验证 UI测试:Selenium WebDriver实现网页交互测试 高级特性: 使用fixture管理测试依赖 参数化实现数据驱动测试 生成HTML和Allure测试报告 GitH

m0_64424835的博客 450

基于STM32的可穿戴式多生理参数实时监测与预警系统

针对传统可穿戴健康设备存在的生理参数监测种类单一、数据处理依赖云端导致响应滞后、续航能力弱等问题,设计一种基于STM32的可穿戴式多生理参数实时监测与预警系统。系统以STM32L476RG低功耗微控制器为核心,集成心率血氧传感器、体温传感器、血压传感器,实现人体心率、血氧饱和度、体温、收缩压/舒张压的同步采集;通过边缘端轻量化数据处理算法完成参数异常判定,结合低功耗硬件设计与软件休眠策略,在保证监测精度的同时延长续航。测试结果表明,系统心率监测误差≤2次/分钟,血氧饱和度误差≤2%,体温误差≤±0.2℃,血

m0_74026776的博客 2039

linux内核中的设计模式

创建型     Object Pool   Object Pool模式可以提升性能,尤其是在对象的分配、初始化成本高,使用频率高 但使用时间短的情况下。对象池可以设置对象池的大小和回收时间缓存预分配的对象。 NT和Linux都有简单的预分配缓存对象的机制,也就是Lookaside Cache机制。NT的 对象管理器使用延迟删除和垃圾回收机制实现真正意义上的对象池。在调用NtClos

鱼思故渊的专栏 3829

[网络安全提高篇] 一二〇.恶意软件动态分析经典沙箱Cape批量提取动态API特征

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文详细介绍动态分析沙箱Cape的安装过程,其是一个开源的自动恶意软件分析系统,通过自动运行和分析恶意软件,全面分析和提取恶意软件的关键特征。然而,当样本数量增加时,单个样本分析会降低效率。这篇文章将讲解如何实现Cape沙箱的批量分析,通过调用Python脚本文件来实施批量处理,并将分析结果存储在指定位置,最后补充submit.py的参数及Python调用方式。基础性文章,希望对您有帮助!

杨秀璋的专栏 4121

UNIX编程艺术之“模块性”

     本章主要讨论模块划分、接口设计,提出了几个很重要的概念,包括紧凑性、正交性、自顶向下和自底向上的封装、SPOT原则、分层、插件化。下面就这几个概念,谈下我的理解的思考,并在最后给出项目中模块设计的基本原则。    1. 紧凑性    紧凑性最优化的体现是,使用者无需手册和文档,即可放心的使用,而不用担心额外的影响,这便要求接口简洁、清晰,模块功能集中无冗余,体现了接口设计中“高内聚”的思想。    2.正交性    正交性关注的主要是功能单一,不做“顺带”的事情,对调用者而言接口统一,这样,即使代

nellson的专栏 1009

赛豆科技 AIVA 汽车智能体架构演进面试题与答案

摘要 赛豆科技AIVA汽车智能体架构从座舱AI演进到整车智能体,最终实现自进化的超级智能体。其核心是"先有AI再有车"的理念,将AI作为产品主轴而非附加功能。架构设计采用端-边-云协同,确保低延迟响应;整车智能体通过Planner、Tool Registry等关键组件实现自主决策;自进化机制结合车端个性化学习和云端群体学习,并设置多重安全验证。多域协作采用分层架构,关键安全功能仍由确定性逻辑控制。该架构实现了从被动响应到主动服务的范式转变,使车辆能够持续进化。

AI天才研究院 121

【深度学习】什么是自回归模型?

自回归模型是一种重要的时间序列模型,通过利用过去的值来预测当前或未来的值。它在统计学、经济学、自然语言处理等领域有广泛的应用。自回归模型的简单性和可解释性使其成为许多应用的首选,但在更复杂的情况下,可能需要结合其他模型如移动平均模型(MA模型)或混合模型(如ARIMA)来更好地捕捉时间序列中的模式。扩散模型(Diffusion Model)和自回归模型(Autoregressive Model)是两种不同的生成模型,各自有独特的特点和应用场景。

q742971636的博客 1670

Linux/UNIX为什么比Windows安全

说到安全 通俗的说法是Linux比windows安全 但是你知道原因吗? 这是一个非常流行的言论: Linux下的病毒少,是因为Linux的使用者少,黑客显然不愿意浪费气力去攻击没有人使用的操作系统。 您可能已经知道了,互联网上用作重要用途的服务器,其中很大一部分是Linux系统,另外的一部分是Unix系统,如果黑客能够搞掉Linux系统的话,那么整个互联网就会陷于瘫痪!效果似乎更好一些

涛行无疆的专栏 4465

【感知模块算法】障碍物detect+trace+prediction方向介绍

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、多维度看感知问题,体会复杂性二、障碍物/环境目标detect方向1.视觉目标检测方向(1)图像处理认知(2)视觉基础理论部分1、获取数据集---python网页爬虫、买数据、自己录数据、使用开源比赛的数据集2、opencv库的学习3、深度学习框架学习(3)视觉目标检测理论(1)目标检测的概念(2)目标检测的应用场景(3)现有目标检测框架原理及论文【这仅仅是我当初入门学习的框架~

qq_35635374的博客 2894

程序设计语言正交特性的一点思考 选择自 soloist 的 Blog

 在《程序员》2003年第12期的一篇访谈录中,Ruby的发明人Matz较详细地阐述了Ruby的设计思想及遵循的原则,其中大部分我都深以为然,特别是他高度重视语言设计过程中人的因素则更是让人激赏。不过他对正交特性的看法却让我颇为迷惑。    正交(orthogonal)本来是一个几何概念,表示的是垂直相交,后来又被扩展到线性代数中,表示内积为零的两个向量之间的关系。线性空间中一组两两正交的非零

ssbs2004的专栏 511

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

计算机语言的正交性,【zt】程序设计语言正交特性的一点思考

在《程序员》2003年第12期的一篇访谈录中,Ruby的发明人Matz较详细地阐述了Ruby的设计思想及遵循的原则,其中大部分我都深以为然,特别是他高度重视语言设计过程中人的因素则更是让人激赏。不过他对正交特性的看法却让我颇为迷惑。正交(orthogonal)本来是一个几何概念,表示的是垂直相交,后来又被扩展到线性代数中,表示内积为零的两个向量之间的关系。线性空间中一组两两正交的非零向量被称为正交...

weixin_39664998的博客 367

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

假期在家无聊?那就免费学习下Go语言吧!!!

一、前言Go语言在设计时,Java和C ++是编写服务器程序最常用的语言(至少在Google是这样),这是因为使用这些语言可以高效的开发。但是Go设计者们觉得像Java和C++这些语言需...

技术原始积累 433

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

《C++ 语言的设计和演化》摘要暨读后感

序:许多事实给了我们一种警示:时尚转眼就可能变成为无人理睬的烂泥,仅仅被眼球注意的东西很快就会被忽视,炒作最凶的东西往往也消失得最快,而真正有价值的成果则往往起源于人们最基本的需求和向往。 致读者:在此我要重申自己长期的且强烈持有的一个观点:语言的比较很少是有意义的、更少是公平的。 我始终不渝的信念是,所有成功的语言都是逐渐成长起来的,而不是仅根据某个第一原则设计出来的。原则是第一

thy专栏 1458

程序设计--浅谈编程解决实际问题的常见思想

现实生活中有很多问题,人为不好解决,但利用计算机速度快,不出错的特性,可以很方便的解决这些问题,下面简单说说我在程序设计中解决实际问题的一些常见思想,高手可以忽略掉,我也是无聊了随便写写而已。 1.枚举最优解时的情况 有很多问题初看很棘手,但经过仔细的分析,可以得出一些显然的结论。 比如下面这个问题: 平面内有上千个点,用一个半径为R的圆去覆盖,最多能覆盖多少点? 很多程序员最...

weixin_30633949的博客 321

程序设计--浅谈编程解决实际问题的常见思想(转)

现实生活中有很多问题,人为不好解决,但利用计算机速度快,不出错的特性,可以很方便的解决这些问题,下面简单说说我在程序设计中解决实际问题的一些常见思想,高手可以忽略掉,我也是无聊了随便写写而已。 1.枚举最优解时的情况 有很多问题初看很棘手,但经过仔细的分析,可以得出一些显然的结论。 比如下面这个问题: 平面内有上千个点,用一个半径为R的圆去覆盖,最多能覆盖多少点? 很多程序员...

weixin_34202952的博客 366

关于集合框架的思考

这篇文章转自 jungleford blog 这篇文章很简洁明了的阐述了集合框架的一些原理;不像很多文章看过去就头痛; jungleford如是说     对于Java集合框架(Java Collections Framework,JCF),Java玩家大概都不会陌生,在C++里面相似的概念是标准模板库(Standard Template Library,STL),主要是

tianjinsong的专栏 5530

Java集合框架的思考

注:本文转载,觉得写得太好了 对于Java集合框架(Java Collections Framework,JCF),Java玩家大概都不会陌生,在C++里面相似的概念是标准模板库(Standard Template Library,STL),主要是对一些数据结构和相关算法的封装。考虑到这是一个Java初学者将会经常接触的工具,所以有了以下的一些文字。主要是参考了IBM developerWork...

三言两语 254

如何设计一门语言(十二)——设计可扩展的类型

在思考怎么写这一篇文章的时候,我又想到了以前讨论正交概念的事情。如果一个系统被设计成正交的,他的功能扩展起来也可以很容易的保持质量这是没错的,但是对于每一个单独给他扩展功能的个体来说,这个系统一点都不好用。所以我觉得现在的语言被设计成这样也是有那么点道理的。就算是设计Java的那谁,他也不是傻逼,那为什么Java会被设计成这样?我觉得这跟他刚开始想让金字塔的底层程序员也可以顺利使用Java是有关系

GarfieldEr007的专栏 1129

程序员修炼之道(读书笔记):2.注重实效的途径

正交性:该术语用于表示某种不相依赖性或是解耦性。非正交系统的改变与控制更复杂是其固有的性质。当任何系统各组件互相高度依赖时,就不具有局部修正(local fix)这样的事情。设计:在程序设计的同时,还要问问你自己,你的设计在多大程度上解除了与现实世界中的变化的耦合?你在把电话号码当做顾客标识符吗?如果电话公司重新分配了区号,会怎样?不要依赖你无法控制的事物属性。可撤销性:如果某个想法是你唯一的想法,

417

编程思想

现实生活中有很多问题,人为不好解决,但利用计算机速度快,不出错的特性,可以很方便的解决这些问题,下面简单说说我在程序设计中解决实际问题的一些常见思想,高手可以忽略掉,我也是无聊了随便写写而已。 1.枚举最优解时的情况 有很多问题初看很棘手,但经过仔细的分析,可以得出一些显然的结论。 比如下面这个问题: 平面内有上千个点,用一个半径为R的圆去覆盖,最多能覆盖多少点? 很多程序

eclipse_xu 2979

关于集合框架的思考(转)

jungleford如是说 对于Java集合框架(Java Collections Framework,JCF),Java玩家大概都不会陌生,在C++里面相似的概念是标准模板库(Standard Template Library,STL),主要是对一些数据结构和相关算法的封装。前段时间在J2SE版看到一个关于Java集合框架的问题,当时re了一下,简单解释了一些的概念,考虑到这是一个...

agan007 141

C++:民主的产物

民主政体:C++的设计哲学 摘自《C++语言的设计与演化》 1) 这就意味着语言的设计已经脱离了“纯粹的”和更抽象的学科,例如数学与哲学。为了更好地为了它的用户服务,一种通用程序设计语言必须是折衷主义,需要考虑到很多实践性和社会性的因素。 2) 特别地,每种语言的设计都是为了解决一个特定问题集合的为题,在某个特定时期,依据某个特定人群对问题的理解。由此产生了初始的设计。而后它逐渐成长,去满足

RONGE-KUTA的博客 705
上一篇: 在VC6.0中如何让new操作失败后抛出异常?
下一篇: 汇率战争下的人民币走势
ShenRui
博客等级 码龄20年 63粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值