当前位置:首页 > 体育 >

c语言由什么编写成的(c语言程序由什么组成的)

来源:原点资讯(m.360kss.com)时间:2023-06-23 17:57:55作者:YD166手机阅读>>

c语言由什么编写成的,c语言程序由什么组成的(1)

c语言由什么编写成的,c语言程序由什么组成的(2)

作者 | 刘欣

本文经授权转载自码农翻身(ID:coderising)

这是来自我的星球的一个提问:“C语言本身用什么语言写的?”

换个角度来问,其实是:C语言在运行之前,得编译才行,那C语言的编译器从哪里来? 用什么语言来写的?如果是用C语言本身来写的,到底是先有蛋还是先有鸡?

c语言由什么编写成的,c语言程序由什么组成的(3)

我们假设世界上不存在任何编译器,先从机器语言说起,看看怎么办。

机器语言可以直接被CPU执行,不需要编译器。

然后是汇编语言, 汇编语言虽然只是机器语言的助记符,但是也需要编译成机器语言才能执行,没办法只能用机器语言来写这第一个编译器了(以后就不用了)。

汇编语言的问题解决了,就往前迈进了一大步,这时候就可以用汇编语言去写C语言的编译器,我们说这是C编译器的老祖宗。

有了这个老祖宗,就可以编译任意的C语言程序了,那是不是可以用C语言本身写一个编译器?只要用老祖宗编译一下就可以了。

OK,这么一层层上来,终于得到了一个用C语言写的编译器, 真是够麻烦的。

到这个时候,之前那个汇编写的C语言编译器就可以抛弃了。

当然,如果在C语言之前,已经出现了别的高级语言,例如Pascal,那就可以用Pascal来写一个C语言的编译器。

第一个Pascal的编译器据说使用Fortran写的。而做为第一个高级语言的Fortran,它的编译器应该是汇编语言写的。

c语言由什么编写成的,c语言程序由什么组成的(4)

关于编译器,这里边有个有趣的传说:

传说Unix 发明人之一的 Ken Thompson在贝尔实验室,大摇大摆的走到任何一台Unix机器前,输入自己的用户名和密码,就能以root的方式登录!

贝尔实验室人才济济,另外一些大牛发誓要把这个漏洞找出来,他们通读了Unix的C源码,终于找到了登录的后门,清理后门以后编译Unix , 运行,可是Thompson 还是能够登录进去。

有人觉得可能是编译器中有问题,在编译Unix的时候植入了后门,于是他们又用C语言重新写了一个编译器,用新的编译器再次编译了Unix,这下总算天下太平了吧。

可是仍然不管用,Thompson 依然可以用root登录,真是让人崩溃 !

后来Thompson 本人解开了秘密,是第一个C 语言编译器有问题,这个编译器在编译Unix源码的时候,当然会植入后门,这还不够,更牛的是,如果你用C 语言写了一个新编译器,肯定也需要编译成二进制代码啊,用什么来编译,只有用Thompson写的那第一个编译器来编译,好了,你写的这个编译器就会被污染了,你的编译器再去编译Unix , 也会植入后门 :-)

说到这里我就想起了几年前的XcodeGhost 事件,简单来说就是在Xcode(非官方渠道下载的)中植入了木马,这样XCode编译出的iOS App都被污染了,这些App就可以被黑客利用做非法之事。

虽然这个XCodeGhost和Thompson的后面相比差得远,但是提醒我们,下载软件的时候要走正规渠道,从官方网站下载,认准网站的HTTPS标准,甚至可以验证一下checksum。

c语言由什么编写成的,c语言程序由什么组成的(5)

可能有人问:我用汇编写一段Hello World都很麻烦,居然有人可以用它写复杂的编译器?这可能吗?

当然可能,在开发第一代Unix的时候,连C语言都没有,Ken Thompson 和 Dennis Ritchie 可是用汇编一行行把Unix敲出来的。WPS第一版是求伯君用汇编写出来的,Turbo Pascal 的编译器也是Anders 用汇编写出来的,大神们的能力不是普通人能想象得到的。

对于编译器来说,还可以采用“滚雪球”的方式来开发:

还是以C语言为例,第一个版本可以先选择C语言的一个子集,例如只支持基本的数据类型,流程控制语句,函数调用...... 我们把这个子集称为C0。

然后用汇编语言写个编译器,只搞定这个语言的子集C0,这样写起来就容易不少。

C0这个语言可以工作了,然后我们扩展这个子集,例如添加struct,指针.....把新的语言称为C1。

那C1这个语言的编译器由谁来写?自然是C0。

等到C1可以工作了,再次扩展语言特性,用C1写编译器,得到C2。

然后是C3、C4......最后得到完整的C语言。

这个过程被称为bootstraping , 中文叫做自举。

作者简介:刘欣,畅销书《码农翻身》作者,15年以上开发经验,前 IBM 架构师,领导过多个企业应用架构设计和开发工作;洞察技术本质,擅长用故事去讲解复杂技术。

【END】

c语言由什么编写成的,c语言程序由什么组成的(6)

栏目热文

二级c语言考什么(c语言二级好过吗)

二级c语言考什么(c语言二级好过吗)

全国计算机等级考试(NationalComputer Rank Examination,简称NCRE)是经原国家教育委员...

2023-06-23 17:34:10查看全文 >>

c语言程序主要由哪些部分组成(c语言程序由哪三部分组成)

c语言程序主要由哪些部分组成(c语言程序由哪三部分组成)

C语言程序结构特点:1.一个程序有一个或多个源程序文件组成。在一个源程序文件中可以包含三个部分:预处理指令、全局声明、函...

2023-06-23 17:37:48查看全文 >>

c语言由什么过程构成(c语言程序是有什么构成的)

c语言由什么过程构成(c语言程序是有什么构成的)

第一部分 "C 语言基础知识"知识点1、C 程序的基本结构 C程序是由函数构成的。每个程序由一个或多个函...

2023-06-23 17:56:23查看全文 >>

c语言入门程序详解(刘铁猛c语言入门详解)

c语言入门程序详解(刘铁猛c语言入门详解)

今日头条/西瓜视频/抖音短视频 同名:正点原子原子哥感谢各位的关注和支持,你们的支持是原子哥无限前进的动力。C语言入门基...

2023-06-23 17:45:26查看全文 >>

一个c程序的执行是从什么开始的

一个c程序的执行是从什么开始的

现代远程教育课程考试(专科)复习题及参考答案《c语言程序设计》一、选择题:1.以下不是C语言的特点的是( )A.C语言简...

2023-06-23 17:33:09查看全文 >>

六六电视剧哪部好看

六六电视剧哪部好看

hello,大家好!今天的你们都开心了吗?都在忙些什么呢?今天要和大家一起聊聊六六编剧的几部电视剧,看看有没有你们曾经追...

2023-06-23 18:04:25查看全文 >>

六六电视剧作品全集(张译电视剧作品全集)

六六电视剧作品全集(张译电视剧作品全集)

由孙俪和罗晋领衔主演的《安家》以3.5%的收视率成为近4个月来收视率最高的电视剧,这不仅是一部房产中介的职业剧,更是社会...

2023-06-23 18:01:04查看全文 >>

六六的电视剧大全(六六演过的电视剧大全)

六六的电视剧大全(六六演过的电视剧大全)

在当代国产现实题材电视剧的长河里,“编剧六六”的名字不可或缺。人们提起她,总是会想起那一部部曾经打破国产剧题材类型窠臼的...

2023-06-23 18:03:52查看全文 >>

六六在安家演谁(安家编剧六六介绍)

六六在安家演谁(安家编剧六六介绍)

中青报·中青网记者 沈杰群六六正在播出的都市剧《安家》中,郝平与海清饰演的博士夫妇为买房发愁。十年前的《蜗居》也是他们俩...

2023-06-23 17:42:24查看全文 >>

六六参与过的电视剧(六六的最新电视剧作品)

六六参与过的电视剧(六六的最新电视剧作品)

“我可以很骄傲地说,我睡过的每个男人都是我想睡的男人。”一、六六是谁​《王贵与安娜》《双面胶》《蜗居》《心术》《安家》等...

2023-06-23 17:46:13查看全文 >>

文档排行