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

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】

    推荐阅读
  • 农机合作社需要多少农机,附注册条件

    2015年,临泉县农业农村局发布的农机专业合作社基本条件中,明确要求:社员在50个以上,农民占总数的80%以上,操作人员持证上岗率100%,农业机械拥有量、动力机械及收获机械50台以上,农业机械原值300万元以上,办公、培训用房150平方米以上,有必要的办公设施,机库棚500平方米以上。除此之外,农机合作社应当建立社员名册,成员中80%以上要求为农民。

  • 储电难点在哪里(三年后风光储平均度电成本将具备更强市场竞争力)

    储电难点在哪里澎湃财讯全球绿色能源理事会主席、协鑫集团董事长朱共山9月1日在太原能源低碳发展论坛上表示,去年至今,燃料价格暴涨,5000大卡的煤炭在江苏的到岸价一度高达1200元/吨,煤电成本接近5毛钱,天然气价格最高时接近8块钱每方,燃气发电成本在6毛5左右,而光伏电力均价在3毛5左右。

  • 白嘴山药是面的还是脆的(白嘴山药是面的还是脆的好吃)

    2、白嘴山药的口感是比较偏面一些的,小白嘴山药其中含有的丰富的粘液,断面之后拉丝丰富,主要是甘露聚糖与黏蛋白融合而成的,营养价值高,饱腹感强,所以口感会偏面一点。

  • lv官网限定款是什么意思(LV产品标志形似字母)

    北京时间3月22日,LV在社交平台发布其高级珠宝系列LVVolt饰品的新广告,因饰品上的标志设计形似字母“Z”而引发争议,有网民质疑该品牌在俄乌冲突中“支持俄罗斯”。而同一系列LVVolt中的类似设计,该品牌2020年7月就发布过。当地时间3月5日,LVMH跟风宣布退出俄罗斯市场,关闭当地门店,线上商城也停止运营。除了LVMH,爱马仕、卡地亚、Gucci母公司开云集团,香奈儿、耐克等均宣布暂停在俄罗斯的业务。

  • 真丝围巾怎么洗(真丝围巾如何洗)

    真丝围巾怎么洗清洗真丝围巾时,要将其浸泡在温水中,并加入洗衣粉,等待十分钟后使用双手轻柔,洗去污渍即可,清洗干净的真丝围巾,要折叠并挤干水分,然后平铺放在通风处晾干,注意清洗的过程中,不宜使用热水,以免烫伤围巾。清洗真丝围巾时,不能使用机洗、干洗的方法,最好手洗,而且在清洗前,要将真丝围巾浸泡在含有中性洗衣粉的温水中,浸泡十分钟后,使用双手轻轻揉搓,就能将其清洗干净。

  • 奶粉过期了怎么办会有什么影响(学会这招再也不用担心了)

    开封后,请于一个月内食用完毕的,并强调了将盖子盖紧放置于阴凉干燥处,不可将潮湿的量勺放回奶粉罐中,防止吸潮及异物进入。保质期二:开封以后奶粉的保质期一般是指1个月内。因为奶粉开封后超过1个月,就容易变质、容易受潮,且营养流失等,所以奶粉开封后一定要在1个月内吃完。

  • 乌鸡汤放什么补气补血(乌鸡汤放哪些东西补气补血)

    下面希望有你要的答案,我们一起来看看吧!乌鸡汤放什么补气补血乌鸡汤中放入补气的黄芪,补血的当归后,补气血的功效将会增强。乌鸡本身就富含丰富的蛋白质,矿物质,维生素成分,具有较好的补气养血功效,配黄芪和当归后,不但能大补气血,还能调经,改善贫血,纠正虚弱的体质,是食疗保健的佳品。乌鸡还可以搭配大补元气的红参,以及平补脾气,养血的党参,以及补血活血的川芎,熟地等一起炖,同样可以增强补气补血的作用。

  • 3岁幼童跳舞表演(吉林一女子背宝宝玩跳舞机)

    近日,吉林长春,一名女子背着宝宝在胸前玩跳舞机,整个动作行云流水,路人纷纷驻足围观佩服不已,宝宝跳的才是最卖力得。视频中,商场内一名女子胸前背着一个宝宝,只见她熟练的站在跳舞机上边,在音乐响起时,女子疯狂地晃动着身体,宝宝同样非常的兴奋,而女子的行为也引得路人纷纷围观,但是该女子丝毫没有受到影响。

  • 石家庄燃气自闭阀是强制安装的吗(石家庄一小区安装燃气自闭阀引热议)

    对于这一通知,居民观点不一,有的认为“太强制”,还有居民则认为“安全第一”。对方表示,若业主自己安装,安装好通过燃气公司验收即可。在现场允许情况下,切断距离着火点最近的燃气控制阀门,防止发生次生灾害。

  • 一碗白粥的热量是多少(一碗粥含多少卡路里)

    一碗白粥的热量是多少一碗白米粥的热量取决于碗的大小,米的用量是多少。一般来讲,25克大米可以做成一小碗的粥,产生约90千卡的热量。食物的热量通常取决于食物的种类、食物的质量以及烹调食物的方法。