思考

  1. 是不是老外对颜色都不敏感,所以喜欢用很浓的颜色。而对于文字排版很敏感。
  2. 计算

    机的历史,让我着迷。

摘录

《UNIX传奇:历史与回忆》
布莱恩·W.克尼汉
45个笔记

◆ Unix传奇往事的启示

苹果的创始人史蒂夫•乔布斯2007年也说过:“苹果公司最大的秘密,那就是苹果把自己看成是一家软件公司

Unix是现代操作系统的鼻祖。从Unix到FreeBSD,再到OS X,最后到iOS应运而生。由于Unix的版权纠纷和Minix的封闭,Linux诞生了,而后又产生了Android。

文件、目录、系统调用、shell、管道,还有一大批优秀的生产力工具,如grep(正则表达式)、diff、Lex、Yacc、Make等,都凝结着Unix创造者的智慧和心血

一大批天才人物聚集在一起,没有生活的压力,没有KPI的烦恼,自由地探索科学的发展和应用。即使是贝尔实验室的小角色后来都成了大人物,比如谷歌前董事长埃里克•埃默森•施密特就曾作为贝尔实验室实习生参与编写Lex第一版程序

◆ 见证软件历史丰碑

1843年,英国大诗人拜伦的女儿埃达•洛夫莱斯(Ada Lovelace,1815—1852)为数学家巴贝奇的分析引擎编写了一个用于计算伯努利数的程序。凭借这段程序,埃达享有了第一个程序员的美名。她编写的伯努利数程序被认为是人类历史上的第一个计算机程序。

另一个伟大的女性在软件历史上立下不朽功勋。她的名字叫格蕾丝•霍珀(Grace Hopper,1906—1992),她在UNIVAC I大型机上开发出了一个名为A-0(Arithmetic Language version 0)的特殊软件,这个软件可以把人类书写的程序自动编译为可以在计算机上执行的程序。这样的程序很快被赋予一个专有的名称——编译器。

基于编译器的“软件生产模式”被广泛认可后,具有不同特色、适合不同应用领域的高级语言——Fortran(1957)、ALGOL(1958)、COBOL(1959)、BASIC(1964)纷纷出现了。

◆ 译 者 序

以我之见,程序员的追求就是让机器听话,让工作自动化,让人类生活更美好。昔年Unix核心团队乃至贝尔实验室计算科学研究中心的一众精英,无疑都是秉承这个初衷,尽展所长,才取得如此辉煌的成就的。

几十年过去了,“让机器听话”部分演变为“让机器听得懂人话”。人工智能科技进步巨大,在一些领域中,机器展现出可观的能力,替代了相当一部分人工

◆ 第1章 贝尔实验室

我特别喜欢乔恩·格特纳的《创意工厂》,这本书主要写物理科学研究方面的内容。詹姆斯·格雷克(James Gleick)的《信息简史》(The Informationtion)对于了解信息科学极有价值。贝尔实验室官方出品的《贝尔系统的工程与科学史》(A History of Engineering & Science in the Bell System)卷帙浩繁(共7卷,近5000页),既全面又权威,以我之见,也很有趣。

贝尔实验室雇员还发明了负反馈放大器、太阳能电池、激光器、手机、通信卫星和电荷耦合器件(有了它,手机上的摄像头才能工作)等。

贝尔实验室还有一项任务,那就是构建对通信系统工作机制的数学理解。克劳德·香农(Claude Shannon)基于第二次世界大战期间的密码学研究创建了信息论,这是最重要的成果。香农于1948年在《贝尔系统技术杂志》(Bell System Technical Journal)上发表“A Mathematical Theory of Communication”(通信的数学理论)一文,阐释了通信系统可传递信息数量的基本属性和限制。

随着计算机变得越来越强大、越来越便宜,其用途也拓展到数据分析、物理系统和过程的大型建模与仿真

夏日的某天,有人搞混了存储密码的文件和保存当日欢迎登录消息的文件。密码都是明文存储的,结果一登录系统就会看到所有人的密码。

编程风格的第一条规则:写明白,别炫技。

◆ 第2章 Unix雏形(1969)

其中有一些指令负责依据之前的计算结果,即已做完的事,决定后续执行什么指令——这决定了计算机下一步做什么。这样一来,计算机就掌控了自己的命运。

使用某种编程语言,为执行某项要完成的任务创建操作序列,这就是所谓的编程。

所以编程领域的大部分进步都与创造接近人类表达计算方式的编程语言有关

area = length * width

这就是今天大部分主流编程语言中的确切形式。编译器将其翻译为人类仍然可读但主要面向计算机的机器指令序列。在一台虚构的简单计算机上,该序列大概像下面这样:

load length multiply width store area

穿孔卡用高品质硬纸制成,每张卡片能保存最多80个字符,容纳一行程序的内容

6行C语言程序得用6张卡片,如果要修改代码,就得替换卡片

Multics本该前途无量,但其很快就陷入困境。回头看来,它算是第二系统效应(second system effect)的受害者。所谓第二系统效应,意思是在首个系统(如CTSS)创建成功后,打算创建一个新系统,修正旧系统的遗留问题,还要添加每个人期望的新特性,结果常常是塞了太多不同东西进去,最终得到过于复杂的系统

“在某一时刻,我发现离实现一个操作系统仅有3周之遥了。”他需要写三个程序,每周写一个:用来创建代码的编辑器;将代码转换为PDP-7能运行的机器语言的汇编器;再加上“内核的外层——操作系统齐活了”。

正如他在2019年一次采访中所说,“一周,一周,再一周,我们就有了Unix。”无论以何种方式来度量,这都体现了真正的软件生产力。

1969年年中至年末,有明确Unix特征的系统就已在运行,可以说那就是Unix诞生的时间了。

◆ 第4章 第6版(1975)

归根结底,系统调用就是操作系统,因为它们定义了系统提供的服务。

shell是运行其他程序的程序

shell的另一主要服务是I/O重定向。

管道也许是Unix中最引人注目的创新。管道是一种机制,由操作系统提供,并通过shell轻松访问

“在与霍普克罗夫特(Hopcroft)[10]及厄尔曼(Ullman)[11]合著的《计算机算法的设计与分析》(The Design and Analysis of Computer Algorithms)一书中,阿尔·阿霍为某个算法写了个例程,那正是egrep的第一个实现

egrep技术卓越,但除非你知道标准方法的性能有多差,否则就会视若无睹。”

第一份广泛传播的C语言说明书是《C程序设计语言》(The C Programing Language)(图4-5),这本书是我和丹尼斯在1978年出版的,第2版于1988年推出。

◆ 第5章 第7版(1976—1979)

Yacc结合了先进的解析技术、极高的效率和方便的用户界面,成为早期语法分析器生成软件中的仅存硕果。今天,除了以完整的独立软件形式出现,它还在其他软件(如由它衍生出来的Bison)中存在,并且在另外几种编程语言中得以重新实现、继续发挥作用。

Lex程序由一连串的模式(正则表达式)组成,这些模式定义了要识别的“词元”(lexical token)。对于编程语言来说,这些标记是保留字、变量名、运算符、标点符号等元素

Yacc和Lex紧密协同。解析过程中,Yacc会反复调用Lex,Lex每次读取足够多的输入来构造完整词元,并将其传回给Yacc。Yacc/Lex组合将编译器的前端组件机械化,能够同时处理复杂的语法和词法结构

[插图]

程序帮你写的代码会比你自己手写的更正确、更可靠。如果改进了生成器,例如能生成更好的代码,那么每个人都会受益;相反,对手写程序的改进并不能改善其他程序

阿尔·阿霍写了几本广泛使用的课本,包括1977年与杰夫·厄尔曼合写的名作“龙书”《编译原理》(Principles of Compiler Design)(图5-12),还有与杰夫及约翰·霍普克罗夫特(John Hopcroft)合写的《计算机算法的设计与分析》(Design and Analysis of Computer Algorithms)

乔恩·本特利在《ACM通讯》上的专栏文章结集成《编程珠玑》(Programming Pearls)一书。数学中心的迈克·加里(Mike Garey)和戴维·约翰逊(David Johnson)用Troff和Eqn为他们的大作《计算机和难解性:NP完全性理论导引》 (Computers and Intractability: A Guide to the Theory of NP Completeness)排版

◆ 第8章 派生物

不过,Plan 9确实为世界贡献了一件无比重要的东西:Unicode的UTF-8编码。

◆ 第9章 遗产

GNU(“GNU’s not Unix”的递归缩写[1])是一个大型软件集合,大部分基于Unix模式,以源代码的形式免费提供给所有人使用:有了它,Unix上几乎所有东西都可以使用,甚至包括更多工具

GNU加上Linux操作系统,相当于免费版的Unix。Unix命令的GNU实现是开源的,可以被使用和扩展。唯一的限制是,如果发布了改进,成果必须免费提供给每个人,不可以私有。当今大量的软件开发都基于开源项目,在很多情况下就是基于GNU的实现。

1993年电影《侏罗纪公园》(Jurassic Park)中有个著名场景,13岁的莱克斯·墨菲[Lex Murphy,阿丽亚娜·理查兹(Ariana Richards)饰]说:“这是个Unix系统! 我会用。”她浏览文件系统,找到大门控制装置,锁上了门,从而使大家免于被迅猛龙吃掉(图9-1)。这一幕可以说是极客们的高峰时刻。

最后修改:2024 年 09 月 05 日
如果觉得我的文章对你有用,请随意赞赏