为什么不用纯c语言写系统,操作系统是C语言写的,那么问题来了

编译器是想滚雪球一样滚出来的,一开始用机器语言写一个很功能有限的汇编器(汇编接近机器语言,几乎就是简单的替换,比较好写),然后用它编译更强大的汇编器/编译器。更高级的语言由稍微低级点的语言编写,然后发展到合适的程度之后,某些语言实现了自举,即自己编译自己的编译器。

编译的结果是二进制文件,二进制文件其实是和系统关系并没有那么大,只是一个内存的镜像。具体的Windows或者Linux之间不同的只是封装格式PE/EFI的区别,这些信息只是用来告诉系统该怎么加载这个镜像而已,自己写一个操作系统来加载RAW内存镜像,这样的程序也是可以运行的。如果一个程序没有用系统提供的API,能够直接访问硬件中断的话就和系统无关了。不过现在的系统都有保护,不允许直接调用硬件中断,都是调用系统的API,系统再调用硬件,来执行。

不同语言不仅仅是语法不同,编译结果的执行方式也是不一样的。Java编译结果是字节码,要在Java虚拟机里再解释编译成Java虚拟机的字节码来运行。有些程序类似Go有runtime的概念,能够在运行时自省修改自己。lisp这种语言甚至数据和程序都不区分,数据就是程序。

不过在微观的看,这些都只是运行方式/实现方式不同,但是运行过程都是一样的,这是冯诺依曼体系决定的,即CPU永远执行内存中下一条指令。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值