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

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】

    推荐阅读
  • 香薰怎么做(怎么做好香薰)

    以下内容希望对你有帮助!香薰怎么做先拿出调配瓶、特调基础油、玫瑰精油,按基础油:玫瑰精油=3:1的比例,滴入空的调配瓶中,调配成可用来香薰的精油。调配好后,把香薰放置在平稳的水平桌面上。在香薰炉顶部凹槽里,添加三分之二的水。最好点燃香薰炉专用的小蜡烛,放到炉里即可。香气大小和房间面积、精油浓度、时间、环境温度有关。

  • 排气管冒白烟是怎么回事(车子排气管冒白烟的原因)

    下面更多详细答案一起来看看吧!

  • 油豆腐炒木耳怎么做(木耳炒油豆腐的步骤)

    下面希望有你要的答案,我们一起来看看吧!

  • 哪几种人不能吃百香果(哪类人不能吃百香果)

    肠胃消化不好人群百香果吃的时候要用调羹挖出里面的瓤包直接食用,会吃掉其中的果籽,而果籽中含有较多的木质纤维以及高蛋白成分,属于难消化的物质,如吃多了对于本身肠胃消化不好的人来说,会加重肠胃不适。糖尿病人百香果所含的糖分也比较高,100克百香果中含有11克以上的糖,属于含糖量较高的水果,这对血糖不稳定的糖尿病人来说是要忌食的,否则容易加重病情,影响康复。

  • 蒋昌建辩论赛什么水平(蒋昌建再现26年前辩坛风采)

    12岁的万海妍曾经参加编程比赛拿到第二名,并得到了支付宝的预约offer。她带来自己设计的电子游戏,让王孟秋和傅盛大感兴趣,当场对战起来。虽然蒋昌建一直称“编程猫”的“科技少年团”为“别人家的孩子”,但是蒋老师自己在学生时期也是标杆级的榜样人物。贝贝的爷爷81岁,奶奶77岁,老两口相濡以沫携手走过了56个年头。教育、家居和养老等只是代表,有温度的“暖科技”正在我们生活的每一处不断释放活力和魅力。

  • 2023年保定绿溪谷夜场几点开始 保定绿溪谷游乐园夜场有哪些项目

    地址:保定市阳光北大街和北二环交叉口植物园西北角交通指南:公交乘车:1.保定东站(高铁站):乘K1换乘105路,植物园北门下车即到。乐园坐落于保定市植物园西北角,园区将围绕欢乐、浪漫、刺激、童真、梦幻为元素设计打造,让每一位来到这里的游客都尽兴而归。绿溪谷乐园地点:保定市阳光北大街植物园西北角

  • 萝卜功效与作用及禁忌(萝卜有什么功效)

    以下内容希望对你有帮助!萝卜功效与作用及禁忌萝卜是十字花科萝卜属植物。具有消积祛痰,润肺生精,解毒利尿,止泻下气的功效。萝卜中含有的芥子油,淀粉酶和多种消化酵素。具有促进胃肠蠕动,增进食欲,抑制胃酸过多,帮助消化的作用。萝卜还有提高免疫力,抗氧化,改善肤质,消除便秘,预防动脉硬化和癌症的作用。但是,萝卜性寒,偏寒体质,脾胃虚弱和有慢性胃炎的人不宜多食。

  • 甘蔗变红了切掉还能不能吃 甘蔗变红了切掉还能不能吃了

    2、甘蔗发红因为其内部受到了有害细菌污染,虽然肉眼看不到,但在未发红的甘蔗中,也含有一定有害细菌,只是数量较少、时间太短,还未表现出发红症状,这样的甘蔗食用后对身体健康不利,不能继续食用。

  • word文档正确插入页码(在WORD文档插入页码的方法)

    以下内容大家不妨参考一二希望能帮到您!word文档正确插入页码在制作文档的时候,通常要在文档里添加页码,页码可以添加到页眉或是页脚,可以设置在页眉的左上角、中间或者右上角,同样在页脚的位置也是可以分三个地方设置,还可以设置页码的编号格式,或者页码的起始位置。在页眉添加页码后,可以移动鼠标到编号的前后添加文字内容,如“第X页,共X页”等等。弹出窗口,点击“编号格式”,下拉更换其他的编号格式。

  • 井柏然和付辛博什么关系(付辛博将接手张公案)

    当年井柏然勇夺冠军,付辛博则以季军成绩出道。总决赛当晚,华谊公司签下两人,表示要将两人打造成亚洲第一天团,BOBO组合由此而生。虽然,华谊最后为两人分别组建了团队,但过往的仇恨早已埋下,两边的粉丝各种骂战争吵不休。双方当事人就此事发文回应,希望粉丝放下成见,能够理智追星更好的生活。