当前位置: 首页 > news >正文

C语言这么厉害,它自身又是用什么语言写的?

很多人学C语言的时候都会冒出一个问题:

C语言这么底层、这么强大,那C语言自己是用啥写的?

先说结论,C语言的第一个编译器,不是用C写的。

这不废话,用C写C编译器,那C编译器从哪来?先有鸡还是先有蛋?

1,C语言编译器是编译成二进制文件了,编译成二进制文件后就跟开发语言无关了。

这就跟机床一样,第一台机床肯定不是用机床加工的,但后面更好的机床,肯定是用前面的机床加工的,用其他语言写个编译器,支持基本语法后,就可以用这个编译器开发新的编译器,增加新特性。

编译器也是类似。 你只需要有一个能跑的编译器,就能用它来造下一个更好的编译器。

2,那C语言第一个编译器到底用什么写的?

这得回到1972年,贝尔实验室。

C语言是Dennis Ritchie开发的。但第一个C编译器,是用 B语言 写的。

B语言是C的前身,同样是Ritchie和Ken Thompson搞出来的。而B语言的编译器,最早是用 汇编 写的。

所以整个链条是这样的:

汇编 → B语言编译器 → C语言编译器 → 现代C语言编译器

3、 用C语言重写C编译器

到了1973年,C语言已经成熟得差不多了,Ritchie做了一个历史性的决定: 用C语言重写C编译器本身。

这就是计算机史上著名的" 编译器自举 "。

过程大概是这样的:

用B语言写的C编译器,编译新写的C版本编译器源码

跑起来,得到一个新的C编译器可执行文件

用这个新编译器再编译一遍自己的源码

验证两次结果是否一致

自己编译自己。

开始是汇编,C语言规范是可以自举的,所以用汇编实现了最开始的几个特性后,就可以用c来写剩下的。编译器的问题就能回答和解决了。

4,编译器是把一种代码映射为另一种代码 所以可以用高级语言写。

就算用Python fsharp这样的语言都能写C编译器。在C语言之前,已经出现了别的高级语言,例如Pascal,那就可以用Pascal来写一个C语言的编译器。

高级语言的鼻祖Fortran,它的编译器是汇编写的。Pascal的第一个编译器据说是Fortran写的。有了这些,才有后来的C。

5,早期写代码,内存极其稀缺。

1970、80年代,很多机器连64KB内存都装不满。在这种条件下写复杂功能,根本轮不到高级语言出场, 汇编才是主力 。

Apple II时代大部分游戏是纯汇编写的。很多程序员连汇编器都没有,要自己手写机器码,6502的那堆寻址码得背得滚瓜烂熟,相对地址还得自己掰着手指算十六进制。

那个年代的程序员,是真的硬。

6、一门新语言的编译器,往往是在"旧硬件+旧语言"上先搞出来的。

Macintosh 128k发布之前,给它开发软件的程序员,用的是更早的机器。新硬件、新系统,先在旧平台交叉编译,这在当时是常规操作。

所以你看,C语言是厉害,但它也是一步一步从汇编和B语言里走出来的。

编译器不神秘,它本质上就是把一种代码映射成另一种代码的工具。理论上,哪怕你用Python、F#,都能写出一个C语言编译器。

只要逻辑正确,用什么语言写都行。

重要的不是写编译器的语言,而是那个坐在贝尔实验室里、真的动手把它造出来的人。

http://www.jsqmd.com/news/967205/

相关文章:

  • 3分钟安装智慧树自动刷课插件:免费开源的高效学习解决方案
  • 商洛市2026贵金属回收精选排名榜单 黄金铂金白银彩金回收靠谱正规门店推荐及联系电话汇总 - 前途无量YY
  • 2026年最新庆阳市黄金回收白银回收铂金回收彩金回收权威TOP5口碑门店推荐+正规可靠机构联系方式 - 亦辰小黄鸭
  • 百度网盘直链解析终极指南:3步实现高速下载的技术方案
  • 铜陵市2026贵金属回收精选排名榜单 黄金铂金白银彩金回收靠谱正规门店推荐及联系电话汇总 - 前途无量YY
  • 别再怕高阶微分方程了!手把手教你用Python的SciPy和自定义RK4求解器对比实战
  • 告别BarTender!用C#和POSTEK SDK,从零搭建一个轻量级标签打印系统
  • 告别地图服务商:手把手教你搭建私有化Cesium离线地图(QGIS切片+Nginx部署)
  • 别只盯着`npm install`失败!深入解读`EUNSUPPORTEDPROTOCOL`:从`npm:`协议看包管理器的演进与兼容性
  • NVIDIA显卡隐藏设置终极指南:如何用Profile Inspector解锁200+隐藏功能
  • 2026年最新曲靖市黄金回收白银回收铂金回收彩金回收权威TOP5口碑门店推荐+正规可靠机构联系方式 - 亦辰小黄鸭
  • 受控数据操作:验证失败后的合规修正框架
  • 别再死记硬背了!用‘文件特征观察法’5分钟识别CTF MISC题考点
  • Learnable Prompt:可学习提示的原理、工程实践与范式迁移
  • 南阳市2026贵金属回收精选排名榜单 黄金铂金白银彩金回收靠谱正规门店推荐及联系电话汇总 - 前途无量YY
  • 百考通:AI一键生成开题报告,让学术研究起步更高效
  • 从J1699-3测试到实战:一份给汽车测试工程师的PVE验证避坑清单
  • 别再只盯着GPS了!从Wi-Fi定位到UWB,聊聊‘几何精度因子’如何影响你身边的定位技术
  • 铜仁市2026贵金属回收精选排名榜单 黄金铂金白银彩金回收靠谱正规门店推荐及联系电话汇总 - 前途无量YY
  • 用Python+OpenCV给视频加转场特效,告别剪辑软件!保姆级代码解析
  • 告别手动配置!在Ubuntu 22.04上用VSCode+CMake一键集成OpenCV(C++)
  • 智慧树自动刷课插件终极指南:3步实现网课高效学习
  • 内江市2026贵金属回收精选排名榜单 黄金铂金白银彩金回收靠谱正规门店推荐及联系电话汇总 - 前途无量YY
  • AI编程风险防控实战:从Prompt结构化到三色审查
  • 2026年最新辽源市黄金回收白银回收铂金回收彩金回收权威TOP5口碑门店推荐+正规可靠机构联系方式 - 亦辰小黄鸭
  • 2026年最新衢州市黄金回收白银回收铂金回收彩金回收权威TOP5口碑门店推荐+正规可靠机构联系方式 - 亦辰小黄鸭
  • 告别性能玄学:手把手教你用Intel VTune Profiler定位服务器C++程序CPU热点(附Perf数据导入技巧)
  • NCCL多GPU通信验证工具:支持all_reduce/broadcast等原语的性能与结果校验套件
  • 假如我的代码只有三天生命:从《Three Days to See》反思软件架构的可读性、可维护性与“技术债”清理
  • 威海市2026贵金属回收精选排名榜单 黄金铂金白银彩金回收靠谱正规门店推荐及联系电话汇总 - 前途无量YY