编译型和解释型的区别

先来看看编译型语言定义:

编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码 (二进制)。

再来看看解释型语言的定义:

解释型语言的源代码不是直接翻译成机器指令,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。

咋看一眼,还是一脸懵逼。下面打个比方:

  • 编译型相当于用中英文词典(翻译器)将一本英文书一次性翻译(编译)成一本中文书。以后查看直接就是中文了。可想而知,以后读书(运行)会非常非常方便。
  • 解释型相当于用中英文词典(翻译器)将一本英文书读一段翻译一段(解释)中文。以后查看时还是需要重新翻译。这样效率会低一些,必须依赖解释器,但是跨平台性好。

扩展

编译型和解释型的定义是对立存在的,但也可以在一个语言中同时存在。比如 java 语言同时兼有编译型和解释型特点。整个流程如下:

将源代码(.java 文件)编译生成字节码(.class 文件),再通过 JVM(java 虚拟机)运行生成机器指令,由机器运行机器码。注意,此处生成机器语言前的操作是解释型,每次运行都要重新解释。因此,此处表明 java 是解释型
但是,部分 JVM(java 虚拟机)有一种 JIT(Just in time)机制,能够将部分已经解释翻译的常用机器指令保存。下次不需要解释,直接运行即可。此时 java 是编译型

因此,现在用编译型和解释型区分语言是行不通的。

动态语言和静态语言

我们常说的动态语言和静态语言,其实是指动态类型语言和静态类型语言。先来看看动态类型语言:

动态类型语言,是指数据类型的检查是在运行时做的。用动态类型语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部记录数据类型。

再来看看静态类型语言的定义:

静态类型语言,是指数据类型的检查是在运行前(如编译阶段)做的。

小结:

  • 动态类型语言的优点是不需要写多种数据类型的代码,代码相对简洁一些,方便代码阅读。缺点是不方便调试,代码命名也容易混淆;
  • 静态类型语言的优点是方便调试,代码相对规范。缺点是需要写很多数据类型相关的代码,代码不够简洁。

参考资料:

百度百科:编译型语言
百度百科:解释型语言
知乎:Java 是编译型语言还是解释型语言?
IBM:深入浅出 JIT 编译器
逛博:编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的区别

本文均为作者原创,未经允许和授权,不得转载,违者必究!

彻底明白编译型和解释型、动态语言和静态语言区别相关推荐

  1. 编译型和解释型、动态语言和静态语言、强类型定义语言和弱类型定义语言

    一.编译型与解释型语言 我们编写程序也就是源代码基本是用高级编程语言,比如JavaScript, java, c等等,这些语言计算机是不理解的,所以需要转化(翻译)成计算机理解的机器语言,或者说目标C ...

  2. 关于编程语言的思考——编译型和解释型

    原文地址: http://blog.csdn.net/chosen0ne/article/details/7087041 我们知道,任何编程语言编写的程序归根到底都是由底层机器的机器代码(01序列)执 ...

  3. java介于编译型和解释型

    .java文件先编译成.class文件. 源程序-->Java编译器-->字节码-->类装载器-->(到了jvm)-->字节码校验器-->解释器-->操作系统 ...

  4. 重学java基础第二十一课:编译型和解释型

  5. 编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言概念辨析

    编译型与解释型.动态语言与静态语言.强类型语言与弱类型语言概念辨析 转自:https://blog.csdn.net/u010533843/article/details/76215487 编译型和解 ...

  6. python中动态语言静态语言的定义_作为程序开发,你所需要知道的编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的概念以及区别...

    作为程序开发,你所需要知道的编译型与解释型.动态语言与静态语言.强类型语言与弱类型语言的概念以及区别! 在各式各样的开发过程当中,我相信各位开发小伙伴在开发过程中并没有太关注什么是解释性语言和编译性语 ...

  7. java 是静态语言还是动态_java是动态语言还是静态语言?,

    java是动态语言还是静态语言?Java是动态语言还是静态语言?,Java是一种静态语言.Java是编译时确定的变量类型,不能在运行时更改,在类型转换中也是强制的.例如,当大规模整数类型转换为小规模整 ...

  8. java中的静态语言_java是动态语言还是静态语言?

    java是静态语言.Java是在编译时期确定的变量类型且在运行时期不能改变,在类型转换方面也是强制的,例如大范围整数类型转换为小范围整数类型时必须要强转,如int必须强制转换才能得到小范围类型byte ...

  9. Java是动态语言还是静态语言,是强类型还是弱类型?

    一. 前言 今天小熙突然想到一个问题,那就是Java到底是动态语言还是静态语言,是强类型还是弱类型呢?虽然知道但是还是不够深入,接下来就一起探讨下吧. 二. 图释 小熙碰巧看到一张图,完美的区分了以上 ...

最新文章

  1. cassandra java driver
  2. 解决 android 高低版本 webView 里内容 自适应屏幕的终极方法
  3. linux下gdb使用core文件调试程序,解决“段错误核心已转储“的问题
  4. 【收藏】最详细的cmder配置
  5. 【HDOJ】3315 My Brute
  6. 已知两点坐标如何快速增加其他坐标_从0开发工程测绘大师小程序之坐标正算篇(十一)...
  7. Font Awesome-为Bootstrap设计的图标字体
  8. Airflow 中文文档:使用Mesos扩展(社区贡献)
  9. 卡方分布、T分布和F分布
  10. SQLyog之MySQL客户端的下载、安装和使用(普通版)
  11. CASS使用-20220617更新
  12. eclipse中Debug调试基本操作
  13. 【Unity】U3D TD游戏制作实例(五)防御塔设计:对象排序、锁定敌人、攻击敌人、防御塔特色功能实现
  14. 轻松教你苹果airdrop怎么用
  15. win7系统获得管理员取得所有权的方法【系统天地】
  16. DTI处理工具包PANDA小白记录
  17. 电脑软件测试英雄联盟,lol电脑配置检测,如何测试自己的网络玩lol的具体情况?...
  18. QGIS基本功| 6 图层进阶(三)- 快速美化图层数据
  19. python模块-win32clipboard-访问windows剪切板-实现复制粘贴
  20. unity能连jsp吗_使用JSPWiki丰富Unity-UPM包的使用

热门文章

  1. PR —— 轨道操作(锁定、解锁、可见、不可见、恢复误删除音视频)
  2. HTML5《口袋妖怪》游戏截图
  3. 基于Python实现 GUI界面 计算传感器的连接率 传感网通信连结仿真
  4. Keil编译出现keilc error C183: unmodifiable lvalue错误
  5. 【BUG】url 参数 AES 加密和解密问题
  6. 设计模式之领航篇高内聚和低耦合
  7. 3D激光SLAM:LOAM 论文--算法详细解读
  8. vue3获取dom元素
  9. 江西化工杂志江西化工杂志社江西化工编辑部2022年第6期目录
  10. [noip模拟赛2017.7.7]