重点关注过程式程序设计语言编译程序的构造原理和技术
1 程序设计语言
1.1 依据不同范型
过程式(Procedural programming languages–imperative) | 函数式(Functional programming languages–declarative) | 逻辑式(Logical programming languages–declarative) | 对象式(Object-oriented programming languages) |
---|---|---|---|
程序中指明如何完成一个计算任务 | 程序中指明要进行哪些计算 | 事实+推理规则 | 支持面向对象编程 |
FORTRAN, PASCAL, C | LISP, HASKELL, ML, OCAML, SCALA… | PROLOG | Smalltalk, Java, C++, Eiffel, Ruby |
说明式语言(Declarative programming): 与上述命令式(Imperative language) 不同,没有控制结构,甚至没有赋值,仅有问题说明,或者 说纯数学定义 |
1.2 依据不同转化方式
编译型语言 | 解释型语言 | 混合型语言 |
---|---|---|
需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。 | 不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译。 | 比如C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行(博友回复指出)。 |
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。 | 优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。 | |
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码 |