一个发誓不用Java的程序员,不得不在太空中调试Lisp

2.数字芯片时序正确的前提—Max-transition 芯片物理设计中最基本的Max-transition检查 阅读详情

1998年10月24日,伴随着火箭的轰鸣,美国宇航局的深空一号成功升空。

54dfbc7b6ca31fb5e6aa2e20cc0e7223.png

深空一号肩负着NASA的重要使命,旨在验证未来行星际探测所需的十几项新技术。

在深空一号飞行了2.4亿公里以后,突然发生了一个故障,有个进程不工作了。

地面人员非常紧张,赶紧召来软件团队商量对策。

软件团队在会议绞尽脑汁,激烈争论,最后决定对深空一号的软件进行调试。

调试?到底该怎么调试?

软件可不是部署在某个机房里,而是位于距离地球2.4亿公里的航天器中,距离之远即使是光也需要半个小时才能跑个来回。

但是NASA的工程师们却成功地解决了这个问题,原因就是深空一号上的控制软件是用Lisp写的!

a86e46d8a400c0285f12afc03f841bf1.png

1


要想了解整个事情的来龙去脉,必须把时间拉得长一些。

1988年,罗恩来到NASA的JPL(喷气推进实验室,钱学森是创始人之一),在自主机器人的人工智能组工作。

d53520b5ec70a8677db5cd2561a4182c.png

JPL当时制定了一个火星探测的计划,希望能到达火星,并且采样返回。

任务庞大而艰巨,预算有数十亿美元,罗恩他们要做的是火星车原型的研制。

这些原型有大有小,有重达一吨,像SUV的Robby :

cecf44d0dd86f547635c3c78b74ef04c.png

也有小巧玲珑,像个玩具车的Tooth:

fa4648be23d0f784d0524cf7f4d5e877.png

为了让火星车能自主避障,在火星漫游,必须要给它配套一个强大的软件,让它具备一个强大的大脑。

用什么编程语言呢?

在80年代,没有Java, 没有Python,没有JavaScript,航天器主要是用汇编编写的。

而罗恩他们决定尝试一个新语言:Lisp。

Lisp在当时是人工智能的编程语言,正好和火星车的任务匹配,并且也不用管理C语言的指针,还支持垃圾回收。

不过当时的NASA对Lisp持怀疑的态度,很多人觉得Lisp很奇怪,担心Lisp那奇怪的垃圾回收技术会突然让应用进程死掉。

但是罗恩认为:“当你使用的语言提供一种高级的抽象时,完成工作会变得更快更容易。” 

罗恩他们先使用Lisp针对手头的问题定义一个自定义语言,相当于DSL,然后为火星车的硬件进行编译,这种方式对于内存受限的硬件非常有用。

在把代码安装到火星车上进行测试之前,罗恩的小组还在Macintosh 电脑上写了一个模拟器,把代码做了非常充分的测试。

罗恩的小组不但能写火星车的漫游和避障程序,还能写底层的编译器和模拟器,可见技术能力还是非常强的。

虽然Lisp火星车进展顺利,可以使用立体视觉传感器在户外自主导航,在崎岖地形环境下漫游,但是罗恩他们并不是唯一一组火星车原型制造者,他们还有竞争对手。

罗恩回忆说:NASA内部也存在山头,也有政治斗争,Lisp火星车不幸成为牺牲品,最后团队解散,很多成员离开了。

1997年,第一个火星车Sojourner到达火星,这时候,驱动它的是C语言。

edc51a2f9033433df71c8233a508672f.png

2

幸运的是,NASA换了一个领导,发起了一个叫做新千年的计划,其中一个任务就是深空探测。

bade624363f76f06dea30fe320e88c9d.png

深空一号计划飞过一个小行星和彗星。

它需要一个自主航天器控制系统,叫做远程代理(Remote Agent)。

C++派和Lisp派展开了一场斗争,这一次最终Lisp获胜。

罗恩他们故伎重演,再次使用Lisp 定制了一个领域专有语言,这个语言的结构会阻止你编写某些有问题的代码,例如竞争条件。

代码在深空一号的备份上做了一遍又一遍的测试,罗恩他们对软件非常有信心,认为绝对不会出错。

但是世界上哪有绝对的事情?

越是你觉得不会出错的地方,偏偏就在那里出错。

Lisp代码被部署到了生产环境:深空一号航天器

深空一号向一颗小行星飞去,这一去就是2.4亿公里。

就在这时,深空一号发生了故障,它并没有完成一件应该做的事情。

罗恩他们必须对深空一号上的Lisp软件进行调试,这个调试并不是在一个机房的服务器上,代码运行的地方在2.4亿公里以外,即使是光也需要半个小时才能跑一个来回!

幸亏深空一号运行的是Lisp,它支持REPL(read–eval–print loop)这样功能,可以输入一个命令,然后查看结果。

1b6ae99c7e6eef90db3fc718f66c4667.png

一群人坐在会议中,绞尽脑汁,讨论发送什么命令来调试。

当然,每一条调试命令都需要层层审批,让所有人签字,然后由接受过培训的操作员在深空网络控制台前输入命令,按下红色按钮,信号会通过一个巨大的70米的天线发送出去,以光速奔向深空一号。

罗恩他们要做的第一件事是看看系统的转储信息,看看当前活动进程的列表,他们向深空一号发了一个S表达式。

数据传输回来以后,大家立刻就发现了问题:有个进程在等待一个已经发生了的事件。

这本来是不可能发生的,主要是因为有个程序调用了底层的Lisp函数导致的。

团队决定手工触发这个事件,这就可以让那个进程继续执行了。

感谢 LISP 的魔力,感谢在深空一号飞船上安装实时 REPL 的惊人想法,他们成功地挽救了这项任务。

3

在2.4亿公里以外调试代码,修复问题确实让人印象深刻,但是NASA并没有拥抱Lisp。

NASA当时有个响亮的口号“更好,更快,更省”,其实这更像一个不可能三角形。

在这样的思想指引下,深空探测项目经费很少,时间又很紧张。所以当出现进度延期和预算超支时,Lisp成了替罪羊。 

关键的转折点是一个有着200人参加的重大审查,包括很多JPL的高级管理人员,当软件集成工程师在做演示时,

有人问他:如果可以改变一件事情,可以让事情变得更好,这件事情是什么?

这个工程师回答:去掉Lisp。

这几乎就宣布了Lisp在JPL的死刑。

罗恩非常沮丧,他在JPL被边缘化,希望和他合作的人越来越少。

这时候,他发现一家叫做Google的网站,这个网站的搜索结果好得不可思议,速度快得吓人,罗恩很快找到了招聘链接,投递了简历。

2000年,罗恩在JPL工作了12年以后,加入了正在冉冉升起的明星公司Google。

7d22dd528d382495f9f13df3773f3441.png

4

罗恩一直觉得在软件业,管理层一直在寻找一种开发流程,让程序员变成可以插拔的、可以替换的组件,这实在是太吓人了。

而Java恰好匹配了管理层的这种需求,所以他发誓永远不会成为一名Java程序员,在90年代后期,这个决定让90%以上的工作对他关闭了大门。

罗恩选择Google的一个重要原因就是他们不使用Java,但是,他在Google的第一项工作就是:

领导公司的第一个Java项目!

这个项目最终变成了Google AdWords。

罗恩很怀念Lisp,他有过在JPL推销Lisp的经验,于是他故伎重演,先在团队做了Lisp演示,成功地捕获了程序员的芳心,大家一致认为使用Lisp是个好主意,接下来只需要说服工程副总即可。

罗恩信心满满地去找副总。

罗恩:有件事我想和你谈谈...

副总:让我猜猜,你想用Smalltalk ?

罗恩:呃,不....

副总:Lisp?

罗恩:是的!

副总:不可能!

罗恩:...

参考资料:

https://corecursive.com/lisp-in-space-with-ron-garret/ 

https://flownet.com/gat/jpl-lisp.html

https://www.youtube.com/watch?v=_gZK0tW8EhQ

(完)

点击下方图片,查看更多精彩

bf0d1421a0deef33b8fc7f53abf874ab.png

ef385e3c2d39d64540cae5f1b062e8e9.png

266a2df71422cd4b66c3cb59972c7f8e.png

773ecd9c382ac40091069d54a0fdcd14.png

255527baf1b3190d47b0bf7f3f332ab7.png

3162b9c15b2091b0baae365c8f2f9bdf.png

基于虚拟阻抗重塑的构网型VSG变流器SISO序阻抗建模与宽频振荡抑制策略分析(面向高比例新能源并网场景) 本文深入探讨了基于虚拟阻抗控制的构网型VSG变流器SISO序阻抗建模技术及其在高比例新能源并网场景中的宽频振荡抑制策略。通过虚拟阻抗重塑,有效改善了变流器的阻抗特性,解决了次/超同步频段的振荡问题,并提供了参数设计、阻抗扫频验证等实用技巧,为新能源并网系统的稳定性提供了可靠解决方案。 阅读详情

相关推荐

基于verilog的16QAM调制

思路1:正交调幅法——实现16QAM调制,可以理解为时相位相差90度的两个正弦波的4PAM叠加。 4比特输入经过2->4进制转化得到两路2比特输入,然后分别经过4PAM后叠加所得输出即为16QAM调制结果。 具体程序稍后编写。 思路2:复合相移法——可以借助前面编写的QPSK,相当于两路幅度不同的QPSK的叠加,比如幅度分别取1和3 。 思路1正交调幅法的设计方案: 两正弦波相位差...

weixin_30725467的博客 2929

为什么“无人问津”的Lisp可以这么狂?

一到周末,Hello World 咖啡馆就比平时热闹得多, 各种语言都来到这里,互相打探对方的最新特性,看看自己能不能借鉴一些。这天晚上,由于Lisp的到来,咖啡馆的气...

码农翻身 2221

MacBook 上 LaTeX 环境搭建:从 Mactex 到 Sublime Text 与 Skim 的保姆级配置流程

本文详细介绍了在MacBook上搭建LaTeX环境的完整流程,从Mactex安装到Sublime Text与Skim的配置优化。涵盖基础环境准备、编辑器设置、PDF预览同步等关键步骤,帮助用户快速建立高效的LaTeX工作流,特别适合学术写作和技术文档创作。

weixin_30824599的博客 681

如何成为 Lisp 程序员的

[转]你是如何成为 Lisp 程序员的   我成为 Lisp 程序员的道路曲折而漫长。我曾于 2007 年 10 月 3 日在自己的日记中总结了自己的学习经历,现抄录于此。 最早在 2000 年 5 月,斯托曼院士访华时告诉我,Lisp (或者它的现代变种 Scheme)是功能最强大的编程语言,他本人就是一位高级的 Lisp 程序员,他还精通 C,GNU Emacs 就

miaoheping的专栏 6086

手把手教你用Matlab解析Zygo .dat文件:从二进制数据到面形图(附完整流程)

本文详细介绍了如何使用Matlab解析Zygo干涉仪生成的.dat文件,从二进制数据读取到面形图可视化的完整流程。通过实例代码演示了文件结构解析、数据矩阵读取、高阶Zernike拟合等关键技术,帮助工程师和研究人员高效处理光学检测数据,提升分析精度和工作效率。

weixin_30731305的博客 449

DPO(Direct Preference Optimization)直接偏好优化

本文介绍了DPO(直接偏好优化)方法,该方法通过简化传统的RLHF(基于人类反馈的强化学习)流程,直接利用人类偏好数据进行模型优化。DPO的核心思想是跳过奖励模型训练和强化学习交互步骤,通过数学推导将优化目标转化为仅与策略概率分布相关的形式。推导表明最优策略与奖励模型之间存在显式关系,从而可以构建直接优化策略的损失函数。与RLHF相比,DPO简化了训练流程,提高了工程实现稳定性,同时保持了同等效果。

TeenLucifer的博客 1956

为什么Lisp程序员总能碾压其他人?

每一个看到Lisp代码的人,都会觉得Lisp那无休无止的括号实在是太诡异了。但是,Lisp的伟大之处恰恰就在哪些括号中!为什么会这样?今天,我将带领大家走向顿悟的旅程。假设我们要写一个画图的程序,可以在屏幕上画点东西。用JavaScript来写的话,可能就会有这些函数: 非常简单和清晰,对吧?现在来一点挑战:能不能支持远程画图呢?远程画图是说一个用户可以发送指令到你的电脑上,你的电脑执行指令,显示画图结果。我们该怎么做呢?可以使用websocket,从远程用户那里接收指令。 Eval 接收到指令以

程序员高级码农的博客 1078

告别CAPL编程!用Matlab/Simulink+CANoe实现复杂ECU仿真的5个技巧

本文介绍了如何利用Matlab/Simulink与CANoe进行联合仿真,以替代复杂的CAPL编程,高效实现复杂ECU仿真。文章分享了5个核心技巧,涵盖信号映射、模型编译集成、实时参数调整、性能优化及数据分析,帮助算法工程师构建稳定强大的仿真环境,显著提升开发与测试效率。

rgv234567的博客 296

python编程语言的缺点-常见的AI编程语言优缺点比较,程序员千万不要入错行!...

原标题:常见的AI编程语言优缺点比较,程序员千万不要入错行!人工智能编程是一种技术的提升,为不同公司的运营和人们的生活带来了极高的效率和最佳效益。 人工智能为不同的行业带来了另一种智能技术,其潜力的前景仍在增长,期望它能够达到人类的智慧。 这是因为开发人员愿意探索,试验和实施其能力,以满足更多的人力和组织需求。 毕竟,需求是发明之母。 就像在大多数软件应用程序的开发中一样,开发人员可以使用各种语言...

weixin_37988176的博客 322

Android11 关于三方应用获取su权限

SELinux,全称Security-Enhanced Linux,是一种基于Linux内核的安全机制。它通过强制访问控制(MAC)来增强Linux系统的安全性,如果不禁用SELinux,完成下面的修改可能会导致设备进入Recovery界面!adb shell getenforce 为Permissive(宽容模式),查看报错日志,发现是客户apk想使用su命令提权,但是没有权限!对于保护系统资源和防止未经授权访问非常有帮助!系统这边做修改,让su权限下放到三方应用.客户的apk运行报错。

sinat_37429535的博客 1901

【Halcon】双目立体视觉引导机械手有序抓取,案例分享

本文介绍了一个基于双目视觉的工件定位与抓取系统。该系统使用两个工业相机组成双目视觉系统,通过标定获取相机参数,采用模板匹配算法识别任意摆放且可能交叠的工件。重点阐述了三维坐标获取方法,特别是通过Z方向高度实现有序抓取的策略。文章详细说明了系统搭建、双目标定、模板创建等关键步骤,并展示了特征点匹配和定位结果。该案例为初学者和开发者提供了双目视觉系统的基本实现参考,展示了机器视觉与机械手协同工作的典型应用场景。

机器视觉从业者 2490

你是如何成为 Lisp 程序员的?

问题之:你是如何成为 Lisp 程序员的? 答:我成为 Lisp 程序员的道路曲折而漫长。我曾于 2007 年 10 月 3 日在自己的日记中总结了自己的学习经历,现抄录于此。 最早在 2000 年 5 月,斯托曼院士访华时告诉我,Lisp (或者它的现代变种 Scheme)是功能最强大的编程语言,他本人就是一位高级的 Lisp 程序员,他还精通 C,GNU Emacs 就是采用 C

jinzhou520 的专栏 3442

YOLOv11改进 | 主干/Backbone篇 | 轻量化目标检测网络MobileViTv1改进yolov11有效涨点

本文给大家带来的改进机制是MobileViT系列的V1版本,其作为MobileNet网络的挑战者,其效果自然不用多说,MobileViT模型是为移动设备设计的轻量级、通用目的视觉变换器。它融合了卷积神经网络(CNN)和视觉变换器(ViT)的优势,旨在在保持高效性能的同时减少模型参数和降低延迟。通过其创新的MobileViT Block和多尺度训练方法,MobileViT在多个视觉任务上取得了优异的结果,欢迎大家订阅本专栏,本专栏每周更新3-5篇最新机制,更有包含我所有改进的文件和交流群提供给大家。

Snu77的博客 2336

这个发誓不用Java的程序员,终于受到惩罚了......

罗恩很不甘心,他很怀念Lisp,也有过在JPL推销Lisp的经验,于是他故伎重演,先在团队做了Lisp演示,成功地捕获了程序员的芳心,大家一致认为使用Lisp是个好主意,接下来只需要说服工程副总即可。关键的转折点是一个有着200人参加的重大审查,包括很多JPL的高级管理人员,当软件集成工程师在做演示时,有人问他:如果可以改变一件事情,可以让事情变得更好,这件事情是什么?,然后由接受过培训的操作员在深空网络控制台前输入命令,按下红色按钮,信号会通过一个巨大的70米的天线发送出去,以光速奔向深空一号。

码农翻身 649

pscad IEEE标准系统搭建说明

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

计算机控制技术及应用

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

Lisp神化之路

程序员在谈论不同编程语言的相对优劣时,其口吻就像是在说别在工具腰带上的不同工具——这个适合系统编程,另一个更适合用于胶合其他程序来完成一些临时任务。这是理所当然的,编程语言各有所长,在脱离具体应用场景的情况下声称一个语言优于其他只会引起无益和恶意的争吵。 然而有一个语言会引发普遍的尊崇:Lisp。要是有人胆敢声称某些语言优于其他语言,键盘侠们定然会开始攻击,如果说的是Lisp那就不同了。Lisp超...

coderock 3万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

python lisp_给Lisp程序员的Python简介

作者:Peter Norvig,译者:jineslong这是一篇为Lisp程序员写的Python简介(一些Python程序员告诉我,这篇文章对他们学习Lisp也有帮助,尽管这不是我的本意)。基本上,Python可以看作一个拥有“传统”语法(Lisp社区称之为“中缀”或者“m-lisp”语法)的Lisp方言。一个来自comp.lang.python的帖子说到“我一直不明白为什么LISP是一个不错的想...

weixin_39618597的博客 404

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

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

Lisp的“失败”就是由于它太成功了

我学习Lisp的主要原因是受了那些大神的蛊惑,说它是有史以来最强大的语言,厉害的程序员都用Lisp...... 于是我也心痒痒地去学了。刚开始的时候,主要是忍受着它那前缀...

码农翻身 2996

你是如何成为 Lisp 程序员的

【转载于】http://www.clipclip.org/clips/detail/45715/%E4%BD%A0%E6%98%AF%E5%A6%82%E4%BD%95%E6%88%90%E4%B8%BA-lisp-%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84===========================================================================================================问题之:你

Veini的专栏 1337

两个月薪10万的Lisp程序员

前两天有位同学看了Paul Graham的《黑客与画家》,被Paul鼓吹的Lisp 撩得激动万分,觉得这是世界是最牛X的语言!然后我就给它泼了一盆冷水:Lisp确实很牛X, 但是现在基本...

码农翻身 1828

给Lisp程序员的Python简介

*本篇译文还在初始阶段,希望各位提出反馈意见,另外一个更适合浏览的版本在这里* ============================================================== 给Lisp程序员的Python简介 作者:Peter Norvig,译者:jineslong 这是一篇为Lisp程序员写的Python简介(一些Python程序员告诉我,这篇文章

zzljlu的专栏 1万+

python lisp_给 Lisp 程序员的 Python 简介

这是一篇为Lisp程序员写的Python简介(一些Python程序员告诉我,这篇文章对他们学习Lisp也有帮助,尽管这不是我的本意)。基本上,Python可以看作一个拥有“传统”语法(Lisp社区称之为“中缀”或者“m-lisp”语法)的Lisp方言。一个来自comp.lang.python的帖子说到“我一直不明白为什么LISP是一个不错的想法,直到我开始玩上了Python”。Python支持除了...

weixin_39767887的博客 352

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 289

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 346

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 198

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 130
上一篇: 外星人:可惜,地球人的AI科技树长歪了!
下一篇: 进了架构平台部,终于成了大佬
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值