既然有 C 语言,那么 A 语言和 B 语言分别是什么?

是指机器语言和汇编语言吗
关注者
131
被浏览
410,212

27 个回答

我先科普一下我整理的一些历史 (我无视了很多计算机牌子和语言,全都挤进去就眼花缭乱了):


1822 年,Charles Babbage 研发差分机(自动化算术)。英国政府赞助。

1832 年,差分机只能完成 1/7。

1837 年,Charles Babbage 研发出一个电脑, Mechanical computer (Analytical Engine), 不过还是未完成。

1842 年,Ada Lovelace 数学家帮忙 Charles Babbage, 她的笔记被公认为是第一个计算机程序。

1911 年,Marchant calculator 被私人公司研发。

1935-1938 年,德国人 Konrad Zuse 自己研发出 mechanical calculator Z1。

1936 年,苏联开发出水流积算器(Water Integrator), 可运算 non-homogeneous differential equations。

1940 年,Konrad Zuse 展出 Z2 。

1941 年,Konrad Zuse 展出德国政府赞助的可编程的通用型计算机 Z3 。

1942 年,Konrad Zuse 开始研发 Z4。

1943 年,美军赞助宾夕法尼亚大学团队开发 ENIAC 计算机。Z1 被轰炸。

1945 年,Z4 附近地区被敌军轰炸而停滞。1949 年才继续研发出来。

1946 年,trackball 为了雷达系统开发出来。ENIAC 开发完成。

1948 年,苏联 20 人团队开发 MESM 可编程通用型电脑。1950 年开发完成。

1949 年,Moniac 液态 Analog computer 被纽西兰人 William Phillips 开发用来预测英国经济。英国原子能科学研究院 (AERE) 开始开发 Harwell computer。

1951 年,Harwell computer 开发完成。1957 年从哈韦尔搬家到比赛赢家胡弗汉顿大学。改名为 WITCH。1973 年捐去伯明翰博物馆。 2012 年在英国国家计算机博物馆(TNMOC) 重启。

1953 年,IBM 的 John Backus 为了 IBM 701 大型计算机开发了第一个高级程序语言 Speedcoding。之后John Backus 团队为了 IBM 704 开始开发 FORTRAN 语言。

1954 年,日本推出继电器计算机 FACOM 100。

1955 年,美国海军 Whirlwind Project 在 MIT 开发了可在屏幕画图的 Light Pen。MIT 研发 Tx-0 (Transistorized Experimental computer zero) 电脑。

1956 年,兰德公司和卡内基梅隆大学开发出 Information Processing Language (IPL), 第一个 AI 程序语言。

1957 年,哈佛 Kenneth E. Iverson 已着手开发 APL 语言(1962 年在 A Programming Language 一书公开)。

1958 年,MIT John McCarthy 研发出 Lisp 语言。John Backus 用 Backus–Naur form 帮助苏黎世联邦理工学院开发出 ALGOL 语言 (即 ALGOL 58)。

1959 年,Lisp 推出 GC (Garbage Collection) 概念。CODASYL 联盟推出 COBOL (common business-oriented language) 语言。Digital Equipment Corporation(DEC)基于 Tx-0 研发 PDP-1。

1960 年,在巴黎推出 ALGOL 60。

1962 年,DEC 推出 PDP-4。MIT 设计,DEC 和 Spear推出的第一台迷你电脑 (12-bit) LINC (命名来源于 MIT Lincoln Laboratory)。

1963 年,DEC 推出 (12-bit) PDP-5 和 (36-bit) PDP-6。MIT Lincoln TX-2 电脑的一个叫 Sketchpad 程序有 light pen 画图功能。 ESR 教育公司推出 5 美金的玩具型电脑 Digi-Comp I。剑桥和伦敦大学联手基于 ALGOL 60 开发出 CPL (Combined Programming Language) 语言。

1964 年,DEC 推出 PDP-7。General Electric, Bell Labs, MIT 联手计划开发 Multics 系统。 IBM 开发了 PL/I 语言 (Programming Language One)。达特茅斯学院 Kemeny & Kurtz 开发了 BASIC 语言。

1965 年,DEC 推出热销的商用 12-bit 电脑 PDP-8。

1966 年,基于 ALGOL 60 的 ALGOL W 语言面世。

1967 年,剑桥教授 Martin Richards 基于 CPL 开发出 BCPL (Basic Combined Programming Language) 语言。

1968 年,德国 Telefunken 公司开发了 ball-based mouse。Mouse 出现在斯坦福研究所开发的 NLS 可点击超链接功能的系统。几所大学合作的基于 PL/I 的 XPL 语言出现,用来学习开发编译器。

1969 年,Multics 的几个研究员放弃 Multics 而专帮 Bell Labs 重新开发新的 OS 叫 UNIX。Ken Thompson 在 PDP-7 以汇编开发了 UNIX 系统(命名来源: Multics -> Unics -> Unix)。

1970 年,UNIX 1 从 PDP-7 移植到 PDP-11/20。Niklaus Wirth 基于 ALGOL W 开发出 Pascal 语言。IBM 的 Edgar F. Codd 提出关系模型 (Relational model)

1971 年,出版 Unix 手册, 已有 mail, cp, su 命令, 在 Thompson shell 执行。

1972 年,UNIX 2 在十台电脑安装。 有了 echo 命令和 c 编译器。 Thompson 参考 BCPL 研发出 B 语言, 不过用在 PDP-11 有问题。 Dennis Rithcie 根据 B+types 开发出新的 C 语言。 Thompson 使用时失败了 3 次,Dennis 回去加上了 Structures 后才成功。 UNIX 3 推广 C 语言。 同年 UNIX 4 从汇编语言大量改成 C 语言。 Paul Allen 和 Bill Gates 成立 Traf-O-Data 公司。

1973 年,Mouse 不再停留在只点击链接, Xerox PARC 推出了以 Mouse+GUI 为主要界面的 Xerox Alto 电脑。Digital Research 的 Gary Kildall 帮 Intel 研发 PL/M (Programming Language for Microcomputers)语言。

1974 年, UNIX 5 大量发出教育 license。有了 dd, find 命令。32-bit OS/32 系统的 Interdata 7/32 推出。

1975 年,两个 Berkeley 研究生 Bill Joy 和 Chuck Haley 接触了 Ken Thompson 所带来的 UNIX 6 和 Pascal, 且改进了编辑器,称为 ex 。Unix Users Group 协会成立。Bill Gates 和 Paul Allen 看到 Altair 报道, 就联络 Altair。 在 PDP-10 30 天内完成 Altair BASIC 翻译器。Allen 下机前才完成 bootstrap 程序。同年 "Micro-Soft" 成立,其基于 CP/M 系统(OS 基于 PL/M 语言) 的 Altair 8800 电脑推出。

1976 年,Steve Jobs 推出 Steve Wozniak 一手设计的 Apple 1 电脑, 用 BASIC 编译。Bell labs 的 Stephen Bourne 开始开发 Bourne Shell (sh)。

1977 年,Bill Joy 编译了和 UNIX 类似的 BSD 系统。商业化的 Unix 6 有了 ratfor 和 bc 语言。Unix Users Group 协会因 "UNIX" 商标问题改名为 USENIX。Commodore 国际推出 Commodore BASIC 系统的 Commodore PET 电脑。 DEC 推出流行的 32-bit 电脑 VAX-11/780。 UNIX 移植在 Interdata 7/32 和 Interdata 8/32。1977 至 1983 年, Jean Ichbiah 带队替美国国防部(DoD) 设计 Ada 语言, 以代替该部成百的语言。 Larry J. Ellison 拜读了 1970 IBM Codd 的论文后, 和 Ampex 前上司 Robert Nimrod "Bob" Miner 等人成立软体开发实验室 (Software Development Laboratories, SDL)。

1978 年,苹果计划 Apple Lisa (有 GUI 的)电脑。 UNIX 7 把 Thompson shell 换成了 Bourne Shell, 有了 sed 和 awk 命令。 Bell Labs 卖 UNIX 7 license 给 Microsoft。Dennis Ritchie 和 Brian Kernighan (两人简称 K&R) 出版了著名的 "The C Programming Language" 第一版。Bill Joy 推出了基于 UNIX 6 的 1BSD。

1979 年,UNIX 移植在 DEC VAX, 成为 UNIX/32V。Bill Joy 五月推出 2BSD, 有了 vi 和 C shell。UNIX/32V 工具+2BSD 工具+虚拟内存(大改)内核的 3BSD 在年尾推出。 生产 CP/M 硬件的 Novell 公司成立。 Bjarne Stroustrup 开发 “C with Classes” 语言。Mike Lesk 在 1978 写的 UUCP (Unix-to-Unix Copy) 程序随 UNIX 7 发布。北卡罗来纳大学研究生 Steve Bellovin 出席杜克大学研究生 Jim Ellis 和 Tom Truscott 的开发类似 ARPANET 的邮件列表(mailing lists) 以提供没参与 DARPA (国防高级研究计划局) 项目的大学会议, 他先以 Bourne Shell 语言写了 Netnews 程序,能利用 UUCP 程序通过调制解调器让两个电脑交换文件, 较后才以 C 语言重写。 Larry J. Ellison 改 SDL 公司名为 Relational Software, Inc. (RSI) , 推出在 PDP-11运行的 Oracle V2 (心理学, 没有人喜欢当小白鼠掏钱买 V1), 乃是首个商用关系数据库管理系统 (relational-database management system, RDBMS), 首个客户是 CIA (IBM 还没准备卖, 所以才找到这家做着类似东西的公司, 负责找的 Dave Roberts 恰好是 Miner 前上司, Oracle 是 CIA 项目的 codename)。

1980 年,Microsoft 推出 UNIX 7 license 的 Xenix 系统, 卖给 IBM/Intel/Tandy/Siemens (Siemens 改 Xenix 成 SINIX) 等 OEMs 公司。英国推出 Sinclair BASIC 系统的 Sinclair ZX80 电脑。Commodore VIC-20 推出。欧洲核子研究组织(CERN) 的 Tim Berners-Lee 写了超文本 ( hypertext) 程序 ENQUIRE。 UUCP 协议的 Usenet 新闻网公开。

1981 年,Bill Gates 在 COMDEX 展览会发掘了IBM 电脑的 GUI 。Sinclair ZX 81 推出。IBM 姗姗来迟 (比 Oracle 迟了, 虽然 1970 论文是 IBM 写的) 推出 SQL/DS (Structured Query Language/Data System), 它的首个 RDBMS。

1982 年,大杂烩(PWB/UNIX 2.0, CB UNIX 3.0, UNIX/TS 3.0.1, UNIX/32V 混在一起) UNIX System III 系统面世。Sinclair ZX Spectrum 推出。鉴于主要产品 Oracle 名气大, RSI 公司第二次改名成 Oracle Systems Corporation。 Sun Microsystems 公司成立, Bill Joy 很快就加入。 Sun 同年卖出 Sun-1 工作站, 乃是创办人之一 Andy Bechtolsheim 在斯坦福大学 DARPA 赞助下设计的 CPU board, 系统是 UniSoft 移殖 Unix 7 的 UniPlus V7 到 Motorola 68000 微处理器的 SunOS。

1983 年,著名的商用 UNIX System V ( SysV) 系统面世。MIT 的 Richard Stallman 开展了 GNU Project,专门开发免费 license 的 UNIX-like(很像 UNIX 但又不是 UNIX,GNU 也是 GNU's Not Unix 的缩写) 工具。Apple Lisa 发布。4.2 BSD 推出。SunOS 曾一度融合 SysV 和 4.2 BSD。Anders Hejlsberg 在 Borland 幂下开发 Turbo Pascal 和 Delphi 两个IDE (之后在微软带队开发了 .Net, C#, TypeScript)。Novell 开发网络系统 NetWare。"C with Classes" 重命名为 C++。由于 CIA 和 Navy Intelligence (海军情报)都要求移植在 VAX, Navy 还要支持 Unix, 以 C 语言重写成 Oracle v3。

1984 年,Sinclair QDOS 系统的 Sinclair QL 推出。Linus Torvalds 也用过 QL, 还写了自己的汇编器和编辑器。他 11 岁就接触日本推出的 Commodore VIC-20 电脑了 。

1985 年,卡内基·梅隆大学的人,基于 4.2BSD 开发了 Mach 系统微内核。Steve Jobs 的 NeXTSTEP 就是基于 Mach 系统内核, 多年后成为了 Mac OS。 IBM 和 Microsoft 开始开发 OS/2。第一版 "The C++ Programming Language" 书发行。

1986 年,4.3BSD 推出, 其 TCP/IP stack 影响力甚大。

1987 年,一个大学教授开发了 MINIX OS 方便给学生学习。OS/2 开发出来了。AT&T (Bell labs 母公司)和 Sun 融合三巨头系统 BSD + SysV + Xenix, 称为 System V Release 4 (SVR4)。然后改名为 Solaris 2。

1988 年,K&R 改版 ANSI 标准的 "The C Programming Language" 书出版。Steve Jobs 1985 年建立的 NeXT Inc. 推出 NeXT Computer 工作站电脑。

1989 年,为了移除 AT&T license,BSD 推出 BSD license 的 Networking Release 1 (Net/1) 系统。

1990 年,GNU 要开发自家的 GNU Hurd 系统内核(也是参考 Mach)代替 UNIX。

1991 年,几乎砍掉所有 AT&T 工具的 Net/2 发行。几个月后,芬兰大学生 Linus Torvalds 不爽 MINIX 教育-only license ,在 MINIX 平台写了 Linux 系统内核, 8月26日在新闻组(Usenet newsgroup )正式(7月3日是第一次提,不过目的是求人提供 POSIX 标准文件)分享, Linux 系统大量安装了 GNU 的工具,所以 Richard Stallman 坚持人们称呼 Linux 系统为 GNU/Linux 比较公平。随着 GNU GPL license 的 Linux 面世后, GNU Hurd 内核变成开发停滞。Berners-Lee 1989 年草拟,结合超文本 ( hypertext) + 传输控制协议(TCP) + 域名系統(DNS) 的概念组成 World Wide Web (WWW), 第一个万维网网站 http://info.cern.ch 由欧洲核子研究组织(CERN)的 NeXT 主机在8月6日上线。

1992 年,Berkeley Software Design (BSDi) 敢敢拿 Net/2 当成 BSD/386 来卖钱后,被 AT&T 控诉。

1993 年,Novell 从 AT&T 买下了 Unix System Laboratories 分部。继承者 FreeBSD, NetBSD 在官司期间已相续拔剑而出。美国国家超级电脑应用中心(NCSA)为 NCSA HTTPd web 服务器开发 CGI 标准。

1994 年,BSD 和 Novell 和解后已失去开源开发者的信心, 与 Linux 竞争已无可能。Solaris 2.4 发行。世界上最好的语言终于刷存在感了, Rasmus Lerdorf 以 C 语言开发 Personal Home Page Tools (PHP Tools) 的一套 CGI 二进制工具。

1995 年,Berkeley 大学最后一个版本 4.4BSD-Lite Release 2 发行。 Oracle Systems Corporation 改名改上瘾, 第三次改名成现今的 Oracle Corporation。Amazon.com 卖出第一本书 “Fluid Concepts and Creative Analogies”。

1996 年, OpenBSD 推出。 Sun 发布 Java 1.0。 Compaq 内部文件提出 “Cloud Computing”。 史丹佛大学生 Larry Page 参与 Stanford Digital Library Project (SDLP) 项目。 他觉得 WWW 就是巨大的链接图像, 所以打算打造反向链接 (Backlink) PageRank 算法的搜索引擎 BackRub 以取代当今流行的关键字搜索次数算法, 随后 Sergey Brin 加入一起以 Java 和 Python 语言开发。 爬虫在3月从 Larry Page 的史丹佛主页开始爬。 他们也参考李彦宏的 “link analysis”, 即 IDD Information Services 的 Randex 的 anchor text 且在 2001 的 patent 文件 提及 (点击 1998 年的下载只能看见 2001)。

1997 年, BackRub 改名成 Google。

1998 年,Andi Gutmans 和 Zeev Suraski 与作者合作, 推出 PHP 3.0, 递归缩写命名为 PHP: Hypertext Preprocessor ,也取代了 PHP/FI 2.0 风格的命名。 史丹佛大学博士生 Larry Page 和 Sergey Brin 年初和数人发布了 PageRank 算法论文。 接着两人成立 Google 公司, 首轮四个主要投资人包括 Sun 创办人之一 Andy Bechtolsheim 和 Amazon 创办人 Jeff Bezos。

2000 年, Ericsson 在新加坡发布第一部蓝牙手机 Ericsson T36。 微软发布 .NET Framework 1.0 Beta 1。

2002 年, 微软发布 .NET Framework 1.0 Service Pack 1。

2004 年, DragonFly BSD 推出。

2006 年, Amazon 推出 Amazon Web Services (AWS) 平台。 3 月推出 Amazon S3 (Amazon Simple Storage Service), 8月公测 EC2 (Amazon Elastic Compute Cloud)。

2009 年,NetWare v6.5 最后一版。

2010 年, Oracle 收购 Sun。


C 语言源自 B, B 源自 BCPL,可 B 的命名就连 Dennis Ritchie 本人都不懂正确答案(看下文, 他真的不懂同事在想什么!工作也没聊过这个话题 !? C 语言之父不懂, 知乎上的大神能懂吗 ?)... 所以不存在 A 语言, 就算存在也是在 Ken Thompson 的脑子里不曾公开。知乎大神也请别随意脑补 Algol,如果 Algol 是 A 语言,那么 CPL 就是 B 语言,BCPL 就是 C 语言, B 就是 D 语言了, 把 CPL 和 BCPL 直接抹去这不大好意思吧 ? 要说脑补真的没完没了,比如 "A"T&T 开发的 Multics 东西就是 A 语言, "B"ell labs 开发的就是 B 语言, 亦或 Ken Thompson 女神是 "A"da Lovelace 。历史文献并没有 A 语言的说法。当然你可以说 APL 是 A programming language 的缩写,但实际上是 APL 语言, 而不是 A 语言;即便是也不是你想像的那种 A-B-C 直属关系。

The Development of the C Language*:

Challenged by McIlroy's feat in reproducing TMG, Thompson decided that Unix—possibly it had not even been named yet—needed a system programming language. After a rapidly scuttled attempt at Fortran, he created instead a language of his own, which he called B. B can be thought of as C without types; more accurately, it is BCPL squeezed into 8K bytes of memory and filtered through Thompson's brain. Its name most probably represents a contraction of BCPL, though an alternate theory holds that it derives from Bon [Thompson 69], an unrelated language created by Thompson during the Multics days. Bon in turn was named either after his wife Bonnie, or (according to an encyclopedia quotation in its manual), after a religion whose rituals involve the murmuring of magic formulas.

个人觉得比较合理的是 BCPL 和 Bonnie 的重叠字就是 B。 当然我也只是脑补 :p

不过别忘了 Ken Thompson 用人名命名产品的习惯有迹可循,比如第一代 Unix shell 命名为 Thompson Shell。

所以 Ken Thompson 就是一贯闷骚程序员性格,把喜欢的人名内置在产品, 如 Steve Jobs 命名 Lisa 电脑没两样。口虽不说,但产品名还是很诚实的。

【更新】
KEN, UNIX, AND GAMES:
Once we had moved to the PDP-11, and Unix was beginning to achieve some visibility, Ken continued various game-related activities. Some were just simple text interactions, like a Blackjack opponent, or a rewriting of the "Hunt-the-Wumpus" game. Many of these were written for his son Cory, then at just the age to play with them. Some were not games as such, but recreational demos: he wrote an interpreter for the Snobol language, and illustrated it with a program that solved the Instant Insanity puzzle.

当我看到这篇文章(其实我是先看的维基)提到 Ken Thompson 儿子叫 Cory 我就震惊了, Ken Thompson 在 2019 年 5 月被 Brian Kernighan 的访谈提到他写 Unix 的时候孩子才一岁。 既然刚出生的儿子叫 ‘C’ory (有些文章写成 'Corey'), Dennis 应该也是才坚定选的 C, C after B 反而是巧合。

The Development of the C Language*:
This paper is about the development of the C programming language, the influences on it, and the conditions under which it was created. For the sake of brevity, I omit full descriptions of C itself, its parent B [Johnson 73] and its grandparent BCPL [Richards 79], and instead concentrate on characteristic elements of each language and how they evolved.

所以呢,B 语言是 C 语言的 "parent", 'B'onnie 是 'C'ory 的妈妈, 这比 C after B 的烂理由有意义得多了。

- Well, let's talk about A language

- A language? Which language?

- Just A language.

- Which one?

- ... Fuck it.

这就是没有 A 语言的原因。

正好跟 @张彬 聊到,他现编的哈哈哈