C语言编译器是谁写的?第一个竟然不是纯C
C语言所使用的编译器是由C语言编写而成的那么第一个C语言编译器又是由谁来编写的呢它究竟是从哪里涌现出来的呢这个问题于曾经我也认为是玄乎的。在查阅了资料之后才明白它确实并非是凭空地蹦出来的。CPU 根本是不懂 C 的仅仅只认 0 和 1就连汇编它也是不认识的——那东西仍旧是人们强行编出来的符号罢了。最早时期的程序员是拿纸笔去写机器码的一旦写错一个数那么整段程序就会跑飞掉。后来实在是忍受不了了这才搞出了汇编将 10110011 替换成 ADD R1,R2 这种带有名字的指令。可这玩意儿依旧是太过费劲了一行汇编对应着好几行机器码修改起来就如同修理钟表那般。C语言于1973年前后在贝尔实验室被研发出来。Ken Thompson和Dennis Ritchie并非一开始就编写C编译器他们先拥有B语言B语言是从BCPL演变而来的。第一个能够运行的C编译器既不是完全用C编写的也不是纯粹用汇编编写的。如今查看留存下来的文档以及回忆录基本上能够确定主体逻辑是用B编写的然而与硬件进行交互的部分诸如读取内存、写入寄存器、控制PDP - 11的IO口等全部依靠手动敲击汇编代码。相较于汇编B语言自身已然友好了许多然而却依旧无法直接对指针、结构体这类事物进行操作。故而在那般时候的C编译器实际上是由B与汇编混合搭配而成的“半成品”。真正厉害的是后面这一步怎样使得C自己编译自身。他们并非一开始就去搞全功能。首先绘制一个最小的圈仅仅保留int、if、while、函数调用其他的全部砍掉。这被称作C₀。运用B和汇编率先把C₀编译器编写出来让它能够编译自己那几十行C₀代码。等到这个小玩意儿能够稳定运行起来之后再借助它去编译一个功能稍微多一点的C₁编译器——增添了指针和数组。C₁编译出来的又能够编译C₂C₂再编译C₃……如同滚雪球那般一层一层地向上搭建。每一步的幅度都十分微小然而每一步都具备能够顺利运行的可能、可以清晰看见进展与成果的情况、能够进行修改调整的条件。倘若非要一次性直接完成具备全部特性的C编译器的编写工作估计直至如今都还未能完成。这件事情并非仅仅只有C做过Fortran最初是借助汇编写成的它在1957年便已问世之后成为了其他语言发展的基础Pascal于1970年出现其第一版编译器竟然是用Fortran编写的再往后的GCC在1987年发布的时候是用C完成的然而它需要依靠已有的C编译器来编译自身Clang则更为直接是用C编写的背后依靠LLVM中间表示将不同语言纳入同一套框架之中。你瞧无论语言如何更替变化规律都是相同的先是借助一些力量然后再凭借自身发展壮大。如今所讲的“无代码”实际上也是沿着同一条路径发展到当下这般情形的 那些用于拖拽界面、填写表格以及连接流程线的工具 其底层全部是由Java、Go、Rust编写而成的 它们将程序员从事的工作 拆解成业务人员也能够理解的行动 ERP系统以往需要编写上万行代码 如今配置两百个字段、连接十几条规则便能够运行起来 这并非是偷懒 而是把原本只有少数人能够掌握的“定义规则”“组装逻辑”的能力 逐步地向下传递。一开始是从事编写机器码的工程师接着成为编写C的系统程序员随后变为编写Python的业务开发人员最终成为使用低代码平台进行审批流工作的行政同事那些创造工具的人正被工具所创造。有人觉着技术越高级距离底层就越远实则恰恰相反越高级的工具越要牢牢地焊在最坚硬的那块地面上C语言传授给人的并非是如何去写for循环而是告知你所有看上去天衣无缝的东西背后都有人一笔一画搭建过最初的那块砖头。那个第一块砖是汇编写的。第二块是B语言写的。第三块才轮到C自己来写。写写之际无人呼喊口号仅有一伙人蹲在PDP - 11先前之处更改一行尝试一回出错即重新再来。它就那样出来了。