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

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】

    推荐阅读
  • 怎样用荷叶减肥(用荷叶减肥方法)

    下面更多详细答案一起来看看吧!怎样用荷叶减肥荷叶有一定的利尿消肿的作用,同时也有一定的润肠通便的作用,对减肥有一定的辅助治疗作用。平时可以用一些荷叶泡茶进行服用,可以每天冲泡三四包然后分3~4次喝完,注意要达到减肥的效果荷叶茶必须要浓一些而且最好是空腹进行应用。在饭前进行喝下,如果有脾胃虚弱的患者尽量还是减少应用,重要的还是合理控制饮食加强运动锻炼进行减肥。

  • 蚬干怎么洗(蚬子干怎么清洗)

    下面希望有你要的答案,我们一起来看看吧!蚬干怎么洗将蚬子干用清水洗净,然后放在热水中浸泡一两个小时至涨发,捞出后用清水洗净。摘去蚬子干中心带毛的黑色肠胃,褪去沙粒,在清水中再冲洗一遍。清洗蚬子干时需注意,蚬子干里有一块“黑色的东西”,这是蚬子干的“膏”或“黄”,清洗时注意不要弄碎,以免造成营养损失。所有的蚬子干处理完毕后,用清水洗净一次,就可以待用了。

  • 出生入死演员表(出生入死有哪些演员)

    下面希望有你要的答案,我们一起来看看吧!出生入死演员表《出生入死》是1990年上映的中国悬疑电影,由徐庆东执导,王旭、胡梅、陆剑民、贾宏声等主演。《出生入死》讲述了新任专案组组长宁小于,屡次遭到犯罪分子的打击报复。宁小于周密部署,只身闯入饭店调查罪犯的后台大人物。最后宁小于和国家安全人员在武警配合下,将犯罪分子一网打尽。

  • 2022韶关南雄市实验小学招生划片区域是哪里?

    小编为大家整理了2022年韶关南雄市实验小学一年级招生划片区域,详细划片范围见下文。

  • 金川世外梨园风景区红叶最佳观赏期 金川世外梨园景区导游图

    金川世外梨园风景区红叶最佳观赏期大致在每年11月中旬。世外梨园风景区位于大金川河谷地带,是全国闻名的雪梨产区,素有“中国雪梨之乡”美名。这里有雪域高原规模最大的梨花红叶奇景,2014年11月在农业部评选出的140个“中国美丽田园”中,金川县梨花和红叶景观双双上榜,因此也成为全国唯一一个双景入榜的“中国美丽田园”。

  • 第一座大型水电站叫什么名字(它是什么时候完工的)

    第一座大型水电站叫什么名字?以下内容大家不妨参考一二希望能帮到您!三峡工程全称为长江三峡水利枢纽工程,又称三峡工程。中国湖北省宜昌市境内的长江西陵峡段,与下游的葛洲坝水电站构成梯级电站。三峡水电站是世界上规模最大的水电站,也是中国有史以来建设最大型的工程项目。三峡水电站1992年获得中国全国人民代表大会批准建设,1994年正式动工兴建,2003年六月一日下午开始蓄水发电,于2009年全部完工。

  • 泥融飞燕子沙暖睡鸳鸯是什么修辞手法(泥融飞燕子沙暖睡鸳鸯运用的手法是?)

    以下内容大家不妨参考一二希望能帮到您!泥融飞燕子沙暖睡鸳鸯是什么修辞手法泥融飞燕子,沙暖睡鸳鸯用了对偶的修辞手法。江山沐浴着春光,多么秀丽,春风送来花草的芳香。燕子衔着湿泥忙筑巢,暖和的沙子上睡着成双成对的鸳鸯。江水碧波浩荡,衬托水鸟雪白羽毛,山峦郁郁苍苍,红花相映,便要燃烧。今年春天眼看就要过去,何年何月才是我归乡的日期?

  • 橄榄油有降血脂的功效吗(橄榄油可以降血脂吗)

    由于橄榄油营养成分丰富、保健功能突出而被公认为绿色保健食用油,在西方有“植物油皇后”“液体黄金”之美称。橄榄油中的单不饱和脂肪酸(油酸)含量高达70%以上,是所有植物油中最高的。单不饱和脂肪酸可以降低低密度脂蛋白胆固醇,而维持高密度脂蛋白胆固醇,易于被人体吸收,不易氧化沉积在人体心血管壁上。

  • 酷暑高温下劳动者湿透(仓库里没风扇没空调)

    酷暑高温下劳动者湿透被高温击倒的暑期工郭腾旭倒在了下班后的第6分钟。医生尝试挽救他的生命,但并未奏效。医院出具的“死亡医学证明书”显示:郭腾旭死亡原因为“热射病”。但在责任认定上,三方存在争议。应当在高温工作环境设立休息场所。休息场所应当设有座椅,保持通风良好或者配有空调等防暑降温设施。秦凡也并未在仓库注意到WGBT指数仪或相关测温仪器的存在。

  • 鱼头豆腐汤会胖吗(鱼头豆腐汤会发胖吗)

    在炖鱼头豆腐汤的时候,想要汤色变得奶白色,一般要加入足够的食用油,因为食用油和鱼头中的蛋白质混合才会形成奶白色悬浮液,令鱼汤显示出奶白色。鱼头豆腐汤中主要的食材为鱼头、豆腐、植物油。在减肥期间,更建议吃鱼肉、鱼头肉,而不是喝鱼头豆腐汤。鱼肉、鱼头肉中富含蛋白质、氨基酸,脂肪含量更低,营养价值比鱼头汤更高。