|
|
|
|
移动端
创建专栏

C语言这么厉害,它自身又是用什么语言写的?

本文来源:http://www.133845.com/www_3gsc_com_cn/

申博官网下载直营网,其中新订单、生产量、从业人员、配送时间指数都出现了回升的态势。MSI微星用30年的时间创造了一个游戏本品牌为广大电竞玩家创造了一把利器!随着Intel酷睿第六代CPU的普及,咱们微星已经发布了一批又一批的六代CPU的专业游戏本,这次其中最引人注目的也是本次评测的主角GE626QD-1077XCN,作为刚刚发布的新品,不管是i7-6700HQ,还是大容量8GDDR4内存,亦或者是15.6寸IPS技术的屏幕,再或者是彩色背光键盘,最后连加上128G固态的价格居然和........差不多售价!!!!但是为何能以这如此具备性价比的价格登上舞台呢?是仇恨?是爱情?是。豌豆荚拥有超过200万个最新最全的安卓应用和安卓游戏免费下载资源,六年为全国4亿人提供全面的手机内容服务。  一体化整网承载:eLTE无线网络带宽可达百兆,配合有线网络,使设在东营市公安局的指挥中心,能够汇总遍布全线的高清视频监控,对各行进路线、各场所秩序进行实时掌控和应急处置。

他甚至打趣说“以后我的女儿要嫁人,我不看八字,但是要看男方的大数据,看他的健康云跟我女儿是否匹配。3.1995年-2012年,1995年游历欧洲回来的徐明,在管理层一致反对情况下,果断将实德向塑钢产业转型。【PConline资讯】相信很多喜欢联想的用户对于ZUK这个品牌很熟悉吧,做为联想旗下的品牌,ZUK一直也很给力。”第一科技技术股份有限公司经理黄炜盛说,“台湾物联网发展,开花结果量产化都在大陆。

不信大家可以试着观察一下:你有多久没有见过有人用的手机了?你又有多久没有见过人用的手机了?  今天我们就来盘点一下这些曾经历史辉煌,而今却又难得一见的一些品牌手机。据官方预计,2017年下半年投入使用后,这里将具备年产30颗卫星和200架无人机的生产能力。Ⅳ级(蓝色)预警由市环保局局长批准发布,Ⅲ级(黄色)预警由市政府分管副秘书长批准发布,Ⅱ级(橙色)预警由分管副市长批准发布,Ⅰ级(红色)预警由市长批准发布。  新系统确定使用以1开头的特种号码,让出以9开头的固话。

这是来自我的星球的一个提问:“C语言本身用什么语言写的?”换个角度来问,其实是:C语言在运行之前,得编译才行,那C语言的编译器从哪里来? 用什么语言来写的?如果是用C语言本身来写的,到底是先有蛋还是先有鸡?

作者:刘欣|2019-09-29 10:45

这是来自我的星球的一个提问:“C语言本身用什么语言写的?”

换个角度来问,其实是:C语言在运行之前,得编译才行,那C语言的编译器从哪里来? 用什么语言来写的?如果是用C语言本身来写的,到底是先有蛋还是先有鸡?

1

我们假设世界上不存在任何编译器, 先从机器语言说起,看看怎么办。

机器语言可以直接被CPU执行,不需要编译器。

然后是汇编语言, 汇编语言虽然只是机器语言的助记符,但是也需要编译成机器语言才能执行,没办法只能用机器语言来写这第一个编译器了(以后就不用了)。

汇编语言的问题解决了,就往前迈进了一大步,这时候就可以用汇编语言去写C语言的编译器,我们说这是C编译器的老祖宗。

有了这个老祖宗,就可以编译任意的C语言程序了,那是不是可以用C语言本身写一个编译器?只要用老祖宗编译一下就可以了。

OK, 这么一层层上来,终于得到了一个用C语言写的编译器, 真是够麻烦的。

到这个时候,之前那个汇编写的C语言编译器就可以抛弃了。

当然,如果在C语言之前,已经出现了别的高级语言,例如Pascal,那就可以用Pascal来写一个C语言的编译器。

第一个Pascal的编译器据说使用Fortran写的。而做为第一个高级语言的Fortran,它的编译器应该是汇编语言写的。

2

关于编译器,这里边有个有趣的传说:

传说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。

3

可能有人问:我用汇编写一段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 , 中文叫做自举。

【编辑推荐】

  1. 申博官网下载直营网一份十分完整的CPU 100%排查优化指南
  2. 华为方舟编译器做了些什么,让安卓有了“丝滑”的感觉 ?
  3. 一次性搞清楚线上CPU100%,频繁FullGC排查套路
  4. 从经典结构到改进方法,神经网络语言模型综述
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢
太阳网上娱乐登入 菲律宾太阳网上娱乐登入 www.88sbc.com 太阳城申博娱乐官网直营网 申博苹果手机下载登入 菲律宾太阳娱乐登入官网
www.shenbo3.com www.msc11.com www.yl3999.com 申博太阳城电脑客户端下载 www.sun8066.com www.tyc88.com
申博游戏登入 申博现金网怎么样 太阳城官方直营网登入 老虎机微信支付充值 太阳城申请提款登入 申博官网开户登入