“该死的愚蠢的事情” — C的起源

2020-12-09 20:41:41

自1980年代以来,C以一种或另一种形式影响了几乎所有编程语言的形式。某些语言(例如C ++,C#和目标C)旨在直接替代该语言,而其他语言仅采用和改编了C的语法。精通Java,PHP,Ruby,Python或Perl的程序员在理解简单的C程序方面几乎没有困难,从这个意义上讲,C在程序员中几乎可以被视为通用语言。

但是,C并不是像某些编程巨石那样凭空产生的。 C的故事始于英格兰,由Alan Turing的一位同事和一个玩跳棋的程序组成。

克里斯托弗·斯特拉奇(Christopher Strachey)被称为“编写完美程序的人”,该刊物在《计算机历史年鉴》(Annals of Computing History of Computing)上的一篇长文中指出。这是他于1951年在曼彻斯特大学计算机中心获得的声誉。斯特拉奇最终到了那儿,通过位于剑桥的旧国王学院的艾伦·图灵(Alan Turing)在学校的Ferranti Mark I计算机上工作。

Strachey于1916年出生于一个有良好联系的英国家庭,他的叔叔Lytton Strachey是Bloomsbury Group的创始成员,而他的父亲Oliver Strachey在两次世界大战期间都参与了盟军的密码破解活动。

Strachey最终成为编程和计算机科学领域的公认专家,这对于他的公立学校和剑桥大学的讲师来说都是一个惊喜。 Strachey一直表现出科学才能,但很少应用自己。

如果他有希望从事学术研究的事业,那么他在期末考试中的出色表现将给他们带来沉重打击。相反,斯特拉奇在第二次世界大战中曾为一家英国电子公司工作,后来成为一名教学老师,最终登陆了伦敦最负盛名的公立学校之一哈罗。 1951年,当Strachey被英国国家物理实验室的Mike Woodger介绍给他时,他就有了第一次使用计算机的机会。在圣诞节假期度过了一天的时间后,他熟悉了实验室的飞行员ACE,然后在哈罗(Harrow)业余时间弄清楚如何教计算机如何玩跳棋。正如斯特拉奇晚年的同事马丁·坎贝尔·凯利(Martin Campbell-Kelly)所说的那样,“任何经验或信心不足的人都会选择一张桌子。”

最初的努力没有实现; Pilot ACE根本没有玩跳棋所需的存储容量,但是它确实说明了Strachey感兴趣的一个方面,这将在导致C语言的发展中发挥重要作用。具有快速求解方程的能力,斯特拉奇对他们执行逻辑任务的能力更感兴趣(正如他后来在1952年的计算机协会会议上所证实的那样)。

那个春天的晚些时候,他发现了曼彻斯特大学安装的Ferranti Mark I计算机,在那里,艾伦·图灵(Alan Turing)担任计算机实验室的助理主任。图灵已经写了程序员的手册,斯特拉奇从他在剑桥的时候起就很了解他,要求他提供一份手册。

1951年7月,斯特拉奇有机会参观了曼彻斯特,并亲自与图灵讨论了他的跳棋程序。令人印象深刻的是,图灵建议,第一步,他编写一个程序,使Ferranti Mark I能够自我模拟。模拟器将允许程序员逐步查看计算机如何执行程序。这样的“跟踪”程序将突出显示该程序引起瓶颈或运行效率低下的地方。在计算机内存和处理器周期都花了大钱的时候,这是编程的重要方面。

Strachey编写的跟踪程序包括一千多条指令,当时这是有史以来为Ferranti Mark I编写的最长程序。Strachey在拉了一个通宵后才启动并运行,当程序终止时,它坎贝尔·凯利(Campbell-Kelly)表示,他在计算机的扬声器上播放了“上帝救助国王”。

这项业余爱好者的成就吸引了国家研究与发展公司董事总经理哈尔斯伯里勋爵的注意,后者不久就招募了Strachey来领导政府为促进在英国大学中计算机科学快速发展的实际应用而做出的努力。

他正是以此身份发现了剑桥大学的一个项目,该项目由三名名为David的程序员进行。

剑桥大学的计算机中心以服务为导向。该数学实验室的第一台计算机EDSAC和EDSAC 2已提供给大学其他地方的研究人员,他们编写的程序被打在纸带上并送入机器中。

在计算中心,这些纸带被剪裁在晾衣绳上,并在工作时间内一个接一个地执行。这行待处理程序被称为“作业队列”,该术语一直用于描述组织计算任务的更为复杂的方法。

在EDSAC 2上线仅两年后,大学意识到很快就需要一台功能更强大的机器,而要实现这一目标,他们将需要购买商用主机。该大学同时考虑了IBM 7090和Ferranti Atlas,但它们都负担不起。 1961年,费兰蒂(Ferranti)部门经理彼得·霍尔(Peter Hall)建议他们可以与剑桥大学联合开发精简版的阿特拉斯(Atlas)计算机。剑桥将获得被称为“ Titan”的原型,而Ferranti将能够向买不起Atlas系统的客户推销新计算机。

为了向大学的其余部分提供计算服务,这台新计算机将需要操作系统和至少一种高级编程语言。

很少有人考虑扩展为EDSAC 2开发的语言。“在1960年代初期,人们普遍认为'我们正在建造一台新计算机,因此我们需要一种新的编程语言',” David Hartley回忆说。在2017年的播客中Hartley将与David Wheeler和David Barron一起参与这种新计算机编程语言的早期开发。

根据Hartley的说法,“新的操作系统是不可避免的,”但新的编程语言不是。 “我们认为这是一个体验新语言的机会-事后看来,这是一件该死的愚蠢的事情。”

负责监督Titan项目的Maurice Wilkes认为不需要新的编程语言。 Titan的主要理由是为剑桥大学的其余部分提供计算服务,因此,最好是尽快启动并运行计算机,并配备用户已经熟悉的语言,这是最好的。

在批准开发新语言的提案之前,Wilkes需要对可用的编程语言进行分析。哈特利说:“我们非常谨慎地选择了它们,以便确定它们都不适合。”值得注意的是,工作组在未咨询Cambridge的Fortran用户的情况下评估了Fortran IV,该用户可能已经解释了Fortran的其他变体所包含的其他功能。因此,Hartley回顾了该小组,他们坚信“我们可以轻松定义和开发明显更好的东西”,然后指出,“这种失败会在几年内浮出水面。”

三人组最终在1962年6月编写了一篇论文,认为一种新的语言是必要的,“我们也摆脱了它,”哈特利总结说。

这种新的编程语言被称为CPL(剑桥编程语言),到1963年工作进展顺利。来自伦敦大学的John Buxton和Eric Nixon加入了剑桥程序员的行列,对CPL进行了修订,以代表联合编程。语言。随着项目的发展,威尔克斯决定聘请克里斯托弗·斯特拉奇(Christopher Strachey)来监督该项目,Campbell-Kelly表示,CPL很快就意味着与之相关的人为“克里斯托弗的编程语言”。

研究该语言的研究人员小组将在剑桥或伦敦,有时甚至在伦敦大学见面,但在其他场合,则在肯辛顿联排别墅Strachey的艺术家工作室里与他的姐姐同住。房屋后部的房间在地板上配有维多利亚式椅子和靠垫,而墙壁上则装饰有Strachey的一位亲戚绘制的各种Bloomsbury Group成员的肖像。在那里,斯特拉奇偶尔会穿着睡袍“出庭”,正如戴维·巴伦(David Barron)几年后回忆的那样,“我们将在争取权利之前争辩世界,然后在晚上散布到我们的各个房屋中。”

到那时,戴维·惠勒(David Wheeler)转到了其他项目,仅剩下五个团队:哈特利,巴伦,巴克斯顿,尼克松和斯特拉奇。

Hartley喜欢CPL的工作;他回忆说:“这实际上是一件很有趣的工作。”会议是相当非正式的事务。 “我们对此事非常热心,最终开始互相扔飞镖。”

该小组从编写ALGOL 60的规范开始,目的是编写一种“完美”的语言:一种对各种用户都实用但又在美学上令人满意且有效的语言。

正如大卫·巴伦(David Barron)提到斯特拉奇时,几乎立即,他们在确定优先次序时遇到了一些困难,“他的特征是坚持微小的差异点,而他所坚持的观点与主要观点相同。” Strachey反对“ IF…THEN…ELSE”语句的语法是一个小问题。正如哈特利(Hartley)后来为《计算机史》(Annals of Computing History)所写的那样,他的观点是:“我不能让我的名字与明确推荐使用不正确的英语有关。” Strachey首选“ OR”,这与几乎所有其他编程语言中使用“ OR”的方式相矛盾。尽管如此,他的偏好仍然存在,并且CPL参考手册在用户期望“ ELSE”的位置包括“ OR”。

在开发一种避免使用星号表示乘法的方法上也投入了大量时间。在这里,出于美学考虑,导致了复杂性,从而延迟了可用编程语言的实现,因为必须制定复杂的规则来区分表示变量名的“ 3a”和“ 3a”,即“ 3 * a”。

一直以来,由于大学的新型Atlas计算机缺少可用的编程语言,剑桥用户越来越感到沮丧。 该语言的规范已基本完成,但没有可用的编译器。 该工作组使CPL变得如此复杂,以至于早期编写编译器的尝试导致机器代码效率极低。