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

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

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

机器语言可以直接被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】

    推荐阅读
  • 深蓝色花卉(你喜欢蓝色花卉吗)

    养护简单翠鸟的优势之三,长势旺盛。一次栽培,赏花多年修剪方面,翠鸟属于二、三类,冬眠结束后对植株进行修剪,老枝条强健就中度修剪,健康状况差就重剪,把枯萎的枝条都剪掉,只保留几节就行。

  • 秦组词和拼音(秦怎么组词)

    以下内容希望对你有帮助!秦组词和拼音秦艽[qínjiāo]又称“大叶龙胆”。龙胆科,多年生草本植物。根入药,有祛风湿、退虚热等作用。秦腔[qínqiāng]泛指北方用梆子腔演唱的剧种。秦篆[qínzhuàn]秦篆qínzhuàn见“小篆”。秦椒[qínjiāo]秦椒qínjiāo〈方〉∶细长的辣椒;即“花椒”。以产于秦地得名。

  • 体育课堂教学策略(体育教学方法策略)

    精准教学就是针对学生实际情况,非常准确地实施有目的的教学。这样的竞争氛围有利于学生体育竞技水平和意志的发挥。分组形式的调整应该结合学生实际练习进行调整,甚至是调换分组形式,目的就是顺利完成教学目标,实现精准教学的目的。

  • 捷豹路虎开启新营销模式(完善全球化管理体系)

    产品方面,路虎揽胜极光从2011年正式上市,到2015年国产上市至今,一度惊艳市场。今年7月,路虎揽胜极光再次进化,以全新路虎·揽胜极光L的姿态登陆中国市场。目前,极光L已在奇瑞捷豹路虎常熟生产基地投产。今年上半年,捷豹路虎在华销量实现同比增长,这印证了中国市场的无可取代。但同时,从营销老将马振山近期加入奇瑞捷豹路虎可见,奇瑞捷豹路虎的期望远不止于此。

  • 2023年巨蟹座全年运势详解(巨蟹座2023年运势剖析完好版)

    下面就一同看看巨蟹座在2023年的运势状况如何?事业运势2023年巨蟹座在事业方面的运势还是比拟理想的,主要表如今职场相对轻松一些,经过了过去两年的挤压和挣扎,你反倒是想通了,不会有那么多狗血遭遇,目的也愈加明晰了。不只如此,这一年他们也会开端涉足别的范畴,成果也还算不错。感情运势巨蟹座的人在感情方面不断都出于比拟慢热的状态,主要是由于他们的个性真实是太激进了。

  • 冬天吃银耳莲子汤好吗(冬天适合吃银耳莲子汤吗)

    冬天吃银耳莲子汤好吗可以吃,吃银耳汤是不分时间季节的,因为银耳一年四季都有,煮成汤是可以的,炒菜的也是可以的。喝银耳莲子汤的好处1、银耳富有天然特性胶质,加上它的滋阴作用,长期服用可以润肤,并有祛除脸部黄褐斑、雀斑的功效。不过寒性体质者不宜长期服用。

  • 迎元旦庆新年广告词(迎元旦庆新年广告词介绍)

    下面内容希望能帮助到你,我们来一起看看吧!迎元旦庆新年广告词元旦有惊喜,优惠乐翻天。元旦到了,XX送欢喜。四海祥云降福来,新年豪礼送不停。张灯结彩欢度佳节,齐心协力共创伟业。新年好,欢迎光临XX超市。祝您新年快乐,身体安康,笑口常开。一元复始,旦复旦兮。欢度春节,祝福万家。狂购风暴,圣诞元旦先下手为强。魅力龙年,惊喜连连。文明的城市、欢庆的佳节,美好的生活。

  • 清明节人们会有这些习俗(这些清明节的文化习俗)

    人们为防止鬼的侵扰迫害,而插柳戴柳。五代时李邺于宫中作纸鸢,引线采风为对、后于鸢首以竹为笛,风入笛管发出悦耳之声,好似“筝”鸣,俗称风筝。过去,有的人把风筝放上蓝天后,便剪断牵线,任凭清风把它们送往天涯海角,据说这样能除病消灾,给自己带来好运。据《说苑》记载,相传为黄帝发明,目的是用来训练武士。唐宋时出现蹴鞠的专门组织球会“圆社”。

  • 电脑出厂日期怎么查(电脑出厂日期的查询步骤)

    下面内容希望能帮助到你,我们来一起看看吧!电脑出厂日期怎么查首先,我们找到电脑里面左下角的搜索框。输入完毕之后,我们直接按回车键;然后会弹出命令提示符。输入systeminfo之后,我们直接按回车键;然后我们滑动页面即可找到版本出厂日期。

  • 油焖虾最简单的做法(好吃下饭的家常简单版红焖虾)

    By30姐姐对虾16只,我来为大家科普一下关于油焖虾最简单的做法?因为之前有料酒腌制,所以锅不会干。对虾的饮食禁忌虾忌与某些水果同吃。虾含有比较丰富的蛋白质和钙等营养物质。如果把它们与含有鞣酸的水果,如葡萄、石榴、山楂、柿子等同食,不仅会降低蛋白质的营养价值,而且鞣酸和钙离子结合形成不溶性结合物刺激肠胃,引起人体不适,出现呕吐、头晕、恶心和腹痛腹泻等症状。海鲜与这些水果同吃至少应间隔2小时。