语言甄别笔记

1.解释性语言和编译型语言的区别

编译性语言

源代码→机器代码

(1)只须编译一次就可以把源代码编译成机器语言,后面的执行无须重新编译,直接使用之前的编译结果就可以;因此其执行的效率比较高;

(2)编译性语言代表:C、C++、Pascal/Object Pascal(Delphi);

(3)程序执行效率比较高,但比较依赖编译器,因此跨平台性差一些;因为不同平台对编译器的影像较大,

解释性语言

源代码—>中间代码—>机器语言

源代码不能直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行;

(2)程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次;

(3)解释性语言代表:Python、JavaScript、Shell、Ruby、MATLAB等;

(4)运行效率一般相对比较低,依赖解释器,跨平台性好;

  • (1)一般,编译性语言的运行效率比解释性语言更高;但是不能一概而论,部分解释性语言的解释器通过在运行时动态优化代码,甚至能使解释性语言的性能超过编译性语言;
  • (2)编译性语言的跨平台特性比解释性语言差一些;
  • 但是个人觉得正如一位网友所说的那样,解释性或编译性和语言本身是没有关系的,即解释性或编译性可以看作是一种语言的状态;
  • java语言应是编译性-解释性语言,因为其同时具备编译性和解释性两种特性;

2.静态语言和动态语言的区别

1、动态语言

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

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

2、静态语言

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

PS:C#不是动态语言,但是MS有将.NET支持动态语言的趋势,3.0吸收了一定动态特征,比如 匿名函数,临时类型,临时变量等

有三个名词容易混淆:

Dynamic Programming Language (动态语言或动态编程语言)

Dynamically Typed Language (动态类型语言)

Statically Typed Language (静态类型语言)

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

1、动态类型语言

动态类型语言和动态语言是完全不同的两个概念。

动态类型语言:是指在运行期间才去做数据类型检查的语言,说的是数据类型,

动态语言:说的是运行是改变结构,说的是代码结构。

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

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

2、静态类型语言

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

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

原文地址:https://www.cnblogs.com/heikejingxiao/p/11269313.html