欧易

欧易(OKX)

国内用户最喜爱的合约交易所

火币

火币(HTX )

全球知名的比特币交易所

币安

币安(Binance)

全球用户最多的交易所

C语言的诞生,竟然是一个失败的项目?

时间:2022-10-09 17:09:37 | 浏览:1834

很多人认为 ,C 语言是一门“古董”语言。也有不少人认为,它没有 Python 简洁,没有 Java 安全,甚至有可能要退出历史舞台。而事实上,时至今日,C 语言凭借其在不同编译环境的稳定性、可移植性、快速的运行速度,仍在多个领域发挥着重要

很多人认为 ,C 语言是一门“古董”语言。也有不少人认为,它没有 Python 简洁,没有 Java 安全,甚至有可能要退出历史舞台。而事实上,时至今日,C 语言凭借其在不同编译环境的稳定性、可移植性、快速的运行速度,仍在多个领域发挥着重要作用。

首先,Unix 就是用 C 语言编写的。虽然最初 Unix 采用的是汇编语言,但是 Unix 早在 1973 年就用 C 语言进行重写,这使得 Unix 在不同的机器上更具可移植性,并有助于其变得流行。如果没有重写的 Unix,那么我们今天使用的所有操作系统——Linux,MacOS X,Android,iOS,Chrome OS 都可能不会存在。

而除了操作系统以外,Oracle 数据库、MySQL 等数据库管理系统也都是由 C 语言编写。虽然他们中的大多数数据库后来又用 C++重写,但这也代表它们都是 C 的直系后裔。

即使你一直使用的是 Python, 那你也从未停止使用过 C 语言:如 CPython 。CPython 是特指 C 语言实现的 Python,也就是最原始版本的 Python。当我们从 Python 官方网站下载并安装好 Python 后,直接获得了一个官方版本的解释器:CPython。这个解释器是用 C 语言开发的,所以叫 CPython。在命令行下运行 Python 就是启动 CPython 解释器。CPython 是使用最广的 Python 解释器。教程的所有代码也都在 CPython 下执行

之所以使用 CPython 这个词,是因为 Python 语言从规范到解释器都是开源的,任何人都可以通过编写 Python 语言解释器,比如 Jython,就是 Java 版的 Python,还有烧脑的 PyPy,则是使用 Python 把 Python 再实现了一遍。

简而言之,C 语言简直是无处不在。但是被广泛应用的 C 语言的诞生,却不是轻易就成功的。相反,它是一个长期失败的产物。

在业内,大家所熟悉的、被称为“C 语言之父”的或许是这位:Dennis Ritchie。

Dennis Ritchie(丹尼斯·里奇),同时也是 Unix 之父

当然,Dennis Ritchie 的成就是不可磨灭的,他将 C 语言带到世界面前,其影响力在今日依旧巨大。Dennis Ritchie 的合作伙伴 Brian Kernihan(布莱恩·克尼汉)曾这样评价他:牛顿说他是站在巨人的肩膀上,如今,我们都站在 Ritchie 的肩膀上。

但今天的主人公却并不是 Ritchie。因为在 Ritchie 之前,曾有一位学校教师,如果非要追溯源头,那么他应该才算是创造 C 语言的第一人。

可以这么说,如果这个世界上没有这位喜欢在假期里编程的教师,可能世界上也就不会有 C 语言。

— 01 —

一位和艾伦 · 图灵是朋友的教师

今天的主人公,就是 Christopher Stratchey(克里斯托弗·斯特拉奇),Strachey 于 1916 年出生于英格兰一个家境比较显赫的家庭,也曾在诺福克格雷沙姆学校和剑桥国王学院接受教育。

1938 年 10 月,是他在剑桥国王学院学习的第四年,面临毕业的 Strachey 却似乎由于长期忽视学习,仅从及格分数线上低空飘过,惊险地获得了毕业证。虽然顺利毕业了,但这样的结果也令他想要获得研究奖学金的希望化为泡影。

即使 Strachey 家庭条件还不错,也还是要面临来自现实的压力。1939 年 8 月,为了养活自己,Stratchey 接受了 STC (Standard Telephones and Cables Limited) 的物理学家职位,拿着平均每周 4 英镑的酬劳,开始在伦敦 STC 的开发实验室工作。

在 STC 期间,Strachey 大部分时间都在研究厘米雷达阀的理论设计,主要是推导出阀门参数的分析公式和它的实验验证。他的数学工作涉及微分方程的积分,其中一些特别棘手,因此,Strachey 与同事开始使用微分分析器获得数值解。

后来,Strachey 开始把这次使用计算机的经历看作是一个转折点,他对计算机的兴趣在这个时候才被激发起来。

1944 年 7 月,在 STC 已经工作了 5 年的 Strachey 突然被调往伦敦的 STC 无线电部门工作,这是一项与电气和机械设计有关的工作。突如其来的调动让 Strachey 很不适应,同时他也发现,这活儿比理论工作更不合自己的口味,而且认为这种氛围“相当狭隘和肮脏”。

确定了内心的想法后,Strachey 迅速从 STC 辞职。一年后,也就是 1945 年 10 月,他开始在英国圣埃德蒙进修"physics-cum-mathematics" 硕士学位。

从圣埃德蒙毕业之后,通过多次申请,他终于在英国哈罗公学(Harrow School,英国历史悠久的著名公立学校之一)获得了一个教师职位,并于 1949 年春天离开了圣埃德蒙学院。

Strachey 于 1949 年 9 月开始在哈罗学校任教,在校任职期间,Strachey 经常与组织社团和俱乐部一起表演、搞活动,由于在圣埃德蒙时自学过巴松管,Strachey 还加入了学校的管弦乐队。可以说,在这样忙碌的“教学”氛围中,Strachey 对计算的兴趣在离开 STC 后基本上处于休眠状态了。

他第一次接触存储程序计算机是在 1951 年 1 月,当时一个共同的朋友向他介绍了国家物理实验室 (NPL) 的迈克·伍德格( Mike Woodger ),由于这一场相识,让之前沉迷于文艺表演的 Stratchey 在国家物理实验室的 Pilot ACE 上度过了他的学校假期。值得一提的是,这是第一台配备 Alan Turing 自动计算引擎的计算机。

Stratchey 在这个特殊的假期里开始了他的研究,而他的目的是:希望教会计算机如何下棋。这在计算机主要用于快速求解方程的时代是一件匪夷所思的事。

然而,由于 Pilot ACE 没有完成这项工作所需的存储容量,他的第一次尝试没有成功。第二年春天,Stratchey 学习了刚安装在曼彻斯特大学的费兰蒂 Mark I 计算机。这台机器的存储空间比 Pilot ACE 大得多,相应地,Strachey 的编程范围也更大。更巧的是,Alan Turing (艾伦·图灵)当时正是曼彻斯特大学计算机实验室的助理主任,并为这台机器编写了程序员手册。

而 Strachey 恰好是 Alan Turing 在国王学院的老朋友,顺理成章地,Strachey 获得了一份程序员手册副本。

1951 年 7 月,Strachey 第一次访问了Manchester Mark I Computer(第一台存储程序数字计算机)。当 Strachey 解释了他“希望教会计算机如何下棋”的想法时,Alan Turing 表示这个想法很有趣,并提出另一个可能:让机器模拟自己,并以这种方式为剑桥大学的 EDSAC (电子延迟存储自动计算器,Electronic Delay Storage Auto-matic Calculator)开发解释性跟踪例程。

Manchester Mark I ,图片来源:britannica.com

Strachey 被这个想法吸引了,暂时将原本的计划搁置一边,先着手实现 Alan Turing 提出的这个可能性。最终,Strachey 设计的跟踪程序大约有 1,000 条指令,这是迄今为止为机器编写的最长的程序。

通过上面的叙述,相信大家对 Strachey 的计算机水平已经有了一定的了解,那么 Strachey 的故事先介绍到这里,接下来向读者介绍 3 个新的人物。

— 02 —

三个 David 想要一种新语言

60 年代,剑桥大学准备购入一台新电脑。剑桥想为这台全新的计算机设计一个新的操作系统,而另外三位剑桥大学的研究员 David Hartley, David Wheeler 和 David Barron 则有更进一步的想法。三位 David 想要创造一门全新的编程语言,并由此来开发新的操作系统。

开发一门新语言,这一听就非常有趣!自信的大卫们认为自己可以轻松创造出更好的语言,因此并没有做好前期的需求调研工作。他们没有向未来的用户询问旧语言的优缺点,也没有做好项目规划,就这样开工了。

他们还为这门即将诞生的新语言起了一个响当当的名字 CPL,Cambridge Programming Language 的缩写。多年以后,Hartley 指出,试图创造一种新语言是“一个愚蠢的想法”。

如果