news pappernews papper

编者按

在编程语言的世界中,Lisp曾是一种独特的存在,它的强大功能和灵活性在特定领域内无与伦比。近日,前美国宇航局(NASA)程序员、软件工程师罗恩·加雷特(Ron Garret)在亚当·戈登·贝尔(Adam Gordon Bell)的Corecursive播客节目中,回忆起了一段深空飞船任务中调试Lisp软件的非凡经历。

正文

超能力用户

从1988年到2000年,加雷特在NASA的喷气推进实验室(JPL)担任研究科学家,2001年到2004年间又再次任职。他的专长是自主移动机器人,帮助开创了当今自主移动机器人控制架构的标准。加雷特的团队曾致力于火星探测车“旅居者”(Sojourner)的机器人原型。

在当时的编程环境中,Lisp显得尤为突出。1988年,流行的编程语言仅有Pascal、C、Basic和机器码,用这些语言完成任何任务都非常困难。航天器的代码大多数是用汇编语言编写的。Lisp的出现,提供了一种将问题清晰地抽象为列表和函数的语言,它的自动内存管理功能,使得编程工作变得更为高效。

“在一个只有Lisp语言具备这种能力的世界里,掌握Lisp真的就像一种超能力。”加雷特说。

深空故障

然而,尽管Lisp具有诸多优势,NASA内部对它的接受度并不高。加雷特的团队发现,Lisp对于内存受限的硬件非常管用,可以针对机器人的硬件来编译定制语言。但在1998年,NASA的一位新主管启动了“新千年项目”,这意味着他们的Lisp代码获得了第二次生命。

在为期三天的飞行控制中,加雷特的团队开发的决策软件正常运行了一段时间,但后来突然失效,警钟响起。这时,他们发现,原本不可能存在的竞争条件出现了。问题在于,一位程序员调用了一个较低级别的Lisp函数,无意中为定制语言创建了“安全保障的终端”。

团队迅速采取行动,手动触发事件,让软件重新运行。虽然他们没有失去航天器,也完成了所有任务,但这次经历让他们深刻体会到了深空任务中的困难与挑战。

Lisp的消逝与复兴

2002年,加雷特在一篇文章中认为,“Lisp在喷气推进实验室(JPL)的消亡是一个悲剧”,这种语言特别适合于开发高度动态的应用程序。然而,随着C++、Java等语言的兴起,Lisp逐渐被忽视。

尽管如此,Lisp的简洁和灵活性仍然在一些项目中得到了应用。一位NASA工程师在2009年探索月球南极任务中,使用Lisp编写了定制语言,用于仪器命令序列。

加雷特的经历和回忆,不仅是对Lisp语言历史的回顾,也是对编程世界变与不变的深刻反思。在追求“最佳实践”的同时,我们不应忽视项目的具体情况和实际需求。

原文链接:NASA程序员深空调试Lisp:一段非凡的编程历程(InfoQ 翻译)


read more

Views: 0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注