本文的关注点:编译型语言和解释型语言动态结构语言和静态结构语言动态类型语言和静态类型语言强类型语言和弱类型语言

1、编译型语言和解释型语言

计算机不能直接的理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言的编写的程序。翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。
编译型语言:
需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。编译和执行是分开的,但是不能跨平台。
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
代表语言:C、C++、Pascal、Object-C、swift等。
解释型语言
解释性语言的程序不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译。每一个语句都是执行的时候才能翻译。这样解释性语言每执行一次要翻译一次,效率表较低。
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby
混合型语言
混合型语言也叫半编译型语言。比如java、C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行。
java解释器采用生成与系统无关的字节代码指令技术。也就是说,在任何不同的操作系统上,只要正确安装了java运行系统,就有了编写调试java程序的平台,在分布式应用中,java的这个特点使同一个java程序能在不同的系统上运行,从而提高了软件生产效率。可移植性是跨平台特性的一个延伸,即具有了跨平台性,就保证了可移植性。java程序、java类库、java编译器、java系统都具有可移植性。
另外有一个特殊的情况,正常情况下JavaScript属于解释性语言,V8引擎是被设计用来提高网页浏览器内部JavaScript执行的性能,为了提高性能,v8会把js代码转换为高效的机器码,而不在是依赖于解释器去执行。v8引入了JIT在运行时把js代码进行转换为机器码。这里的主要区别在于V8不生成字节码或任何中间代码。这里的特殊之处在于JIT做代码优化(同时生成编译版本);解释型语言无法做到这些。
动态结构语言和静态结构语言
主要针对点是:运行是是否能够改变代码结构。
动态结构语言
是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。
主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。
静态结构语言
与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。
动态类型语言和静态类型语言
动态类型语言和静态类型语言主要针对数据类型检查的时间问题。
动态类型语言
动态语言是在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。
主要语言:Python、Ruby、Erlang、JavaScript、swift、PHP、SQL、Perl。
静态类型语言
静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型。 
主要语言:C、C++、C#、Java、Object-C。
注意:
通常情况下解释型语言是动态类型语言,编译型语言是静态类型语言。但也不全是,swift是编译型语言但是它也是动态类型语言。C#和Java是解释型语言也是静态类型语言。
强类型语言和弱类型语言
强类型语言:
强类型语言,一旦一个变量被指定了某个数据类型,如果不经过强制类型转换,那么它就永远是这个数据类型。你不能把一个整形变量当成一个字符串来处理。
主要语言:Java、C#、Python、Object-C、Ruby
弱类型语言:
数据类型可以被忽略,一个变量可以赋不同数据类型的值。一旦给一个整型变量a赋一个字符串值,那么a就变成字符类型。
主要语言:JavaScript、PHP、C、C++(C和C++有争议,但是确实可以给一个字符变量赋整形值,可能初衷是强类型,形态上接近弱类型)
语言类型分布图:
在知乎上看到一张图,简直如有神助,啥也不说了上图。
原图:https://www.zhihu.com/question/19918532

编程语言的分类与关系相关推荐

  1. 计算机编程语言的分类,解释型语言、编译型语言、脚本语言的关系

    计算机编程语言的分类: 机器语言(二进制代码) 汇编语言(面向机器的程序设计语言) 高级语言(按转换方式可分为两类:1.编译型语言;  2.解释型语言   ||  按照客观系统的描述可分为两类:1.面 ...

  2. 计算机编程语言的分类,解释型语言、编译型语言、脚本语言的区别

    原文传送门:http://blog.csdn.net/liuchuo/article/details/52014764 计算机编程语言的分类: 机器语言(二进制代码) 汇编语言(面向机器的程序设计语言 ...

  3. 编程语言的分类及初识大蟒蛇

    一 编程语言的分类 从第一台计算机诞生开始,人们为了使用计算机硬件就产生了编程语言.从最初的机器语言,到汇编语言再到现在应用广泛的高级语言.目前世界上的编程语言已经多达600种. 机器语言:直接使用二 ...

  4. 类加载器的分类及关系

    类加载器的分类及关系 JVM支持两种类型的类加载器 .分别为引导类加载器(Bootstrap ClassLoader)和自定义类加载器(User-Defined ClassLoader). 从概念上来 ...

  5. matlab运算速度与cpu的关系,请教编程语言和运算速度的关系

    72 个回复 bore 装装傻,避避风头 2010-01-13 花1分钟写一个程序,跑一天: 花一天写一个程序,跑1分钟. 我另可花1分钟写程序. 但是,如果要跑一个月,还是多花点时间写程序吧. [  ...

  6. python3解释器执行not 1 and 1_编程语言的分类,python解释器多版本共存.执行python的两种方式,变量,用户与程序交互...

    一.编程语言的分类? 机器语言:直接使用二进制指令编程,直接操作硬件,必须考虑硬件细节. 汇编语言:用简写的英文标识符取代二进制去编写程序,直接操作硬件,必须考虑硬件细节. 高级语言:通过人类能够理解 ...

  7. html 的基本结构、标签(分类、关系)、文档类型、页面语言、字符集、语义化

    结构代码 <!DOCTYPE html> <html><head> <meta charset="UTF-8"><title& ...

  8. 计算机编程语言python-PYTHON之计算机语言基础知识 —— 编程语言的分类

    一.计算机语言分类 低级语言.高级语言.专用语言.脚本语言 1.低级语言:机器语言.汇编语言和符号语言.机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令(机器码)的合集,他是计算机的设 ...

  9. 编程语言的分类及其优缺点,Python标准输入与输出

    一. 编程语言分类 1.机器语言 以0,1的组合作为指令集,用二进制指令来编写程序: 优点:执行效率高 缺点:开发效率低 2.汇编语言 用英文标签代替二进制指令集来编写程序,比机器语言稍微高级,但本质 ...

  10. 老版本fortran语言 内存无效_编程语言的分类

    编程语言世代 第一代和第二代语言又称低级语言(Low-level language),其余被视为高级语言(High-level language) 第一代编程语言 即机器语言,由0和1构成,通过面板. ...

最新文章

  1. 近期必读的9篇CVPR 2019【域自适应(Domain Adaptation)】相关论文和代码
  2. centos7搭建需密码登入的简易ftp服务器
  3. 关于 屏幕阅读器 和 sr-only
  4. JZOJ 3648. 【GDOI2014】beyond
  5. jzoj4224-食物【多重背包】
  6. 学成在线--13.RabbitMQ工作模式
  7. oracle权限培训,Java培训-ORACLE数据库学习【2】用户权限
  8. python程序设计简明教程知识点总结_Python程序设计简明教程 在线阅读
  9. 如何检测python是否安装_布同自制Python函数帮助查询小工具
  10. Flutter AnimatedOpacity 实现透明度渐变动画效果
  11. 铁粉看进来,surprise|湾区人工智能
  12. 打造 AI 语音新标杆,英特尔与腾讯云小微创新共赢
  13. 模板引擎 Velocity
  14. NoSQL数据库介绍
  15. Excel制作抛硬币动态频率趋势曲线
  16. Java大数开根号板子
  17. 怎样用计算机粉碎文件夹,电脑粉碎文件用什么软件好,怎么彻底粉碎电脑文件...
  18. Flink中水位线Watermark
  19. (VGG)VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION--Karen Simonyan
  20. 脱壳入门(一)之分析Aspack壳

热门文章

  1. CSS格式化工具-直接可以使用
  2. 2022.7.20 JETSON NANO 2GB 跑Swin-Transformer-Object-Detection。(配置:UBUNTU18/PYTHON3.6/PYTORCH1.6.0...)
  3. Waymo上线11万美元挑战赛,福特开放1.6TB自动驾驶数据
  4. MDK与keilC51共存的方法(成功)MDK与keilC51破解
  5. 前端vue后台管理系统项目优化
  6. 树莓派python编程自学-树莓派Python编程指南 中文PDF扫描版
  7. 如何获取音乐的地址链接
  8. PageHelper获取数据总条数
  9. Skype 登陆地址或登陆凭据有问题的解决方法
  10. python爬虫抖音主播_Python 爬取抖音视频