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

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

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

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

    推荐阅读
  • 我的世界怎样养猪(我的世界养猪的方法)

    我的世界怎样养猪可以先找带水的空地,这样可以种小麦、马铃薯、红萝卜等等食物。在里,创造围栏和围栏门。简单的搭建猪圈,在猪圈旁边种小麦、马铃薯等。准备土豆,因为马铃薯是猪的食物。吸引到猪圈外边,打开猪圈的门,把它们吸引进入猪圈,记得关门哦,不然它们会跑出去,不然就圈养不了。如果你吸引了两只,那么在猪圈当中喂养它们两个,把马铃薯对着猪,会出现,点击就可以喂养了。玩到天亮了,猪后,猪的身边发出爱心。

  • 如何更换照片的底色(怎样更换照片的底色)

    下面更多详细答案一起来看看吧!如何更换照片的底色工具/原料:excel软件,PC。点击格式,选择删除背景。选择标记要保留的区域进行选择,选择标记要删除的区域进行精确调整。点击开始,点击填充所需要背景的颜色,比如红色。最后就是保存照片了。点击右键进行照片复制,在QQ或者其它软件聊天界面进行粘贴,然后另存为就OK了。

  • 女人梦见青蛙好不好(女人梦见青蛙梦境解析)

    女人梦见青蛙好不好出行的女人梦见青蛙,建议如期出发吉。怀孕的女人梦见青蛙,预示生男,冬占生女,慎防动胎气。恋爱中的女人梦见青蛙,说明互相忍让勿争躁,有希望合婚。本命年的女人梦见青蛙,意味着虽然运不顺,可遇贵人扶助,得财得福。做生意的女人梦见青蛙,代表勿过疲劳,进财而身体欠安。准备考试的女人梦见青蛙,意味着不能录取理想的学校,等以后再来。创业的女人梦见青蛙,代表经营缓慢但有进步,宜好把握,终有财利。

  • 铠甲勇士中最强的铠甲勇士(铠甲勇士官方一蹶不振)

    铠甲勇士官方一蹶不振铠甲勇士大家一定并不陌生,这部国产特摄剧可以说大陆内唯一一部得到观众认可的特摄剧​​大陆内的特摄剧水平一直不高,并且多次滑落成为了笑柄《铠甲勇士》系列特摄剧背负的太多太多,之后推出的特摄剧并不用心,官。

  • 中山火炬开发区60岁以上老年人新冠疫苗接种预约指引

    以下信息已过期,不再更新!完成接种后同样到通知的集中点乘坐免费专车返回。

  • 正宗山东鲁菜代表(山东最经典的10道鲁菜)

    山东最经典的10道鲁菜山东号称齐鲁大地,简称鲁,所以山东菜也被称为鲁菜,鲁菜分为分为济南菜和胶东菜,济南菜擅长陆珍,胶东菜擅长海味中国美食文化博大精深,以前,是四大菜系,分为鲁菜、川菜、粤菜、苏菜、后来慢慢细分,增加了湘菜。

  • 清淡饮食的正确方法(怎样做到清淡饮食)

    清淡饮食要学会少吃盐炒菜时盐不要放得太多腌制品,烧烤食品,加工食品等所有含盐分高的食品都要节制的摄入,我来为大家科普一下关于清淡饮食的正确方法?腌制品,烧烤食品,加工食品等所有含盐分高的食品都要节制的摄入。控油也是清淡饮食的一个标准。餐桌上的蔬菜应占三分之二。以保证获得足够的热量和能量满足身体各项生理活动的需要。辣椒,各种香料的摄取最好尽可能的少,以减少对身体的刺激。

  • 孕妇羊水少怎么补 孕妇羊水少怎么补回来

    羊水过少注意补铁部分孕妇羊水偏少是母体自身血容量不足所致,所以除了要加大自己饮水量和次数外,还要注重进行铁质元素的补充。羊水过少食疗羊水过少的孕妇应多喝清补、补血汤,不但有利于增加血容量,补充羊水,而且能调理孕妇气血。

  • 爱探险的朵拉诡异之处(爱探险的朵拉里面为什么必须要有一个捣蛋鬼狐狸)

    《爱探险的朵拉》也是学龄前幼儿英语动画领域备受推崇的典范。朵拉与朋友们在一起这些情节的设置,对孩子们来说都是难得的学习和快乐的体验过程。在这方面,不得不说国外动画片相对来说拿捏的更加准确,《爱探险的朵拉》在判断小朋友需要的探险难度上也表现的相当出色。之后,朵拉和小伙伴们会想办法解决捣蛋鬼带来的难题,并最终迎来真正的胜利。这正是《爱探险的朵拉》的一大魅力!

  • 近视眼看绿色植物有用吗(近视的人老了眼不会花)

    美瞳属于硬性角膜接触镜,透氧性差,长时间佩戴容易导致眼睛缺氧,并损害角膜。此外,佩戴美瞳还可能会导致眼球过敏,并有掉色风险。还有一部分人群,对化妆品过敏,有过敏性结膜炎的风险。专家提示65岁之前,老花镜需要每年定期验配更换。65岁之后,老花眼度数一般变化不大,但需要定期检查眼睛,排除眼病。全国党媒信息公共平台提供信息发布传播服务。