语言这么厉害它自身又是用什么语言写的
这是来自我的星球的一个提问:C语言本身用什么语言写的?
换个角度来问,其实是:C语言在运行之前,得编译才行,那C语言的编译器从哪里来?用什么语言来写的?如果是用C语言本身来写的,到底是先有蛋还是先有鸡?
我们假设世界上不存在任何编译器,先从机器语言说起,看看怎么办。
机器语言可以直接被CPU执行,不需要编译器。
然后是汇编语言,汇编语言虽然只是机器语言的助记符,但是也需要编译成机器语言才能执行,没办法只能用机器语言来写这第一个编译器了(以后就不用了)。
汇编语言的问题解决了,就往前迈进了一大步,这时候就可以用汇编语言去写C语言的编译器,我们说这是C编译器的老祖宗。
有了这个老祖宗,就可以编译任意的C语言程序了,那是不是可以用C语言本身写一个编译器?只要用老祖宗编译一下就可以了。
OK,这么一层层上来,终于得到了一个用C语言写的编译器,真是够麻烦的。
到这个时候,之前那个汇编写的C语言编译器就可以抛弃了。
当然,如果在C语言之前,已经出现了别的高级语言,例如Pascal,那就可以用Pascal来写一个C语言的编译器。
第一个Pascal的编译器据说使用Fortran写的。而做为第一个高级语言的Fortran,它的编译器应该是汇编语言写的。
关于编译器,这里边有个有趣的传说:
传说Unix发明人之一的KenThompson在贝尔实验室,大摇大摆的走到任何一台Unix机器前,输入自己的用户名和密码,就能以root的方式登录!
贝尔实验室人才济济,另外一些大牛发誓要把这个漏洞找出来,他们通读了Unix的C源码,终于找到了登录的后门,清理后门以后编译Unix,运行,可是Thompson还是能够登录进去。
有人觉得可能是编译器中有问题,在编译Unix的时候植入了后门,于是他们又用C语言重新写了一个编译器,用新的编译器再次编译了Unix,这下总算天下太平了吧。
可是仍然不管用,Thompson依然可以用root登录,真是让人崩溃!
后来Thompson本人解开了秘密,是第一个C语言编译器有问题,这个编译器在编译Unix源码的时候,当然会植入后门,这还不够,更牛的是,如果你用C语言写了一个新编译器,肯定也需要编译成二进制代码啊,用什么来编译,只有用Thompson写的那第一个编译器来编译,好了,你写的这个编译器就会被污染了,你的编译器再去编译Unix,也会植入后门:)
说到这里我就想起了几年前的XcodeGhost事件,简单来说就是在Xcode(非官方渠道下载的)中植入了木马,这样XCode编译出的iosapp都被污染了,这些app就可以被黑客利用做非法之事。
虽然这个XCodeGhost和Thompson的后面相比差得远,但是提醒我们,下载软件的时候要走正规渠道,从官方网站下载,认准网站的HTTPS标准,甚至可以验证一下checksum。
3:hr可能有人问:我用汇编写一段HelloWorld都很麻烦,居然有人可以用它写复杂的编译器?这可能吗?
当然可能,在开发第一代Unix的时候,连C语言都没有,KenThompson和DennisRitchie可是用汇编一行行把Unix敲出来的。WPS第一版是求伯君用汇编写出来的,TurboPascal的编译器也是Anders用汇编写出来的,大神们的能力不是普通人能想象得到的。
对于编译器来说,还可以采用滚雪球的方式来开发:
还是以C语言为例,第一个版本可以先选择C语言的一个子集,例如只支持基本的数据类型,流程控制语句,函数调用。。。。。。我们把这个子集称为C0。
然后用汇编语言写个编译器,只搞定这个语言的子集C0,这样写起来就容易不少。
C0这个语言可以工作了,然后我们扩展这个子集,例如添加struct,指针。。。。。。,把新的语言称为C1。
那C1这个语言的编译器由谁来写?自然是C0。
等到C1可以工作了,再次扩展语言特性,用C1写编译器,得到C2。
然后是C3,C4。。。。。。最后得到完整的C语言。
这个过程被称为bootstraping,中文叫做自举。
宝宝衣服拉链磨下巴对于学步前的宝宝来说,大多数的时间是抱在大人怀里的。衣服领子靠近下巴的地方如果不够柔软的话就很容易戳下巴,也容易起布疹。那么宝宝衣服拉链磨下巴怎么办呢?劣质童装的危害大吗?下面……
睡眠对孩子很重要你家孩子睡的够吗睡眠对每个人都很重要,不过由于儿童处在快速生长发育阶段,睡眠的影响会更加明显。那么睡眠对孩子很重要你家孩子睡的够吗?就让本站的小编和您一起去了解一下吧!那睡眠对儿童为什么……
安全期怀孕的原因有的人想当然的以为安全期就不会怀孕。其实危险期和安全期只是相对的,而不是绝对的。尤其是月经周期不规律的妇女,安全期是危险期是很难界定的。所以,如果没有生孩子的需要,无论在什么时……
超市小票换发票期限是多久一些消费场所给消费者出示的消费小票上经常会注明发票换取期限,那么超市小票换发票期限是多久呢?下面就一起随本站小编来了解一下吧。其实专家称,作为消费者的你,可不要被这提示忽……
心理创伤对老人健康有哪些影响高龄老人,甚至会出现因担心死亡将至而胡乱求医用药的情况。若再加上疾病,有些老年人就会产生忧愁、烦恼、恐惧心理,那老年人常见的心理问题有哪些呢?人进入老年后,生理机能慢慢出现变化……
老人怎么缓解自己的怒气老人发怒不仅伤身,还容易和子女产生矛盾,给自己和家人都带来了不小的影响,因此老人要想办法缓解自己的怒气,保持愉快的心情。那么老人怎么缓解自己的怒气呢?1、至少要有一种爱好……
老年人秋季饮食需要注意这五个点虽然天气还很热,但是立秋已有一段时间,中国人讲究养生,不同的季节持不同的食物,特别是老年人,根据季节饮食对于强身健体,修身养性有很重要的意义。下面大家一起来看看老年人秋季饮食需……
常喝浓茶的老人睡眠质量会更差老人失眠是一个生活中常见的现象,也是一种病理性现象,人们常说人到老年睡得少。有些老人夜夜难眠,原因却非衰老,而是不讲究睡眠卫生。睡眠医学专家指出,常喝浓茶的老人睡眠质量会更差。……
山楂的吃法及功效山楂配一宝降脂减肥快山楂的吃法及功效山楂又称山里红,味酸、甘,性微温,归脾、胃、肝经。山楂的中医功效主要有三个方面:消食积,散瘀血,驱绦虫。常用于治疗肉食积滞、小儿乳食停滞、胃脘胀满、泻痢腹……
空中怪车事件是否真的存在外星人和外星人是否存在一直是人类研究的问题,科学家推测,如果有外星人存在,也会通过太空飞船这种手段登陆地球,而在贵阳就发生了一起空中怪车事件,景象仿佛外星飞船来临一般,周边树木连根拔起……
破衣门事件女主张永歆巨乳张永歆三级露乳晕破衣门的主人公是张永歆。在2014年的时候张永歆在奥林匹克森林公园秀跳绳技术,没想到正在跳的过程中上衣扣子裂开了一半,走光了。大家都知道张永歆是有E神之称的胸部,这可让很多粉丝……
发财树怎么养新手也能轻松养殖的详细教程新手快速上发财树这个名字,就受到不少生意人的钟爱,谁不想发财呢?那么这个发财树怎么养呢?作为一种盆栽植物,还是需要细心照料的,毕竟没有大自然的环境更适合它,而且作为一株发财树,只有将它将……
花椒水泡脚的副作用有哪些泡脚有着很多好处,不仅可以放松身心,还可以起到清除脚臭的作用,尤其是使用药材来泡水,很多女性会选择花椒泡脚或者是艾叶泡脚,但是这样的泡脚方式真的没有副作用吗?那么花椒水泡脚的副……
蛇为什么不能托运我们知道,在物流托运中,宠物托运也是其中一种。不过宠物托运流程要求相对是比较高的,规定也比较多,那么蛇为什么不能托运呢?下面就一起随本站小编来了解一下吧。一般情况下国内是……
这些异常的心理状态和情绪你有吗这些异常的心理状态和情绪,让用户在社会化媒体中出现了很多非理性行为。这些异常的心理状态和情绪你有吗?下面就跟着本站小编一起来看一下吧!诚然,SNS的出现对于很多人来说是件……
牙齿背后有哪些健康秘密牙齿是我们身体中很重要的器官和部位,它影响着全身器官的正常动作,同时,它也是我们身体健康问题的表现部位之一,下面来看看牙齿背后有哪些健康秘密吧?1、台前表象:牙齿肿痛幕后……
作物溃疡病怎么治植物溃疡病是植物种植中的一大痛点,难防治,反复发作是溃疡病防治常见的问题。果树一旦染病,将会终身带病,这也是不好治的原因之一,那么作物溃疡病怎么治呢?下面就一起随本站小编来了解……
废旧电线电缆剥皮机操作废旧电线电缆可以充分利用,有专用工具分离金属和绝缘材料,金属可以无污染的利用,塑料,橡胶也可以回收利用,并且做到无污染的充分利用。那么废旧电线电缆剥皮机如何操作呢?接下来本站来……
妈妈注意不可乱给孩子服用保健品保健品毕竟不同于普通食品。功效强大的同时,副作用也是随着水涨船高,因此服用保健品也有必须注意的事项。下面小编就讲讲服用保健品需要注意些什么?服用保健品注意事项维生素……
艾叶可以除螨吗艾叶对螨虫并无灭杀作用艾叶可以除螨吗艾叶没有灭杀螨虫的功效,但是却可以驱除螨虫。螨虫大量寄居于床垫、衣柜、被褥之中,是一种危害特别大却肉眼难见的微小生物,艾叶能用来驱除螨虫主要是因为艾叶……
说谎的代价一家人周末开私家车去游玩。爸爸教育儿子:周末带你好好玩,上学的时候就要认真读书。儿子大声地说:我知道,我是学校里最认真学习的。爸爸说:如果你贪玩,我知道了,我……
世界最高长颈鹿最高的一个达米长颈鹿并不是哑巴长颈鹿我们都知道是一种非常高的动物,其长脖子更是最出名了,最长可达3米多,也是目前世界上身高最高的动物,那么你知道世界最高长颈鹿有多高吗?知道答案的已经开始怀疑人生了,最高的一……
棉服十大品牌排行榜棉服哪个牌子好棉服,现在已经进入动季了,天气也开始慢慢的变得冷的起来了,那么在这个好冷的冬季你想好穿什么样的棉服了吗,有没有自己特别中意的一个棉服呢?有的话看看这有没有自己喜欢的,如果没有的……
三打白骨精孙悟空将白骨精一棒打死,唐僧就念起了紧箍咒。孙悟空:师傅,徒儿打死的是妖精,你怎么又念咒了?唐僧:你这泼猴,这白骨精都已经和为师说好了,等为师取经回来她就嫁给我,如今你却……