“赛博考古”:C 编译器的最早版本


GitHub有个叫legacy-cc的项目,竟藏着上世纪70年代最早版本的C编译器源码,而且是由C语言之父Dennis Ritchie(dmr)老爷子亲手写的!

这个项目堪称程序语言“考古现场”,如果你对一门语言如何从零起步演化感兴趣,或者想理解C语言为何能成为编程界的大师级存在,绝对值得膜拜一下。

有人一边感慨“爷青回”,一边指出这套代码像是某种C语言的原始形态:没有类型检查、变量默认都是int、甚至还能在函数体里写extern……这些今天看起来有些离谱的写法,在当年却是主流操作。

而这段代码的价值不仅仅在于“老”,它记录了C编译器最原始的逻辑和结构——比如如何处理语法树、内存分配、语义分析等。

你甚至能看到最初的代码优化雏形,比如简单却精妙的“表达式折叠”——这些机制,正是今天LLVM或GCC背后技术的雏形。

再说点细节:项目中包含了两个主要目录prestruct和last1120c,分别对应早期和稍后的两个阶段。

顺便一提,这代码的也算是开源界的“数字文物”,Caldera当真敢开放。

可以看到,Caldera International在2002年,就大方授权了源码开放,授权明确说明:可免费使用、修改、分发,甚至允许基于源码进行二创,唯一限制是不能涉及UNIX System III / V及之后的版本。

就像有网友说的:“这不只是代码,而是Dennis Ritchie留给后人的一份手稿。”

最后,链接奉上:https://github.com/mortdeus/legacy-cc


相關推薦

2022-05-19

尽可能地减少 Python 代码和 C 代码。 至于饱受期待的 JIT 编译器,Shannon 表示实现 JIT 的第一步是实现一个跟踪解释器,但目前还有太多需要关注的项目,引入 JIT 编译器的工作还有一段路要走,“最早可能要到 3.13 才能到达”。

2024-03-21

提高安全性就一直是 C++ 的目标。只要将 K&R C 语言与最早的C++、早期的 C++ 以及当代的 C++ 进行就能看出差别。许多高质量的 C++ 都是使用基于 RAII (Resource Acquisition Is Initialization)、容器和资源管理指针的技术编写的,而不是传

2023-05-05

定的权限执行程序(通常为操作系统的超级用户)。 它最早开发于 1980 年代。几十年来,sudo 已成为执行更改同时最大程度降低操作系统风险的重要工具。 但因为它是用 C 编写的,所以 sudo 经历了很多与内存安全问题相关的漏

2023-11-04

LP)与北京智源人工智能研究院(BAAI)共同孵化,是国内最早开展大模型研发与探索大模型落地的创业公司之一。公司创始团队曾深度参与智源·悟道大模型的研发,目前已发布产品包括世界首个中文及跨语言反向词典WantWords、

2023-08-31

定的权限执行程序(通常为操作系统的超级用户)。 它最早开发于 1980 年代。几十年来,sudo 已成为执行更改同时最大程度降低操作系统风险的重要工具。 但因为它是用 C 编写的,所以 sudo 经历了很多与内存安全问题相关的

2023-09-16

对 PostgreSQL 12 至 PostgreSQL 16 进行编译打包,不过 EL7 因为编译器版本问题,尚未支持 pg_tle 与 pg_embedding 。这些 RPM 包将由 Pigsty 维护,并放置于 Pigsty 自己的 Yum 源中。 例如,你可以使用 AGE 为 PostgreSQL 加装图数据库能力,

2022-10-13

意的是,当用户没有指定输出名称时,"a.out" 仍然是某些编译器和链接器创建的可执行文件的默认输出文件名,但这个文件仅有文件名为 "a.out",实际创建的文件并不是 a.out 格式(约定俗成的命名习惯)。 在弃用这么久之后,

2022-08-31

过的最大的软件就是一个“带有 Windows SDK 的 Microsoft C/C++ 编译器”,且自此自后,微软再没有发布过如此重的软件。根据介绍,该编译器于 1992 年发布,重量超过 40 磅 (约 36 斤),大部分以厚厚的参考书和“快速”入门指南的形

2022-10-26

随着 11 月 1 日 Zig v0.10.0 版本的发布,其新的自托管编译器(self-hosted compiler)也将同步推出。“尽管自托管编译器现已实现,但仍有更多的工作要做。与此同时,更多令人兴奋的功能的大门已经打开,比如 Zig 的官方包管理器。

2022-04-09

版本为 2.099.1。更新内容主要是修复错误,以及两项关于编译器和库的重要变更。

2022-05-08

态分析器和 JIT 库。 GCC 12.1 的一些亮点包括: 继续为编译器和 C++ 标准库分别支持 C2X 和 C++23 以及 C 和 C++ 的下一版本。C2X 和 C++23 支持仍被视为实验性的。C++20 libstdc++ 支持也得到了改进,但仍处于试验阶段。 GCC 12 支持新 I

2022-11-20

模糊器执行。 Daniel 决定从 curl 8 开始,他们将要求编译器支持 64 位数据类型,主要是为了查看它的运行情况。这不是原来的 C89 版本中存在的特性,而是在 C99 中引入的。目前没有不支持此功能的现代编译器。他认为,这也

2023-08-03

,所以当里面的场减少时,外面的场就会增加。这项实验最早证明超导体不只是完美的导电体,并为超导态提供一个独特的定义性质。 值得一提的是,就目前在复现“室温超导”的全世界各大机构中,似乎只有华中科技大学实

2023-07-12

避免这个问题,但是偶尔还是会受到一些限制。而在这个版本中,我们改进了安装器,提供一个安装选项,让用户选择性开启长路径支持。 这需要管理员权限,因为它需要写注册表。 WriteRegDWORD ${HKLM} "SYSTEM\CurrentControlSet\Cont