程序编译过程
程序的编译过程与语言类型有关
语言可分为解释性语言和编译语言,解释性语言入Python、JavaScript;编译语言比如C/C++;半解释语言如Java等;编译性语言编译后能直接在机器执行,效率高。解释性语言运行于解释器上,效率依赖于解释器,但跨平台性好。
C/C++语言编译主要分为四个阶段
1. 预处理替换,此阶段由编译器完成
2. 编译过程,优化生成中间代码,此阶段由编译器完成
3. 汇编:讲汇编代码翻译成机器指令,此阶段由汇编器完成
4. 链接:将文件中的各种函数与静态库、动态库文件相连接,生成执行文件由机器执行,此阶段由链接器完成
名词解释
静态链接:在程序执行之前完成链接
动态链接:在程序执行时进行链接
Java程序编译过程
Java属于半解释性语言,运行于虚拟机,主要分为两步
1. 编译:源码编译成class文件(字节码),此过程由编译器完成。
2. 运行:字节码由JVM(java虚拟机)生成模板代码文件并执行,边解释边执行。
Java运行过程
1. 类的加载:加载 --> 验证 --> 准备 --> 解析 --> 初始化,类信息最终被加载到方法区
2. 执行类:JVM找到专属入口,持有指针加载运行
Python程序执行过程
Python属于解释性语言,运行于python解释器(CPython、PyPy、IPython等),边解释边执行,其执行过程如下:
1. 语法分析、词法分析:由解释器完成
2. 编译过程:生成PyCodeObject对象,将import的文件生成pyc文件(字节码):由解释器完成
3. 执行:由解释器完成。
语言的其他分类:
除此之外,语言还会分为
动态语言:在运行期间才去做数据类型检查的语言(比如Python)
静态语言:在编译期间内检查数据类型等,如C++
按照类型分为
强类型语言:一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型,如C++、Java、Python
弱类型语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值,如Vb、Php
按照语言级别分类
高级语言:有类、方便移植,如Java、C++、Python等
低级语言:如汇编等