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

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

前提

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

所谓二进制指令,也就是由 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代码是可以在运行的时候插入、替换方法的。

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

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

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

参考

编程语言傻傻分不清:弱类型、强类型、动态类型、静态类型

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

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

相关文章
|
2月前
|
安全 应用服务中间件 网络安全
HTTPS改成HTTPS速成方法
最快将HTTP升级为HTTPS:先安装SSL证书(如Gworg),再通过服务器配置(Apache/Nginx/IIS)或WordPress插件设置301重定向;迁移后需修复混合内容、提交Google搜索控制台并启用HSTS,确保安全与SEO无损。
249 3
|
前端开发 容器
【前端】1、flex 布局详解
【前端】1、flex 布局详解
440 0
|
算法 Python
随机生成迷宫-深度优先搜索算法
在计算机科学中,迷宫生成是一个经典的问题,广泛应用于游戏设计、路径规划等领域。本文将介绍一种常见的迷宫生成算法——深度优先搜索算法(Depth-First Search, DFS),通过随机选择路径进行探索和回溯,最终生成一个随机且有趣的迷宫。
1395 1
|
存储 弹性计算 关系型数据库
阿里云服务器ESSD云盘性能等级PL0、PL1、PL2、PL3区别,云盘性能级别PL知识点参考
在我们选择阿里云服务器系统盘和数据盘时,如果是选择ESSD云盘,还需要选择云盘的云盘性能级别PL,PL性能级别有PL3、PL2、PL1、PL0四个性能级别的云盘规格,如果是通过阿里云的活动来购买云服务器的话,由于系统盘默认一般为20G或40G容量,可选的PL性能级别通常只有PL0(单盘IOPS性能上限1万)和PL1(单盘IOPS性能上限5万)可选择,有的用户肯能并不清楚ESSD云盘的性能等级之间有何区别,单盘IOPS性能指的是什么,本文为大家介绍一下ESSD云盘的云盘性能级别PL3、PL2、PL1、PL0相关知识点。
阿里云服务器ESSD云盘性能等级PL0、PL1、PL2、PL3区别,云盘性能级别PL知识点参考
|
5月前
|
云安全 人工智能 安全
阿里云2026云上安全健康体检正式开启
新年启程,来为云上环境做一次“深度体检”
1910 6
|
IDE Java 编译器
java: 错误: 不支持发行版本 5 java: 错误: 不支持发行版本8 java: 错误: 不支持发行版本17
检查编译器配置:确保你的IDE或编译器已正确配置为使用正确的Java版本。可以在IDE的设置或项目属性中查找并更改Java编译器的版本。
1675 0
|
机器学习/深度学习 C++
强化学习:实践理解Markov决策过程(MDP)(干中学系列)——手把手教你入门强化学习(三)
本博客以实践为主,带领读者巩固上期关于“Markov决策过程”的核心概念。通过构建学生马尔可夫奖励模型、计算收获值与状态价值,进一步验证贝尔曼方程。详细介绍了转移概率、奖励值及策略概率的设置,并实现了均匀随机策略下的状态价值计算与最优策略的价值评估。结合代码实例,帮助读者深入理解强化学习理论。适合初学者实践与进阶学习。
708 63
|
11月前
|
人工智能 运维 安全
世界500强也在用!这家石化巨头如何平滑上云?
石化企业从Hyper-V转型上国产私有云案例分享,轻松实现智能升级!
309 0
世界500强也在用!这家石化巨头如何平滑上云?
|
存储 数据采集 JSON
数据存储的正确规范:csv/xlsx和JSON全方位解析
数据存储的正确规范:csv/xlsx和JSON全方位解析
457 1