编译语言与解释语言,动态与静态,以及强类型和弱类型的区别
编译和解释的区别是什什么?
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机
可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度
是不如编译后的程序运行的快的
这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)
编译型vs解释型
1、编译型语言
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编
译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生
成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的
可执行文件。
2、解释型语言
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了了解释器(虚拟机)。
灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
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是静态类型语言,是强类型语言。
转载于:https://www.cnblogs.com/ppf3678/p/9671733.html
编译语言与解释语言,动态与静态,以及强类型和弱类型的区别相关推荐
- Java是动态语言还是静态语言,是强类型还是弱类型?
一. 前言 今天小熙突然想到一个问题,那就是Java到底是动态语言还是静态语言,是强类型还是弱类型呢?虽然知道但是还是不够深入,接下来就一起探讨下吧. 二. 图释 小熙碰巧看到一张图,完美的区分了以上 ...
- java 强类型 弱类型_强类型,弱类型,静态类型,动态类型的区别
强.弱类型 强类型strongly typed: 如果一种语言的所有程序都是well behaved--即不可能出现forbidden behaviors,则该语言为strongly typed. 弱 ...
- python程序设计语言是什么类型的语言-Python 是弱类型的语言 强类型和弱类型的语言区别...
Python 是弱类型的语言 在强类型的编程语言中,定义变量时要指明变量的类型,而且赋值的数据也必须是相同类型的,C语言.C++.Java 是强类型语言的代表. 下面我们以 C++ 为例来演示强类型语 ...
- (动态,静态)(解释,编译)(强类型,弱类型)
1 动态语言和静态语言通常我们所说的动态语言.静态语言是指动态类型语言和静态类型语言.1 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不 ...
- 编程语言分类 -- 强类型与弱类型、动态类型与静态类型
文章内容输出来源:拉勾教育 大前端高薪训练营 前言 在拉勾教育大前端高薪训练营学习的过程中,了解到编程语言除了以前常说的高级语言与低级语言之分,还可以根据类型安全分为强类型语言与弱类型语言,也可以根据 ...
- java的强类型语言与JavaScript(js)的弱类型语言
强类型 java语言是一种强类型语言,强类型怎么理解? java语言存在编译阶段,假设有代码:int i; 那么在Java中有一个特点是:java程序编译阶段就已经确定了 i变量的数据类型,该i变量的 ...
- c语言动态与静态分配内存空间的区别
所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法.动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程 ...
- php和其他语言的区别,为什么说php是弱类型好学,跟其他语言的区别
我想说:"Php的强大不言而喻",这里会应该会有人说这个语言最强大,那个语言最好,小编声明本栏目不比较哪个语言好与不好,本栏目只针对php语言的本性,以及跟我一样在学习php的朋友 ...
- python是动态语言还是静态语言?强类型语言还是弱类型语言
首先要清楚静态类型语言和动态类型语言的判别的标准 定义:如果类型检查发生在编译阶段(compile time),那么是静态类型语言(statically typed languages)中,相反的,如 ...
最新文章
- Db4o结合Linq、Lambda表达式的简单示例
- 管理系统中计算机应用知识总结,自考《管理系统中计算机应用》章节知识点复习:管理信息...
- 在DataGireView中加筛选条件
- openresty开发系列34--openresty执行流程之4访问阶段
- 利用计算机录音模拟声波,2016年计算机一级考试题库及答案
- Angular Service
- 玉林中专计算机专业,玉林最好的中专学校有哪些 十大中专学校排名
- datetimepicker中文不生效_搜索引擎技术(二十)- elasticsearch - 中文分词器
- Microsoft Blazor——快速开发与SQL Forms开源平台Platz.SqlForms
- 初学C++——VS2013开发工具包下载及破解
- php fseek函数,C++_详解C语言中fseek函数和ftell函数的使用方法,fseek函数:int fseek(FILE * _ - phpStudy...
- winrar 注册码
- html密码查看器,浏览器密码查看工具(WebBrowserPassView)
- SAP中多层扩展有效地bom
- 初学者如何3步入门选吉他,附上新手购琴常见问题和吉他品牌推荐
- 170815 WarGames-Krypton(0-6)
- 聚类分析在SPSS、Matlab与R中的实现(转载: Liu Xuhua 机会的数学 )
- 使用计算机的安全事项,电脑安全使用注意事项
- 机器学习常见任务类型
- MySQL多表查询练习