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

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

编译型语言和解释型语言

1、编译型语言

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

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

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

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

2、解释型语言

解释性语言的程序不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译。

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

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

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

3、混合型语言

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

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

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

动态语言和静态语言

1、动态语言

是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。

主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。

2、静态语言

与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。

3、注意:

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

C#也是动态语言,通过C#的反射机制可以动态的插入一段代码执行。所以我说C#是这个星球最好的编程语言。

动态类型语言和静态类型语言

1、动态类型语言

很多网上资料把动态类型语言和动态语言混为一谈,简直是误人子弟。动态类型语言和动态语言是完全不同的两个概念。动态类型语言是指在运行期间才去做数据类型检查的语言,说的是数据类型,动态语言说的是运行是改变结构,说的是代码结构。

动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。

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

2、静态类型语言

静态语言的数据类型是在编译其间确定的或者说运行之前确定的,编写代码的时候要明确确定变量的数据类型。

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

3、注意:

相当一部分程序员,也包括曾经的我,认为解释型语言都是动态类型语言,编译型语言都是静态类型语言。这个也是错的。swift是编译型语言但是它也是动态类型语言。C#和Java是解释型语言也是静态类型语言。

强类型语言和弱类型语言

1、强类型语言:

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

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

2、弱类型语言:

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

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

3、注意:

一个语言是不是强类型语言和是不是动态类型语言也没有必然联系。Python是动态类型语言,是强类型语言。JavaScript是动态类型语言,是弱类型语言。Java是静态类型语言,是强类型语言。

 

【转自】http://www.cnblogs.com/zy1987/p/3784753.html?utm_source=tuicool&utm_medium=referral

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119399.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java中所有的关键字及用法

    Java中所有的关键字及用法基本数据类型:int:int基本数据类型,内存空间占8位取值范围-128~127inti=10;floatfloat基本数据类型,内存空间占32位取值范围-2^31~-2^31-1floatf=10.0f;longlong基本数据类型内存空间占64位取值范围-2^63~-2^63-1longl=10l;shortshort基本数据类型内存空间占16位取值范围-2^15~-2^15-1s…

  • 中断-NVIC与EXTI外设详解(超全面)

    中断-NVIC与EXTI外设详解(超全面)一.NVIC-嵌套向量中断控制器NVIC:嵌套向量中断控制器,属于内核外设,管理着包括内核和片上所有外设的中断相关的功能。这里解释一下片上外设与内核外设他们都在芯片里面,但内核外设是在内核CPU里面,片上外设就是内核之外咯。NVIC是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。但是各个芯片厂商在设计芯片的时候会对Cortex-M3内核里面的NVIC进行裁剪,把不需要的部分去掉,所以STM32的NVIC是Cortex-M3的NVIC

  • linux hexdump显示格式c数组,hexdump命令

    linux hexdump显示格式c数组,hexdump命令hexdump命令一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。语法hexdump[选项][文件]…选项-nlength只格式化输入文件的前length个字节。-C输出规范的十六进制和ASCII码。-b单字节八进制显示。-c单字节字符显示。-d双字节十进制显示。-o双字节八进制显示。-x双字节十六进制显示。-s从偏移量开始输出。…

  • 网站备案是域名备案还是服务器备案(域名备案一定要服务器吗)

    网站域名服务器怎么备案内容精选换一换WordPress简称WP,最初是一款博客系统,后逐步演化成一款免费的CMS(内容管理系统/建站系统)。本文档指导用户使用华为云市场镜像“Wordpress官方正式版”部署WordPress博客系统。已购买虚拟私有云和弹性公网IP。如果规划为网站配置域名,需已经购买好相应的域名。弹性云服务器所在安全组添加了如表1所示的安全组规则,具体步骤空壳网站指备案主体已在…

  • 安利一款免费、开源、实时的服务器监控工具:Netdata

    安利一款免费、开源、实时的服务器监控工具:NetdataNetdata是一个免费、开源、实时的服务器监控工具,可以可视化和监控实时数据,如CPU使用率、RAM使用率、负载、SWAP使用率、带宽使用率、磁盘使用率等。它可以帮助系统管理员了解您的系统或应用程序中正在发生的事情以及刚刚发生的事情。它可以安装在任何物理服务器、虚拟机、容器和物联网设备上。它提供了一个交互式Web界面来查看您的服务器指标,并支持用于持久存储的各种数据存储。在本教程中,我们将向您展示如何在AlmaLinux8上安装Netdata监控工具。先决条件运行Alm

  • 智能小区管理系统_php导航网源码

    智能小区管理系统_php导航网源码☞文末有福利哟,请关注小枣获取方案智慧小区智慧物业管理系统一体化解决方案传统物业在管理上不仅成本高,服务质量也很难有所保障。现在很多小区都安装了智能物业管理系统,它将信息手段与现代物业管理工作相结合,帮助物业管理团队及时响应客户需求,降低运营成本,提升服务品质。智慧物业是指充分利用物联网、云计算、移动互联网等新一代信息技术的集成应用,将物业各个单位紧密连接起来,实现数据的融合,建立起高效…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号