静态语言和动态语言,解释和编译

简介: 静态语言和动态语言,解释和编译

前提


通过高级语言编写的源码,我们能够轻松理解,但对于计算机来说,它只认识二进制指令,源码就是天书,根本无法识别。源码要想执行,必须先转换成二进制指令。


所谓二进制指令,也就是由 0 和 1 组成的机器码,能被计算机直接识别并执行。


定义


先来看一下各种名词的定义


静态类型语言(Statically Typed Language)


静态类型语言是C,C++,Java等语言,在这种类型的语言中,变量的数据类型在编译时是已知的,这意味着程序员必须在声明变量时指定变量的数据类型。我们必须预先定义函数的返回类型,以及它正在接受或接受的变量类型,以便进一步评估。


动态类型语言(Dynamically Typed Language)


这些语言不需要任何变量的任何预定义数据类型,因为它在运行时由机器本身解释。在这些语言中,解释器在运行时根据其值将数据类型分配给变量。我们甚至不需要指定函数在这些语言中返回或接受的变量类型。 JavaScript, Python, Ruby, Perl 等是动态类型语言的例子。


脚本语言(Scripting language)


脚本语言是一种被解释的编程语言。它在代码运行时(而不是事先)转换为机器代码。脚本语言通常用于完整计算机程序上的短脚本。JavaScript, Python, Ruby 都是脚本语言的例子。


脚本语言一定是动态语言。


解释执行(interpretation)


有的编程语言可以一边执行一边转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序,比如 Python、JavaScript、PHP、Shell 等,这类编程语言称为解释型语言,使用的转换工具称为解释器。


编译执行(compilation )


有的编程语言要求必须提前将所有源代码一次性转换成二进制指令,也就是生成一个可执行程序(比如 Windows 下的 .exe 文件),比如C语言、C++、Golang、汇编语言等,它们都属于编译型语言,使用的转换工具称为编译器。


讨论


动态/静态语言和解释/编译执行之间有必然的对应关系吗?


结论:没有


Java是解释型语言但是不是动态语言,Java不能在运行的时候改变自己结构。反之成立吗?动态语言都是解释型语言。也是错的!Object-C是编译型语言,但是他是动态语言。得益于特有的run time机制(准确说run time不是语法特性是运行时环境,这里不展开)OC代码是可以在运行的时候插入、替换方法的。


脚本语言和动态语言是一回事儿吗?


关于这个问题,我觉得这篇文章写的很好:动态语言——披着彩衣飞舞的脚本语言


为什么会出现编译执行和解释执行两种方式?


参考



编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别


编译和解释的区别是什么?

目录
相关文章
|
3月前
|
自然语言处理 算法 安全
编程语言中的静态和动态类型语言
【7月更文挑战第14天】本文介绍静态与动态类型语言对比。类型检查效率是关键,一些系统可能在极端情况下慢。自动化与高效算法的研究持续进行.
36 5
编程语言中的静态和动态类型语言
|
4月前
|
存储 编译器 程序员
C++语言速成方法
C++语言速成方法
|
5月前
|
存储 算法 编译器
C++语言中的函数:深入解析与应用
C++语言中的函数:深入解析与应用
|
5月前
|
JavaScript 前端开发 Java
静态语言和动态语言,解释和编译
静态语言和动态语言,解释和编译
73 1
|
自然语言处理 数据库连接
编译原理(五) 语言的定义
编译原理(五) 语言的定义
129 0
|
设计模式 缓存 程序员
初探Python元编程:理解并使用元编程改变代码行为
在Python编程中,有一种强大的技术允许我们在运行时修改或生成代码,这就是元编程。Python的元编程工具包括装饰器,元类,以及函数和类的各种动态修改技术。这篇文章将向你介绍元编程的基本概念,并通过实例讲解如何使用元编程。
|
Java
【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )
【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )
271 0
|
Java Linux Android开发
【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 )
【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 )
162 0
【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 )
|
JavaScript Java PHP
编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别
今天看到篇对于静态、动态、强类型、弱类型总结的很到位的一篇博文,在此Mark下。 编译型语言和解释型语言 1、编译型语言 需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。
2895 0
下一篇
无影云桌面