某些语言在编译阶段转成C,主要是历史原因。历史上有一个时期,所有的编译语言,包括C++,最少有一个版本是先编译到C。那个时代的编程语言,现在还在广泛使用的,还有Objective-C。不过,它们都已经改为编译到中间语言,不再是C了。新发明一个语言之后只要在下层转成C就可以用现有的编译器,而不用自己重新写一个编译器转去汇编语言。
因为如果所有语言的基础是C(编译阶段会转化为C),那么实际上所有人都应该先学C,然而简短回答: 不是, 其他语言并不需要先被编译成c再编译成机器码。
什么是软件编译?
第一, 编译的目的: 编译是为了把你用高级语言(c,c++,etc) 编译成处理器可以执行的二进制机器码。因为处理器是不能直接运行高级语言的。
第二,编译器是什么。 其实编译器本身就是一个输入一堆字符串(源码)然后生成另一堆字符串或者二进制的程序。 所以理论上说, 编译器是可以把任何一个(图灵完备的)语言写成的程序编译成另一个(图灵完备的) 语言的程序, 且两个程序等价。
第三, 视频里应该说的是一个语言可以写另一个语言的编译器(不如用c写的c++编译器)。 如果你感兴趣, 可以看看编译器是如何自举(bootstrap)的。
第四, 现代编译器的结构。现在编译器一般分前段后端。 前段一般是语义分析, 后端一般是优化和机器码生成。 前端一般会生成一个后端可以接收的中间语言(IR),这样一来, 几种不同的语言就可以用不同的前端但是共用一个后端。 可以参考LLVM的结构。
编译语言和解释语言(比如python)的区别。 编译语言是你在写好程序之后, 会把这个程序输入到编译器里, 编译器会生成一个二进制可执行文件。 当你运行的时候,你把需要运行的数据输入到这个生成出来的可执行文件里然后输出结果。 而解释型语言是当你写出来程序之后, 直接把你写的程序和运行需要的数据输入到解释器里, 解释器输出结果。
最后,今天给大家的分享就到这里结束了,希望能够帮助想要学习编程的你。最近我创建了一个学习营:831436266,组织大家一起学习进步,踏踏实实走好自己的编程路,这里是编程学习者聚集地,欢迎初学和进阶中的小伙伴!