参考:
计算机语言:编译型/解释型、动态语言/静态语言、强类型语言/弱类型语言
编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别
编程语言傻傻分不清:弱类型、强类型、动态类型、静态类型


1. 编译型语言与解释型语言

1.1 编译型语言

需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。

优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。

缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

代表语言:C、C++、Pascal、Object-C以及最近很火的苹果新语言swift

1.2 解释型语言

“编译”和“解释”的确都有“翻译”的意思,区别在于翻译的时机安排不大一样。 打个比方:假如你打算阅读一本外文书,而你不知道这门外语,那么你可以找一名翻译,给他足够的时间让他从头到尾把整本书翻译好,然后把书的母语版交给你阅读; 或者,你也立刻让这名翻译辅助你阅读,让他一句一句给你翻译,如果你想往回看某个章节,他也得重新给你翻译。

两种方式,前者就相当于我们刚才所说的编译型:一次把所有的代码转换成机器语言,然后写成可执行文件; 而后者就相当于我们要说的解释型:在程序运行的前一刻,还只有源程序而没有可执行程序;而程序每执行到源程序的某一条指令,则会有一个称之为解释程序的外壳程序将源代码转换成二进制代码以供执行,总言之,就是不断地解释、执行、解释、执行……所以,解释型程序是离不开解释程序的。

不过凡事有利有弊,由于解释型程序是将编译的过程放到执行过程中,这就决定了解释型程序注定要比编译型慢上一大截,像几百倍的速度差距也是不足为奇的。

优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby

1.3 编译型与解释型,两者各有利弊

前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)、VB等基本都可视为编译语言。

而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python等等。

1.4 混合型语言

既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕。就出现了半编译型语言。比如C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行(博友回复指出)。我个人认为抛开一切的偏见C#是这个星球上最好的编程语言。可惜微软的政策限制了C#的推广。

Java先生成字节码再在Java虚拟机中解释执行。

严格来说混合型语言属于解释型语言。C#更接近编译型语言。

2. 动态类型语言与静态类型语言

2.1 动态类型语言

动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。

主要语言:Python、Ruby、Erlang、JavaScript、swift、PHP、Perl。

2.2 静态类型语言

静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型。

主要语言:C、C++、C#、Java、Object-C。

3. 强类型语言与弱类型语言

3.1 强类型语言

强类型语言,一旦一个变量被指定了某个数据类型,如果不经过强制类型转换,那么它就永远是这个数据类型。你不能把一个整形变量当成一个字符串来处理。

主要语言:Java、C#、Python、Object-C、Ruby

3.2 弱类型语言

数据类型可以被忽略,一个变量可以赋不同数据类型的值。一旦给一个整型变量a赋一个字符串值,那么a就变成字符类型。

主要语言:JavaScript、PHP、C、C++(C和C++有争议,但是确实可以给一个字符变量赋整形值,可能初衷是强类型,形态上接近弱类型)

4. 总结

计算机语言的分类:编译型/解释型、动态类型/静态类型、强类型/弱类型相关推荐

  1. 彻底明白编译型和解释型、动态语言和静态语言区别

    编译型和解释型的区别 先来看看编译型语言定义: 编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码 (二进制). 再来看看解释型语言的定义: 解释型语言的源代码不是直接翻译成机器指令,而是先 ...

  2. HTML简介:标记型解释型的语言

    相关网盘免费资源下载... HTML简介:标记型解释型的语言 掌握程度 作用 语法结构: 基础标签 html:文件是网页,浏览器加载网页,就可以浏览 head:头部分,网页总体信息 body:身体部分 ...

  3. 静态 动态 强类型 弱类型语言的区别

    原文:http://www.zhihu.com/question/19918532 类型系统的一些概念,众说纷纭,使用上也比较乱.有些东西,甚至不好严格定义.以下算学术界的一种相对"严格&q ...

  4. java 强类型 弱类型_强类型,弱类型,静态类型,动态类型的区别

    强.弱类型 强类型strongly typed: 如果一种语言的所有程序都是well behaved--即不可能出现forbidden behaviors,则该语言为strongly typed. 弱 ...

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

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

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

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

  7. linux centos 编译luabind-0.9.1 动态库 静态库

    luabind下载 luabind-0.9.1 下载地址 :http://download.csdn.net/download/yzf279533105/10109861 编译步骤 一. 需先编译好l ...

  8. 开发语言的静态/动态,强类型/弱类型之分

    目录 概念定义 静态类型语言 优势 劣势 动态类型语言 优势 劣势 强类型语言 弱类型语言 如何选择 语言类型图 之前同事每次跟我提起他学习了某个语言,并介绍这个语言很棒时,开头都会跟我说这个语言是什 ...

  9. 静态类型/动态类型/强类型/弱类型

    C/C++是弱类型,并且是静态类型,因为可以容忍隐式类型转换,并且可以进行强制类型转换,然后编译的时候就已经直到变量的类型,所以是静态类型(类型错误引发的是语法错误) python是动态类型,强类型, ...

最新文章

  1. python使用正则表达式判别字符串是否以一个大写字符起始而跟随了一些小写字符
  2. 关于将一个数输出为原码、反码和补码的解惑
  3. 机器学习基础-决策树-12
  4. window 效率神器:Wox
  5. 微信小程序 地图组件使用
  6. AE调整形状图层大小插件 BorderPatrol for mac
  7. css基础知识汇总9
  8. ezcad旋转轴标刻参数_激光打标机软件ezcad中菜单下的地球仪标刻功能介绍及其操作设置...
  9. “0x005346c4”指令引用的“0x00786000”内存,该内存不能为读
  10. git-Git 团队协作中常用检查术语 WIP PTAL CC LGTM 等解释
  11. 10大协作办公工具:实现团队工作效率最大化
  12. 一个屌丝程序猿的人生(二十二)
  13. 什么是web前端?前端可以做什么?html5有什么用?
  14. 蓝奏云链接打不开的解决办法
  15. 最大公约数和最小公倍数实现
  16. 生成艺术or游戏?无限可能的体验#Wayfinder-探索这片土地的诗意
  17. 把计算机器显示桌面,怎样将电脑显示器和桌面匹配
  18. benchmarksql测试mysql_使用benchmarkSQL测试数据库的TPCC
  19. 论文阅读:CVPR2022 Wavelet Knowledge Distillation: Towards Efficient Image-to-Image Translation
  20. 网盘(结合百度网盘/阿里网盘)

热门文章

  1. fault、failure和error区别
  2. iframe页面同步刷新代码
  3. Oracle 查询索引
  4. 博诺杯工业机器人比赛2019_2018年度机械行业职业教育技能大赛“博诺杯”工业机器人维修调试与技术应用竞赛顺利闭幕...
  5. cssborder(cssborder虚线边框)
  6. 解决idea中不能输出中文问题
  7. 游泳防水耳机推荐,推荐四款高质量游泳防水耳机
  8. Twisted-18.9.0-cp36-cp36m-win_amd64.whl
  9. 第二证券|沪指缩量跌0.4%,旅游、医药股大幅拉升,地产、金融等板块走弱
  10. fgvc-aircraft-2013b飞机细粒度数据训练集和测试集划分python代码