高级语言相关理论[编译VS解释,动态VS静态,强类型VS弱类型]

编译型语言 VS 解释型语言

计算机高级语言按程序执行方式分为编译型和解释型

高级语言相关理论[编译VS解释,动态VS静态,强类型VS弱类型]_第1张图片 编译型和解释型语言的执行流程

编译型语言

  • 所有源代码一次性通过编译器转换成二进制指令,即生成一个可执行程序(如Windows下的.exe),可执行程序包含的就是机器码;且无需重新编译,实现一次编译,无限次运行
  • 运行可执行程序时,不再需要源代码和编译器,因此编译型语言可以脱离开发环境运行
  • 编译型语言一般不能跨平台,因为编译型语言与平台联系比较紧密(操作系统都是用编译型语言编写的),不同平台(操作系统)可能有其特定的编写规则,即不能在不同的操作系统之间随意切换
  • 编译型语言包括诸如C、C++、Golang、Pascal(Delphi)、汇编等编程语言

编译器的类型

  • 前端编译器:编译器的分析阶段也称为前端,它将程序划分为基本的组成部分,检查代码的语法、语义和语法,然后生成中间代码。分析阶段包括词法分析、语义分析和语法分析
  • 后端编译器:编译器的合成阶段也称为后端,优化中间代码,生成目标代码。合成阶段包括代码优化器和代码生成器

解释型语言

  • 每次执行程序都需要通过解释器一边执行一边转换,需要哪些源代码就转换哪些源代码,不生成可执行程序
  • 每次执行程序都需要重新转换源代码,所以无法脱离开发环境,所以解释型语言的执行效率天生就低于编译型语言,甚至存在数量级的差距
  • 解释型语言能跨平台,即实现“一次编写,到处运行
  • 解释型语言包括诸如Python、JavaScript、PHP、Shell、MATLAB等编程语言

半编译半解释型语言(结合编译和解释)

  • 源代码需要先通过前端编译器转换成中间文件(字节码文件),然后再将中间文件加载虚拟机中解释和编译执行,由于每个平台对应一个虚拟机,因此是源代码是可跨平台的,即实现“一次编写,到处运行”
  • 既使用解释器也使用编译器
  • 半解释和半编译语言包括诸如Java和C#等编程语言
    高级语言相关理论[编译VS解释,动态VS静态,强类型VS弱类型]_第2张图片 比如Java源代码执行流程

 编译和解释型语言对比

高级语言相关理论[编译VS解释,动态VS静态,强类型VS弱类型]_第3张图片

动态 VS 静态 & 强类型VS弱类型

概述

高级语言相关理论[编译VS解释,动态VS静态,强类型VS弱类型]_第4张图片 概述

详情

名称 定义 举例 优势 劣势 编程语言
动态语言 类在运行时可以改变其结构的语言。(强调改变代码结构) 例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。 / / Object-C、C#、JavaScript、PHP、Ruby、Python、Erlang。
静态语言 与动态语言相对应的,运行时结构不可变的语言就是静态语言。(强调改变代码结构) / / / Java、C、C++。
动态类型语言 在运行时,确认数据类型的语言,变量在使用之前无需申明类型,通常变量的值是被赋值的那个值的类型(强调检查数据类型) 伪代码:

s ="hello";
i = 0;
b = true;

1.思维不受束缚,可以任意发挥,把更多的精力放在产品本身。
2.集中思考业务逻辑实现,思考过程即实现过程。
代码运行期间有可能会发生与类型相关的错误。 PHP、ASP、JavaScript、Python、Perl、SQL、Ruby、ABAP、Unix Shell等。
静态类型语言 在编译时,变量的数据类型就可以确定的语言。
多数静态类型语言要求在使用变量之前必须声明数据类型。(强调检查数据类型)
伪代码:

String s="hello"; //String 类型的变量
int i=0; //int 类型的变量
boolean b=true; //boolean 类型的变量

1.由于类型的强制声明,IDE(集成开发环境)有很强的代码感知能力,因此,在实现复杂的业务逻辑,开发大型商业系统,以及那些生命周期很长的应用中,依托IDE对系统的开发很有保障。
2.由于静态类型语言相对比较封闭,使得第三方开发包对代码的侵害性可以降到最低
1.开发代码的时候,需要格外注意变量的类型。
2.过多的类型声明会增加更多的代码
C、C++、Java、Delphi、C#等。
强类型语言 强制数据类型定义的语言。
一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型。(强调转换数据类型)
例如,不能把一个整形变量当成一个字符串来处理。 强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。 Java、C#、Python、Object-C、Ruby
弱类型语言 数据类型可以被忽略,一个变量可以赋不同数据类型的值。(强调转换数据类型) 一个变量可以赋不同数据类型的值。 / JavaScript、PHP、C、C++(C 和 C++ 有争议,但是确实可以给一个字符变量赋整形值,可能初衷是强类型,形态上接近弱类型)
高级语言相关理论[编译VS解释,动态VS静态,强类型VS弱类型]_第5张图片 简图

你可能感兴趣的:(后端,开发语言,java)