一门被嘲笑“过时”的Ada,正在自动驾驶里干最硬核的活
这事儿我栽过不止一次。
十年前混技术社区的时候,我贼爱凑那种“删掉一门语言你选谁”的热闹。年轻嘛,看啥都不顺眼。觉得PHP就是屎山流水线,JavaScript是浏览器里的癌细胞,恨不得亲手把它们从时间线上抠掉。后来真进了工业界,维护过几个跑了二十年的老系统,脸被打得啪啪响。
讲个最近的。
上飘着个帖子,问的就是这个删语言的老梗。底下有个回答直接给我看愣了。那人说,你们都想删C语言是吧?但他提醒了一件事——C语言1972年生的,Pascal比它还早两年,1970年就出来了。这俩玩意儿功能上几乎一个妈生的,都能直接捅指针,都贴着汇编层呼吸,设计哲学也近亲繁殖。他当年甚至困惑过,这俩语言为啥要分家?
然后他甩了个暴论:你真把C语言从历史上抠掉,它的坑大概率会被Pascal无缝填上。C++、Java、C#该生还是会生,只不过名字可能叫P++、Pava、P#。因为在一个你想掐死的语言蹦出来之前,早就有五六份思想差不多的草案在排队了。
我看到这儿的时候,脑子“嗡”了一下。
真的。
跟我这些年踩坑的经验完全对上了。2016年我接过一个银行核心系统的维护烂摊子,里面跑着COBOL代码,写于1987年。我当时第一反应是:都什么年代了还在用这老古董?后来发现,那套系统每天吞吐几十亿交易流水,稳得像块石头。你想删它?可以,先让整个支付系统瘫痪三天试试。
外网有个叫Bill Karwin的狠人,写过《SQL反模式》。有人问他最想删哪门语言,他直接开怼:你在医院躺着,医生说“抱歉,我们检测不到你的心脏病发作,因为监测机器的软件是用FORTRAN写的,而Quora上某个自作聪明的人希望FORTRAN不存在”,你高兴吗?
我翻译一下:你高兴吗?
绝了。
所以我现在贼烦那种“某某语言已死”的流量体。前段时间刷到一篇盘点“历史上最重要的20种编程语言”,把Go塞进去了,却对ALGOL、Smalltalk、ML只字未提,还顺手把Pascal贬成“基本凉透了”。我当时就想顺着网线过去骂人。
你跟我说Pascal死了?
ALGOL 1960年出生,现在真没几个人写它了,但它留下来的东西——词法作用域、结构化编程、嵌套函数、代码块结构、BNF语法——这堆玩意儿构成了现代几乎所有主流语言的骨架。你写的每一行if-else,每一个花括号裹着的代码块,都是ALGOL的血脉。它没死,它只是整了个容活在你每天敲的代码里。
这让我想起去年折腾NVIDIA那篇文章的时候——扯远一秒,那篇写得我头皮发麻。
英伟达安全团队2022年发了篇东西,标题直接就是“如果我们停止使用C语言会怎样”。我当时看到都惊了,这不就是那个问题的现实版吗?他们还真上手了,2018年只用了三个月,就把两个安全敏感的底层应用从C迁到了Ada/SPARK。
Ada/SPARK是啥?1980年代给美国国防部“可靠软件”需求生的崽,设计目标就三个词:高安全性、高可靠性、高可维护性。SPARK作为Ada的子集,能用数学证明保证代码没有运行时错误。NASA火星探测器的软件、空客的飞控系统,都用这玩意儿写的。英伟达最近还给自己的DriveOS拿了ASIL-D认证,汽车功能安全最高等级,用的就是Ada的强类型检查、形式验证那一套。
你看,一门被大多数人觉得“niche到没朋友”的语言,正在自动驾驶领域干着最硬核的活儿。
2019年我还踩过一个坑。
当时要给一个嵌入式设备写固件,我选了Rust,觉得内存安全嘛,多高级。结果发现那个芯片的编译器只支持C。硬着头皮用C写完,过程中各种segmentation fault,调了整整两天。后来跟一个做航电的老哥喝酒,他说他们那儿还在用Ada,我问为啥不换,他说:“换啥?这玩意儿跑了二十年没出过事。”
忒好了这东西。
我突然搞明白了一件事。编程语言的“好坏”不是看你语法多优雅、特性多先进,而是看你在特定场景下能不能扛住。C语言最大的优势是什么?绝对正确。整个语言的设计不存在值得争议的地方——有争议的地方它干脆不做。内存安全是RAII还是GC?不知道,所以C都没有。并发用什么?协程有栈还是无栈?不知道,让用户自己整活。抽象用什么?不知道,void*一把梭。
它没有任何技术倾向,但什么都能搞掂。
虽然总是不那么巴适,却足够简单清晰。
我现在的看法大概是这样的——不对,应该叫偏见——所有图灵完备的语言表现力都一样,最终都变成机器码。你删掉一门,另一门就会顶上去。COBOL引入了结构化记录数据的概念,现代结构体的祖宗就是它。FORTRAN 1957年出生,第一门真正意义上的高级语言,现在气象预测、核物理计算里还有海量它的代码在跑。Basic 1964年想让普通人学会编程,现在无代码平台在做同样的事。
历史是个圈。
你抹不掉的。
所以回到那个问题:如果真要从历史上抹去一种编程语言,我会选哪种?
我会选一种已经死透了的语言。
比如某个只有三个用户、没人维护、连编译器都404的学术玩具语言。删了它不会让医院的心电监测停摆,不会让银行的交易系统崩溃,不会让火星探测器失联。
但说实话,就算是这种语言,我也不太敢删。
万一它某个设计思想,在三十年后被某门主流语言继承了呢?
你品。
ALGOL当年也没几个人写,现在它的灵魂活在所有语言里。
这事儿吧,越琢磨越觉得,编程语言不是工具,是化石。每一门都嵌着某个时代的技术判断和工程妥协。你抹掉一块化石,可能整个进化树的推论都得重写。
所以我现在不参与这种讨论了。
有那功夫,不如去修修我那跑了十五年的Perl脚本。
还在生产环境里跑着呢。
真的真的。
读者评论 2