首先上结论:

(1)不是所有的编程语言都要先编译成C

(2)甚至有编程语言连编译成汇编这一步都跳过了。

(3)不是所有的编程语言都需要编译,有的是纯解释型语言

1. 编程语言到硬件执行之间到底发生了什么?

硬件执行的本质就是一堆电子元件的“开关”动作,开、关两种状态可以用二进制的1和0来表示,这样整个硬件的执行就和二进制对应了起来。硬件是无法理解上层的高级编程语言的(比如Java、C++、C,、C#、Javascript…… )。

那么为什么要发明高级编程语言呢?因为:

(1)人类直接与二进制打交道,比较费力,与自然语言相隔太远,不利于相互交流和协作,从而很难诞生高效的大规模团队协作来完成超复杂规模的软件设计、开发。

(2)每种硬件平台对应的二进制设计都不太相同,如果直接与二进制打交道,那么就要不断地重复造轮子,不利于跨平台的设计和协作。

既然需要高级编程语言,而硬件又只认识二进制,那么怎么去解决这两者之间的鸿沟呢?答案就是:编译和解释。

2. 编译是什么?

你可以把编译类比成一次性翻译完整的文学著作。相当于把用高级编程语言编写的源代码一次性转换成二进制。

人们摆脱二进制的第一步尝试是设计汇编语言和开发汇编器。每一条汇编指令与对应的二进制是一一对应的,换言之,汇编语言只不过是二进制的一种助记方式。

在有了汇编器之后,可以在汇编语言之上,再来设计高级编程语言和高级语言的编译器,后者可以通过汇编器转换成二进制。通过这样的不断递归的设计、开发过程,就可以设计出非常高级的编程语言。具体的原理分析可以参见笔者的专栏《华为方舟编译器源代码分析》的《先有蛋还是先有鸡:编译器本身是怎么被编译出来的?》。

只要有能转换出最终二进制的高级语言编译器,那么其实是不需要有显式的汇编器和汇编语言的。

3. 解释是什么?

解释相对于同声传译。Javascript这些脚本语言,大部分都是采用解释器来做翻译。它并不需要像编译那样,一次性把所有的源代码转换成最终的二进制。而是在运行的过程中,一边翻译一边执行。与上面设计高级编程语言的编译器的方式一样,高级语言的计时器也可以通过递归的方式设计、开发。到最后,只要有能转换出最终二进制的高级语言解释器,那么其实是不需要有显式的汇编器和汇编语言的。

关于解释器的具体原理,以及加强型算法——如JIT,可以参见笔者的专栏《华为方舟编译器源代码分析》的《干掉Java虚拟机来提升应用程序性能:只有华为想到了吗?》。

4. 一些直接面向高级语言的机器

历史上还专门开发过面向高级语言的机器,中间是不需要汇编语言过渡的。比如大名鼎鼎的LISP语言。曾经人们专门为LISP语言开发过对应的机器。但是最终的商业成果并不理想,主要是当时一些条件还不成熟。

C编译成其他语言,编程达人 所有的编程语言最后会编译成C,再编译成汇编,最后落实到硬件操作上吗?...相关推荐

  1. c++ 求四边形面积和周长_C语言编程题 题目:任意输入4个点,求围成四边形的面积是多少?C语言编程题 题目:任意输入4...

    C语言编程题 题目:任意输入4个点,求围成四边形的面积是多少? C语言编程题 题目:任意输入4 www.zhiqu.org     时间: 2020-12-07 我测试过了,四点一线,凹四边形,四边形 ...

  2. c++ 求四边形面积和周长_C语言编程题 题目:任意输入4个点,求围成四边形的面积是多少?...

    C语言编程题:任意输入4个点,求围成四边形的面积是多少.代码如下: #include "stdio.h" #include "math.h" void main ...

  3. c语言编程常见问题解答 pdf,[编程语言]C语言常见问题集pdf pdf文件[1.35MB]-码姐姐下载...

    原著:Steve Summit 翻译:朱群英, 孙 云 修订版0.9.4, 2005年6月23日 目录 i 前言 xvii 1 声明和初始化 1 1.1 我如何决定使用那种整数类型?......... ...

  4. 编程达人海哥c语言,编程达人 我在写海哥初级班39课作业的时候遇到了问题,希望有兄弟帮忙解答一下...

    是FileBuffer复制到ImageBuff的函数出错了,就图中的那一句Memcpy出了问题,应该是指针哪里写错了,但是自己排查不出来,真是崩溃了.. 函数代码如下: DWORD CopyFileB ...

  5. c语言编程画一把剑,编程语言界十大武器,Java是机枪,JavaSpcrit是宝剑,PHP是个水管子...

    对于程序员来说,编程语言就好比手里的武器,但不同的武器,在不同的时间里,在不同的环境下会有完全不同的作用.如果使用不当的话,有的武器甚至会杀死自己.那么如果现在的编程语言是我们现世的武器的话,你们知道 ...

  6. ab st语言编程手册_木兰编程语言 0.0.14.7:功能覆盖初版用户手册;Gitee Go 流水线尝鲜...

    木兰编程语言 在 2020 年度 OSC 中国开源项目评选 中已获得 26 票,请投票支持! 年初对原始木兰可执行文件 ulang-0.2.2.exe 作了些功能上的摸索尝试,将基本功能写在初版用户手 ...

  7. c语言编程 元旦快乐,不同编程语言打印“元旦快乐!

    Atomikos的使用过程中要注意的事 在使用Atomikos过程中遇到的一些问题,以作记录: MySQL does not support TMJOIN MySQL does not allow f ...

  8. Computer:少儿编程—每个人都应该学习编程,它能教你如何思考—编程入门的简介(编程语言的特点种类开发工具对比人类语言)、编程应用、编程意义之详细攻略

    Computer:少儿编程-每个人都应该学习编程,它能教你如何思考-编程入门的简介(编程语言的特点&种类&开发工具&对比人类语言).编程应用.编程意义之详细攻略 导读:乔布斯说 ...

  9. 切割优化模型可以用c语言编程不,数学算法对计算机编程优化研究

    数学算法是一种以数学模型为基础的理论知识,能够对计算机编程中的问题进行归纳总结和统一计算,以提高逻辑应用的效率,它是计算机编程的基础.计算机编程是从数学模型开始的,首先要根据具体问题进行抽象,以建立一 ...

最新文章

  1. iis+php解析漏洞修复,IIS7.0畸形解析漏洞通杀0day
  2. 攻和防谁更厉害?AI技术在恶意软件检测中的应用和对抗
  3. Liunx安装JDK,tomcat,mysql的依赖包命令
  4. Oracle10.2.0.1.0升级Oracle10.2.0.2.0补丁安装指南(转载)
  5. JAVA在线编译,无需环境变量
  6. jquery点击按钮显示和隐藏div
  7. C语言的隐式类型转换
  8. 大学生 计算机 毕业设计 xx管理系统 毕设(1)
  9. MOS管烧毁,90%以上的硬件工程师都会遇到的问题!
  10. 企业微信对接CRM销售系统,助力企业客户增长
  11. TOMCAT HTPPS
  12. 研发漫画之五:一切尽不在掌握,文山会海,累死我了
  13. 代码生成MANIFEST.MF文件
  14. 有没有免费压缩视频的软件?压缩视频其实很简单
  15. tf.matmul函数用法
  16. 迪士尼地铁背后的指挥官——地铁控制中心OCC,NOCC系统
  17. 数据仓库介绍:什么是数据仓库、数据仓库功能、数据仓库价值、数仓领域职业发展方向规划
  18. openGL-读取off、stl、obj文件并旋转平移缩放操作
  19. python代码解析
  20. C/C++开发,根据磁盘或网卡创建软件License约束(c++)

热门文章

  1. 登过《Vogue》,当过战地记者,Lee Miller的传奇人生
  2. 7233 java game_7233游戏盒子下载
  3. 一名时尚艺术家转行到科技行业的历程
  4. java俄罗斯方块简单代码_求个简单的俄罗斯方块java代码,初学者能看懂的
  5. 黑帽SEO和白帽SEO区别
  6. Wow6432Node
  7. 从游戏大神到IT技术大神的转变
  8. 笔记本显卡1660Ti,Ubuntu18.04安装Cuda、Cudnn、Anaconda、PyTorch、Tensorflow和Keras
  9. 脚本之家(各种资料下载)
  10. LC-初级算法-后续章节