欧洲的编程语言三巨头,最后一位也离开了!

Pascal是一个指令式编程和面向过程编程语言,由尼克劳斯·维尔特在1968年9月设计,在1970年发行,作为一个小型的和高效的语言,意图鼓励使用结构化编程和数据结构进行良好的编程实践 是一个和面向过程,由尼克劳斯·维尔特在1968年9月设计,在1970年发行,作为一个小型的和高效的语言,意图鼓励使用和进行良好的编程实践。称作的一个衍生是为设计的。 阅读详情

前言:之前我发过一篇文章,叫做《欧洲的编程语言三巨头,只剩下一位了!》,没想到短短的几个月后,最后的一位也去世了......

今天我又把这篇文章修改了一下,增加了一些有趣的故事,纪念一下对编程语言发展有着巨大贡献的三位巨头。

我很好奇,如果他们还在世,看到如今火热的AI编程,会有什么感想?

这三位都是图灵奖获得者,他们的名字和发明散布在各种教科书中,从左到右,依次是:

尼克劳斯·沃斯 (Niklaus Wirth)

瑞士人,一生发明了8种编程语言,其中最著名的是Pascal,提出了著名的“程序=数据结构+算法”,1984年沃斯因开发了一系列创新的计算机语言而获得图灵奖。

迪杰斯特拉(Edsger Dijkstra)

荷兰人,发明了“最短路径算法”,“信号量”,提出了“Goto是有害的”,1972年因对结构化编程的贡献获得图灵奖。

霍尔(Tony Hoare)

英国人,发明了“快速排序算法”,发明了霍尔逻辑来验证程序正确性,提出CSP解决并发过程的交互,发明了null这个引发“数十亿美元”损失的错误,1980年因为对编程语言的定义和设计的基本贡献获得图灵奖。

他们三人都在欧洲,都是从学工程学开始,后来转到了计算机领域。

他们年龄相仿(沃斯和霍尔同岁,比迪杰斯特拉小4岁),共同的兴趣让他们走到一起,不但在暑期活动,学术会议上经常碰面,密切合作,在私下里,也建立了深厚的友谊,经常来回走动,互相拜访。

今天讲几个小故事来聊聊他们的伟大贡献。

计算机科学成为一门学科

在上世纪六七十年代,是编程语言发展的黄金时代。

第一个高级编程语言Fortran已经出现,但是主要应用在工程界,和硬件密切相关。

1960年1月,Fortran之父约翰·巴克斯,Lisp之父约翰·麦卡锡,第一位图灵奖获得者Alan Jay Perlis等一大批顶尖科学家在巴黎聚会,经过一番唇枪舌战的讨论,他们推出了ALGOL 60,这是一种和计算机硬件无关的编程语言,方便算法的描述。

ALGOL 60有很多创新,递归、本地变量、begin end 代码块都是由它率先推出。

现代大多数编程语言的语法,都是类ALGOL的。

从下图中,就可以看到ALGOL的江湖地位,是很多编程语言的老祖宗。

迪杰斯特拉对Algol-60非常欣赏,他不止一次说道,这是计算机科学成为一个学科的重要时刻。

仅仅7个月以后,迪杰斯特拉就在荷兰实现了第一个ALGOL60的编译器,比其他小组早了一年多。

为了实现ALGOL60中的递归,迪杰斯特拉第一次引入了Stack这个概念。

迪杰斯特拉等人还举办了一个ALGOL 60的培训班,来培训的就有霍尔,霍尔刚刚发表了快速排序算法,他上完培训班,也在自己公司机器上实现了ALGOL 60,霍尔的实现效率高,可靠性强,受到国际学术界的关注,进入了IFIP工作组,开始维护和发展ALGOL。

快速排序算法

1959 年,托尼·霍尔还只是一个二十多岁的年轻人,在 Elliott Brothers工作。

当时,他被派到苏联莫斯科的 Moscow State University,参与一个机器翻译项目。

那是冷战时期,但科学合作依然存在。

问题很快出现了。

霍尔需要先对俄语句子中的单词进行排序,然后再在磁带上按字母顺序排列的俄英词典中查找。 

但是无论是冒泡排序,还是插入排序,面对大量的词条,都太慢了。

霍尔决定找到一个更快的办法,在一次思考中,一个叫做“分而治之”的思想出现了:

比如你是一个老师,要把一群学生按身高从低到高排队。

但你不想一个一个比较,因为那太慢了,于是你想了一个更聪明的方法。


第一步:选一个人当“参照”

你随便挑一个学生,比如小明,让他站出来。

然后对全班说:

比小明矮的,站左边

比小明高的,站右边

很快,全班就被分成了三部分:

左边(比小明矮的), 小明, 右边(比小明高的)。

这时候小明已经到了正确的位置,不用管他了,接下来只需要从左边那一堆中选个人,例如小红,重复这一过程,然后继续分。

对右边那一堆也选个人,也重复这一过程,继续分。

这样,经过几轮分组后,所有人都会自动排好。

这种算法就是大名鼎鼎的快速排序,时间复杂度仅有O(n log n)。

(快速排序算法,红色就是每次分组所用的“参照”)

回到英国后,他被老板要求编写 Shell 排序算法的代码。霍尔说:“别用Shell排序了,我知道一个更快的算法”。

老板:“怎么可能,打个赌吧,赌注是六便士”。

当然,老板最终输了。

PASCAL的诞生

1966年,霍尔和沃斯一起做了一个提案,希望对ALGOL做出一次改进。但是ALGOL小组认为他们的提案太保守,改动太小,拒绝了。

“一气之下”,沃斯和霍尔退出了ALGOL小组,自己把提案的想了做了实现,即编程语言ALGOL W。

正是在ALGOL W 中,霍尔发明了那个被“无数人诟病”的空引用null。

在2009年的一个软件会议上,霍尔为发明null夸张地道歉:

“我当时正在设计ALGOL W 的类型系统,我忍不住想把null放进去,因为它很容易实现......没想到它导致了无数的错误,系统崩溃......在过去的40年,引发了数十亿美元的损失。”

1970年,沃斯进一步改进了 ALGOL W,成为了大名鼎鼎的Pascal

为了帮助在各种计算机上实现Pascal, 他创建了一种新型的编译器,该编译器不会直接生成机器码,而是生成一种中间的代码形式,在虚拟机上运行。

1976年,沃斯写了一本书介绍基本的数据结构和算法,也捎带着介绍了Pascal语法。 

这本书的名称也很神奇,叫做《程序=算法+数据结构》,从此这个公式开始名扬世界。

PASCAL的流行

虽然 Pascal 很快就得到了大学的认可,但它又花了几年时间才成为主流。

这得益于Philippe Kahn,是沃斯在瑞士苏黎世联邦理工学院教学期间的一个学生。

Philippe Kahn看到了沃斯教授在Pascal上的开创性工作,1982年成了一家叫做Borland的公司,从事软件开发工具的开发。

1983年,Borland推出了革命性的集成开发环境,Turbo Pascal ,仅卖49.95美元。

 Turbo Pascal 除了价格低廉以外,另外一个杀手锏就是编译速度飞快。

操刀编译器的是丹麦人Anders Hejlsberg,他很大程度上受到了《程序=算法+数据结构》这本书中Tiny Pascal”编译器的启发。

关于Anders Hejlsberg的故事,可以看这篇漫画《一个养活了四代程序员的男人》。

Goto是有害的

1968年,迪杰斯特拉向ACM提交了一篇论文,尖锐地批评了当时编程中过度使用Goto语句的情况,以及对结构化编程的拥护,他提议,在高级语言中废除Goto语句!

论文的标题平淡无奇:A Case Against the Goto Statement。

沃斯正好是当时的编辑,他顺手把标题改成了Goto语句是有害的(Goto Statement Considered Harmful)。

如果放在如今的自媒体时代,沃斯绝对是一个擅长抓热点的标题大师。

这个标题就像一个重磅炸弹,很多大牛跳出来,或支持或反对。

高德纳写了一篇叫做《使用 Goto语句进行结构化编程》的文章,分析了一些常见的编程场景,指出一些场景中Goto是最适合的语言结构。

K&R在《C语言编程》中,也指出Goto可以用于函数结束错误处理程序和循环的多级中断。

即使在多年以后,Linus之父Linus Torvalds和《代码大全》的作者Steve McConnell还反对迪杰斯特拉的观点,指出 Goto可以是一种有用的语言功能,可以提高程序速度、大小和代码清晰度。

据统计,2013 年,Linux 内核代码中约有 100,000 个 goto。

“XXX是有害的”成为了计算机的时尚用词,在随后的几十年中不断出现:

“全局变量是有害的”

“Unix风格,或者cat -v 是有害的”

“MD5被认为是有害的”

“以人为本的设计是有害的”

“Java的新特性是有害的”

“‘被认为有害’的文章是有害的”

......

尾声

沃斯,迪杰斯特拉和霍尔都在欧洲,获得图灵奖都和编程语言有关,可以称为欧洲编程语言的三巨头。

他们都是结构化编程的先驱,他们的工作深刻地影响了我们现在的编程。

2002年8月6日,迪杰斯特拉和癌症斗争多年以后,不幸离世,享年72岁。

2024年1月1日,沃斯去世,享年89岁。

2026年3月5日,霍尔去世,享年92岁。

其实,除了这三位之外,欧洲还有一对编程语言双子星,挪威的Ole-Johan Dahl和Kristen Nygaard ,他们发明了面向对象的语言Simula,两人也都于2002年去世。

我们现在使用的编程语言的概念和特性,差不多都在上世纪六七十年代就已发明,那一批编程语言的先驱,都在逐渐老去。

编程语言的黄金时代,过去了。

Pascal语言的计算机基础 Pascal语言作为一种经典的程序设计语言,尽管在现代编程领域的位置有所下降,但其作为教育工具和编程基础的价值依然不可忽视。通过学习Pascal,学生可以掌握编程的基本概念、逻辑思维和解决问题的能力,为进一步学习和使用其他编程语言打下坚实的基础。在本文中,我们介绍了Pascal语言的基本概念、程序结构、控制结构、过程与函数、文件操作以及应用领域。学习Pascal不仅仅是学习一种编程语言,更是培养思维方式和解决问题能力的重要过程。 阅读详情

相关推荐

vllm运行过程中出现cuda out of memory

将长序列分解为多个小块,每个块分别处理。这样可以减少单次 Prefill 的计算量和显存占用,从而优化 TTFT 和显存使用效率。考虑使用 CPU 卸载(如 --cpu-offload-gb),将部分缓存卸载到 CPU 内存中,扩展 GPU 的虚拟内存。在大语言模型中,当输入序列很长(例如超过 1024 个 Token)时,Prefill 阶段的计算量会非常大。最后增加了enable-chunked-prefill参数和max_num_batched_tokens解决了问题。参数来进一步优化性能。

盛世芳华 3517

PASCAL语言的基本知识

Pascal是一种计算机通用的高级程序设计语言。它由瑞士Niklaus Wirth教授于六十年代末设计并创立。 以法国数学家命名的Pascal语言。现已成为使用最广泛的基于DOS的语言之一。其主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强。 pascal语法图 程序组成 例1.1计算半径为R的圆面积S program Area; {程序首部} {已知半径求圆的面积} const pi=3.14159; {说明部分——数据描述} var s,r:real; begin 

顺其自然~专栏 2万+

ResNet理论基础与具体实现(详细教程)

论文地址:Deep Residual Learning for Image Recognition ​ Identity Mappings in Deep Residual Networks pytroch源码地址:resnet 0x00 前言 ResNet是2015年就提出的网络结构,中文名字叫作深度残差网络,主要作用是图像分类。现在在图像分割、目标检测等领域都有很...

coordinate的博客 8334

Pascal高级基础

运算符修改a变量的值。注意,在Pascal中,^运算符既可以用于指针变量的声明中,也可以用于指针变量的使用中。

weixin_46121540的博客 1413

Python爬虫实战:5分钟搞定Web of Science文献批量导出与解析(附完整代码)

本文提供了一套利用Python爬虫技术,快速实现Web of Science文献批量提取与解析的完整方案。通过解析官方导出的HTML文件,结合BeautifulSoup和pandas库,可将文献数据自动转换为结构化的Excel/CSV表格,帮助科研人员高效管理文献信息,节省大量手动整理时间。

weixin_29050513的博客 1168

Zemax 中的 LED 阵列模型

这些光线是所有光线的子集,用于布局可视化,而不是详细分析。X 和 Y 散度(αx 和 αy)以度为单位,以不同的方式设置为 6 度和 12 度。每个 LED 都以朗伯模式(广角分布)发光,尽管有些 LED 具有内置光学元件,用于更窄或更聚焦的光束。,具体取决于这些类别中使用的半导体材料。LED 阵列由多个发光二极管 (LED) 组成,这些二极管以特定模式或配置排列,以实现均匀照明、更高强度或特定照明特性。如果数据的存在更改为“辐射强度”,则它以弧度为单位显示每个立体角的功率,作为探测器上入射角的函数。

jkh920184196的博客 1596

Pascal基础

Pascal基础语法(一) 序言 有时无聊,翻看pascal,奈何看完即忘.于是记录之 pascal听说将被NOIP停用,我没有去验证.管他呢,本来只是好奇 环境 用的免费的编译器 fpc [https://www.freepascal.org/] 编辑器随便找个自己喜欢的就行, IDE 可以选 lazarus[https://www.lazarus-ide.org/],跨平台 pascal版本有更迭,支持的方言很多,基于目前的最佳实践,所有代码里使用 ${mode objfpc } {$H+}{$J-}{

happytor的专栏 2347

MinerU在线API异步调用代码开发示例

本文展示了如何使用Python异步编程调用MinerU在线API进行文件批量上传。代码示例包含三个主要功能:1) 通过API密钥获取文件上传URL;2) 使用信号量控制并发上传多个文件;3) 获取提取结果。实现采用httpx异步客户端和asyncio库,支持文件存在性检查、错误处理和日志记录。示例中演示了如何上传PDF文件到MinerU平台,并提供了获取批量处理结果的接口。该代码可作为异步调用MinerU API的参考实现。

拥抱具身智能,昇腾Ascend C 357

欧洲的编程语言三巨头,只剩下一位了!

能把三位大牛的名字都叫出来的人恐怕不多吧:这三位都是图灵奖获得者,他们的名字和发明散布在各种教科书中,从左到右,依次是:尼克劳斯·沃斯 (Niklaus Wirth)瑞士人,一生发明了8种编程语言,其中最著名的是Pascal,提出了著名的“程序=数据结构+算法”,1984年沃斯因开发了一系列创新的计算机语言而获得图灵奖。迪杰斯特拉(Edsger Dijkstra)荷兰人,发明了“最短路径算法”,“...

码农翻身 3730

Python爬虫实战:实时监控美国SEC官网文件更新,助你第一时间掌握市场动态

在资本市场中,信息就是财富。美国证券交易委员会(SEC)官网公开了大量公司披露文件,涵盖财报、招股说明书、内幕交易等重要信息。对投资者、分析师及法律合规人员来说,实时监控这些公开文件具有重要价值。

2201_76125261的博客 595

高速特征金字塔多角度旋转模板匹配(工业零部件缺陷检测C++ Opencv版)

博主在性能较好的笔记本上测试算法全部执行效果大约为45ms,在一般配置的笔记本上博主在性能较好的笔记本上测试算法全部执行效果大约为130ms。下图即为实际检测效果。本文最后附有完整代码:Qt版和MFC版本(可直接运行)。...

认真努力,做一只会飞的毛毛虫。 5547

漫画 | 编程语言三巨头的陨落

对于一个小学生来说,就可以轻松地计算这样的算式 3+10*5但是对一个程序员来说,如果你想从头儿写个程序,解析并执行这个算式,你会发现就很难了。但是,算术表达式可以更复杂,需要一个通用的程序处理方法,能将任何算术表达式转换成正确的次序来执行。这个问题,也困住了60年前的 John Backus及其团队,他们后来发现了一种叫做Stack Evaluation的方法,解决了算式表达式的问题。所以,J...

码农翻身 1万+

【PINN物理信息网络】基于PINN物理信息网络求解圆柱坐标中的热方程(python)

【PINN物理信息网络】基于PINN物理信息网络求解圆柱坐标中的热方程(python)

k8291121的博客 2274

这几天,Sora让孩子恐慌了!

昨天晚上,闺女站在客厅里发呆,我问她:你在干嘛呢?她忧心忡忡地说:人工智能这么厉害,等我毕业的时候,它把那些从事创造性的工作给替换掉了怎么办?她喜欢画画、写作、编程(写游戏),这些领域AI已经开始入侵了,所以她开始忧虑自己的未来了。我笑着安慰说:“别担心,AI想干掉创造性的工作,非得实现通用人工智能不可,如果真的实现通用人工智能了,我们的社会会发生巨变,到时候我们也许都不用工作了。”她作为小学生,...

码农翻身 1094

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【笔记】JS笔记

不信你不点进来

qq_46580087的博客 373

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

OpenAI的Sora,中国跟不上了吗?

春节期间,OpenAI的Sora大火,我也看了下,说实话,这次对我的震撼根本比不上GPT4出来的时候。原因很简单,我是个程序员,这个文本生成视频的功能对程序员来说实在是没什么用处,还不如发布新一代的GPT,让它编程的能力更强一些。即使是抛开程序员群体,Sora的用途也被一些搞流量的自媒体给过分地夸大了。甚至发生了Sora还没有真正上线,就出现Sora课程这样的怪事,镰刀高高举起,准备开始割了。去年...

码农翻身 1028

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

图灵拯救了1000多万人的生命,是真的吗?到底厉害在那里?

图灵大奖是计算机科学的“诺贝尔奖”,每一届获奖者都是推动人类进入数字时代的关键推手。

软件行业技术文化交流。 1687

互联网摸鱼日报(2023-04-07)

腾讯提出蛋白质研究AI模型,预测准确率刷新纪录,入选Nature子刊生成式AI助力游戏开发:腾讯推出3D虚拟场景自动生成解决方案三星被曝芯片机密代码遭ChatGPT泄露,引入不到20天就出3起事故,内部考虑重新禁用业务驱动的组织协同机制| BizDevOps 公开课Sentry的前端测试实践:从Enzyme迁移到RTL每分钟可处理8.14亿笔交易、腾讯云数据库TDSQL刷新TPC-C纪录对国产数据库行业意味着什么?甲骨文推出新的Java SE通用订阅AIGC教程:如何使用Stable Diffusion高效

weixin_43849685的博客 995

【盘点】北美顶尖学府的人工智能与智能车实验室

https://www.toutiao.com/a6674731869252092427/ 本文智车科技盘点了北美地区顶尖的人工智能/智能驾驶实验室,这些实验室都充分利用大学或企业的丰富资源,依托顶尖的优秀人才,始终走在科研创新的前线,在国家基础研究、技术开发和科研攻关中承担着不可替代的重大使命。 自动驾驶汽车正受到各国政府前所未有的重视,国内外各院校、研究机构都投入了大量人力、物力,各...

喜欢打酱油的老鸟 3471

编程语言-Pascal

Pascal 是一种命令式和过程式编程语言,由 Niklaus Wirth 设计,是一种小型、高效的语言,旨在鼓励使用结构化编程和数据结构化的良好编程实践。它以法国数学家、哲学家和物理学家布莱斯·帕斯卡 (Blaise Pascal) 的名字命名。Pascal语言是在ALGOL 60语言的基础上发展起来的。ALGOL (Algorithmic Language)(算法语言的缩写),ALGOL 60(Algorithmic Language 1960 的缩写)。

2404_87526689的博客 5130

pascal语言基础(一)

该内容为学习 《PASCAL程序设计第2版》郑启华编著 的笔记,部分与c语言对比学习,方便记忆。 基本介绍 保留字(35个) AND、ARRAY、BEGIN、CASE、CONST、DIV、DO、DOWNTO、ELSE、END、FILE、FOR、FUNCTION、GOTO、IF、IN、LABEL、MOD、NIL、NOT、OF、OR、PACKED、PROCEDURE、PROGRAM、R...

络小绎 1万+

别学了!这 5 种即将消亡的编程语言

点击上方“码农突围”,马上关注这里是码农充电第一站,回复“666”,获取一份专属大礼包真爱,请设置“星标”或点个“在看 程序员书库(ID:CodingBook) 猿妹编译 综合自:htt...

欢迎关注公众号:【码农突围】,回复9999,可以获取一份LeetCode刷题笔记 2083

Pascal函数

在Pascal中,函数以关键字function开始,并以关键字end结束。函数包括一个头部和一个主体。函数的头部定义了函数的名称、输入参数和返回值的类型。函数的主体包含函数的实际实现。beginend;这个函数的名称是square,它接受一个整数参数x,返回一个整数结果。函数的实现很简单,它计算x的平方,并将结果返回。Pascal中的函数可以有多个参数,每个参数在函数头部中都有一个名称和一个类型。参数可以是基本类型(如整数和布尔值)或自定义类型(如记录和数组)。beginend;

weixin_46121540的博客 1694

NVIDIA Jetson

NVIDIA Jetson NVIDIA 引领人工智能计算 - NVIDIA https://www.nvidia.cn Artificial Intelligence Computing Leadership from NVIDIA https://www.nvidia.com/en-us/ NVIDIA Jetson https://www.nvidia.cn/autonomous-machines/embedded-systems/ https://www.nvidia.com/en-us/auton

程永强 1907

PASCAL数据类型详解

在这个例子中,我们定义了一个布尔变量"flag",并给它赋了一个值,这个值取决于条件"(5 > 3)“是否为真。然后我们使用if语句来检查"flag"的值,如果为True,就输出"条件满足”,否则输出"条件不满足"。这种类型的整数在内存中占用2个字节,因此它是一种比较节省内存的选项,特别适用于存储数量较小的整数值。7.记录类型:在PASCAL语言中扮演着重要的角色,它用于定义一个数据结构,将一组相关的字段组合在一起。我们可以使用枚举类型来比较输入的值和枚举类型的值,从而确定今天是星期几。

weixin_46121540的博客 1127
上一篇: 全体码农做好随时涨薪的准备吧!
下一篇: 我的小龙虾也开始发力了!
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值