肥宅钓鱼网
当前位置: 首页 钓鱼百科

c语言属于什么类型的编程语言(C语言这么厉害它自身是用什么语言写的)

时间:2023-08-08 作者: 小编 阅读量: 2 栏目名: 钓鱼百科

机器语言可以直接被CPU执行,不需要编译器。OK,这么一层层上来,终于得到了一个用C语言写的编译器,真是够麻烦的。到这个时候,之前那个汇编写的C语言编译器就可以抛弃了。第一个Pascal的编译器据说使用Fortran写的。可是仍然不管用,Thompson依然可以用root登录,真是让人崩溃!这个过程被称为bootstraping,中文叫做自举。

作者 | 刘欣

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

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

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

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

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

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

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

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

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

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

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

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

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

传说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。

可能有人问:我用汇编写一段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】

    推荐阅读
  • 老人需要吃氨糖和补钙吗(中老年人是补钙好)

    氨糖是形成软骨细胞的重要营养素之一,也是软骨基质和关节液的基本成分,对于人体并没有毒副作用。哺乳期女性在哺乳过程中会流失大量的钙,所以孕期及哺乳期女性也需要关注钙剂的补充。对于绝经后女性及50岁以上男性需要补钙。氨糖对于关节的磨损有修复作用,所以一般都会建议患有骨关节疾病的患者补充氨糖。空腹服用钙片会对肠胃造成刺激,如果长期空腹食用钙片,更容易出现肠胃疾病。

  • 西红柿杀虫需要什么药(西红柿杀菌用什么药)

    西红柿若染上了蚜虫,可用10%吡虫啉可湿性粉剂2000-3000倍液、10%除尽悬浮剂2000倍液喷施。若染上了棉铃虫,可喷洒20%杀灭菊酯乳油2000-4000倍液、80%敌百虫可溶性粉剂1000倍液等。若染上了美洲斑潜蝇,可用1.8%虫螨克3000倍液、48%乐斯本乳油1000倍液。

  • 清蒸甲鱼最正宗的做法(清蒸甲鱼最正宗的制作方法)

    清蒸甲鱼最正宗的做法材料:甲鱼1只,香菇50克,鸡肉100克,火腿肉50克,冬笋50克,油菜20克,香菜3棵,生姜1小块。将鸡肉洗净剁成肉茸;香菇洗净撕成大块;冬笋、火腿切成片;葱、姜洗净后分别切成段和片。取一汤碗加入甲鱼肉、葱段、姜片、高汤,入蒸锅蒸50分钟取出。最后把鸡茸倒入甲鱼汤内,烧开后即可。

  • 风云突变的意思和造句(风云突变是什么意思)

    接下来我们就一起去研究一下吧!风云突变的意思和造句意思:风和云一下子变了模样,比喻局势突然发生了巨大变化。海湾战争似乎平息了,不料风云突变,美国又开始轰炸伊拉克。在世界局势风云突变的年代里,中国应坚定不移地走自己的路。风云突变,日本军国主义偷袭珍珠港,太平洋战争爆发了。

  • 农家种田文推荐(农家的种田生活)

    78年可没有保护动物这一说,吃了就吃了,别说天鹅老虎打死各家分肉。说实话,南志强活了大半辈子,在这个社会上也算是混了几十年,在识人这方面自认为还有一定的眼力。第二天一早,李君阁起来将头天的鸡汤从冰箱里端出来重新烧起,又泡发了一盆粉丝,然后洗漱。看样子今年要多留一些种了。被自己的能量改造过几遍以后,估计产量会越来越高。这种情况一发生时,脑中闪过秦瑶的身影,李青云顿时释然,明白了很多事情。

  • 冬瓜烧排骨的家常做法(冬瓜烧排骨的家常做法步骤)

    以下内容希望对你有帮助!冬瓜烧排骨的家常做法准备用料。排骨洗净剁成段。煮好后捞出控干水分。冬瓜去皮洗净,切成厚一点的片。锅里倒油热后,放排骨和姜片翻炒。排骨炖到八成烂时,下入冬瓜炖熟。放入盐、味精、白糖、胡椒粉、葱花搅拌均匀即可。

  • 早安心语朋友圈必点赞句子(高情商早安句子)

    高情商早安句子愿自己所得皆所期,所失皆无碍早安!生活是自己的,怎么舒服怎么来早安!对明天的最好的准备,就是今天尽力而为早安!别缠着往事不肯走,别赖着曾经不放手早安!生命只有一次要么成就要么将就早安!任何事情,终有答。

  • 北京画室排名前十是哪家(北京画室排名前十位有哪些)

    北京画室排名前十是哪家对于艺术专业的学生来说,北京十大画室是实力的象征和声誉的象征。要区分北京十大画室并不容易。这已经成为艺术系学生非常关注的话题。要筛选出北京十大画室,需要花费很多精力。北京周达画室该画室的核心教学和研究团队汇聚了中央美术学院,清华美术学院和国家重点美术学校的教授,研究生和本科生。无论它是否位居北京十大知名画室,它是否拥有最强大的美术培训资源。

  • 赠人玫瑰手留香(赠人玫瑰手有余香)

    因为送人玫瑰,手有余香;助人者,人恒助之!这对老夫妇听后非常感动,表示绝不嫌弃,并万分感谢地接受了服务员的好意。值得一提的是,当我失业找不到合适工作时,又是钟锋钟主任主动给我打开了绿色通道,毫不犹豫决定返聘我到他军志办去协助编辑文稿。更加令人痛心疾首的是,那些款项全部是借助另外一个老乡先期投入的。目前已住五年补贴60000元了。这就是,赠人玫瑰手有余香的善果。

  • 郭富城是不是四大天王最帅的(郭富城追星成功是怎么回事)

    郭富城是不是四大天王最帅的[海峡网]说到追星,明星追明星也是不例外的。这不,12月17日,郭富城追星成功了,我们都知道,郭富城是香港的四大天王之一,他的影响力可不是一般的大,要说他追星,很多人可能都不太相信,但事实就是真的!就在12月16日,首届海南岛国际电影节闭幕式上,郭富城与约翰尼·德普“执手相望”,向德普脱口而出了“Iloveyou”表示了自己的兴奋与敬佩。