漫画 | 这个北欧小国的一个发明,让每个程序员都爱恨交加,无法逃脱!

上世纪60年代 ,挪威计算中心。

一个新来员工刚上班,发现有两个人居然在一楼的黑板前打架

新员工立刻跑到电话接线员那里报告

什么样的编程语言,能让两人大动肝火?

当时Nygaard正在编写复杂系统的模拟程序,模拟程序要求先定义通用的行为,然后再创建大量的实例出来。

挪威不是计算机和软件的强国,挪威计算中心也不是资金雄厚的研究所。

Dahl和Nygaard要发明新编程语言的事情,遭到了组织内部的批评。

但是Dahl和Nygaard并不在意,他们以ALGOL 60 为基础,开始设计Simula 。

在不断的设计迭代中,两人迸发出来强大的创造力,在Simula中发明了现代面向对象的所有关键概念!

Simula本意是为了做“模拟”,但后来大家认识到,这是一种新的编程泛型,它完全可以作为通用的编程语言。

Simula是世界上第一个面向对象的语言,Dahl和Nygaard因为对面向对象的卓越贡献获得了计算机界最高奖:图灵奖。

可惜的是,2002年,Dahl和Nygaard不幸去世,在这里向两位前辈致敬。

让我们再把目光转向美国,1968年,博士生Alan Kay 提了一个非常超前的想法:制作一台适合所有年龄段儿童的个人电脑!Dynabook。

Dynabook需要有图形用户界面,有无线网络,可以协作,并且本身就是个强大的编程环境。

1970年,Alan Kay 加入了著名的施乐帕洛阿托研发中心,Dynabook的想法成功地激发施乐开发了Alto电脑。

Alto电脑是个划时代的产品,里边有很多影响后世计算机的重大创新

Smalltalk是第一个纯粹的面向对象编程语言,在Smalltalk中,一切都是对象!

所有的计算都是通过发送消息来完成的,消息传递是Smalltalk最重要的概念。

Smalltalk对后来的编程语言产生了巨大的影响力,它发明的MVC被后来各种框架采用。

它实现的消息传递、GC、字节码、纯粹的面向对象被很多语言借鉴。

重构、设计模式、极限编程后来也被发扬广大。

Simula和Smalltalk作为两个面向对象的先驱,可以说是领先时代,但它们都没有大范围地流行起来

1969年,一个叫Bjarne Stroustrup的年轻人进入丹麦Aarhus大学学习计算机专业。

在这里他遇到了Simula的发明人Nygaard,挪威离丹麦不远,Nygaard经常来这里讲学。

面向对象的思想就此在Bjarne Stroustrup脑海中埋下了种子。

1979年,Bjarne Stroustrup 在剑桥大学写博士论文的时候,他再次注意到了Simula。

Bjarne Stroustrup毕业后加入了贝尔实验室,在这里他近距离接触到了C语言。

Bjarne Stroustrup决定为C语言增加一些类似Simula的面向对象特征

1985年,C++的第一个版本发布,它既有C语言闪电般的速度,又支持面向对象,受到了大家的热烈欢迎。面向对象从此进入主流。

到了90年代,Java出现,更是将面向对象推向最高峰。

程序员对面向对象编程技术(OOP)的看法,往往是两极分化。

喜欢OOP的程序员认为面向对象更贴近现实世界建模,更容易组织大型项目,很多框架也是面向对象架构;而抱怨OOP的程序员则认为它复杂度过高,容易抽象过度,低性能,过度封装反而碍事......

当然也有中立派,认为OOP只是工具,场景对了就是神,错了就是灾难。 不少现代程序员倾向于多范式编程,该用对象就用对象,该用函数式就用函数式。

你对面向对象怎么看呢?欢迎评论区留言!

提供了基于BP(Back Propagation)神经网络结合PID(比例-积分-微分)控制策略的Simulink仿真模型。该模型旨在实现对杨艺所著论文《基于S函数的BP神经网络PID控制器及Simulink仿真》中的理论进行实践验证。在Matlab 2016b环境下开发,经过测试,确保能够正常运行,适合学习和研究神经网络在控制系统中的应用。 特点 集成BP神经网络:模型中集成了BP神经网络用于提升PID控制器的性能,使之能更好地适应复杂控制环境。 PID控制优化:利用神经网络的自学习能力,对传统的PID控制算法进行了智能调整,提高控制精度和稳定性。 S函数应用:展示了如何在Simulink中通过S函数嵌入MATLAB代码,实现BP神经网络的定制化逻辑。 兼容性说明:虽然开发于Matlab 2016b,但理论上兼容后续版本,可能会需要调整少量配置以适配不同版本的Matlab。 使用指南 环境要求:确保你的电脑上安装有Matlab 2016b或更高版本。 模型加载: 下载本仓库到本地。 在Matlab中打开.slx文件。 运行仿真: 调整模型参数前,请先熟悉各模块功能和输入输出设置。 运行整个模型,观察控制效果。 参数调整: 用户可以自由调节神经网络的层数、节点数以及PID控制器的参数,探索不同的控制性能。 学习和修改: 通过阅读模型中的注释和查阅相关文献,加深对BP神经网络与PID控制结合的理解。 如需修改S函数内的MATLAB代码,建议有一定的MATLAB编程基础。
<think>好的,用户现在问的是“Go语言中rune的全称是什么,每个字母都代表什么意思”。首先,我需要确认这个问题的答案是否存在。根据我的知识,rune在Go语言中是一个类型别名,对应int32,用来表示Unicode码点。但用户问的是全称以及每个字母的含义,这可能有点陷阱,因为实际上“rune”这个词本身并不是缩写,而是直接借用了英语中的词汇。 接下来,我要回想一下rune这个词的来源。在英语中,rune指的是古代北欧的如尼字母,属于一种古老的文字符号系统。Go语言采用这个词,可能是因为它带有“字符”或“符号”的意味,符合其用来表示Unicode字符的用途。所以这里用户可能误解rune是一个缩写,比如像ASCII这样的首字母缩写词,但实际上并不是。 然后,我需要考虑用户的潜在需求。用户可能在学习Go语言时遇到了rune类型,想要更深入理解其命名的由来,或者被其他人问到这个问题,所以想确认是否有隐藏的含义。也有可能用户在学习编程时,习惯性地认为术语都是缩写,所以想拆解每个字母的含义。 我需要明确回答,指出rune并不是缩写,而是直接引用了古北欧文字的名称,解释其背后的原因,以及为什么Go语言选择这个词。同时,可能需要补充说明rune在Go中的实际用途,比如处理Unicode字符,与int32的关系,以巩固用户的理解。 另外,要检查是否有其他可能的误解。例如,是否有其他编程语言中的类似概念有缩写,导致用户产生联想。比如,有些术语确实是首字母缩写,但rune并不是这种情况。因此,在回答时需要明确指出这一点,避免混淆。 最后,确保回答结构清晰,先直接回答问题,再详细解释rune的来源和在Go中的意义,帮助用户全面理解。同时,语言要简洁明了,避免使用过于专业的术语,让初学者也能理解。</think>在 Go 语言中,**`rune` 并没有全称**,因为它本质上是一个直接借用的英语单词(非缩写词),其命名来源于历史语言学的概念。 --- ### 词源解析 1. **Rune 的原意** `rune` 一词源自**古日耳曼语**(Old Norse *rún*),原指**古代北欧的如尼字母**(Runic alphabet)——一种用于日耳曼语言的古老文字符号系统(如下图)。 ![如尼字母示例](https://upload.wikimedia.org/wikipedia/commons/thumb/7/7c/Runic_letter_fehu.svg/1200px-Runic_letter_fehu.svg.png) 2. **符号与字符的隐喻** Go 语言借用 "rune" 一词,隐喻**字符/符号**的含义,因为如尼字母本身是一种字符系统,而 `rune` 类型在 Go 中正是用来表示 Unicode 字符的码点(类似于古代的符号系统)。 --- ### Go 的设计意图 - **强化语义** Go 刻意避免用 `int32` 这种纯数值类型名称,而是选择 `rune` 一词,是为了明确表达: - `rune` 是**字符的抽象**(如 `'A'`, `'你'`, `'🦄'`) - `int32` 是**普通整数**(如 `42`, `-100`) - **与 `byte` 形成对照** Go 中存在另一对对称类型: ```go type byte = uint8 // 表示单字节(ASCII 字符或二进制数据) type rune = int32 // 表示 Unicode 字符(可能需要多字节编码) ``` --- ### 实际用途示例 ```go s := "Hello, 世界" // 用 rune 处理 Unicode 字符 for _, r := range s { fmt.Printf("%c ", r) // 逐个输出字符:H e l l o , 世 界 } // 对比用 byte 遍历(会得到 UTF-8 编码的字节) for i := 0; i < len(s); i++ { fmt.Printf("%x ", s[i]) // 输出字节:48 65 6c 6c 6f 2c 20 e4 b8 96 e7 95 8c } ``` --- ### 总结 | 术语 | 本质 | 设计意图 | 词源关联 | |---------|------------|------------------------------|------------------------| | `rune` | `int32` 别名 | 明确表示 Unicode 字符 | 古代如尼字母(字符系统)| | `byte` | `uint8` 别名 | 表示单字节数据或 ASCII 字符 | 计算机存储的最小单位 | **简单来说**:`rune` 的命名是为了通过历史隐喻让程序员直观联想到“字符”,而非字面意义上的缩写。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值