• 不同编程语言的宏观区别


    编译型语言和解释型语言

    1、编译型语言

    需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。

    编译是把源代码编译成机器码,

    链接是把各个模块的机器码和依赖库串连起来生成可执行文件。

    优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行
    缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
    代表语言:C、C++Pascal、Object-C以及最近很火的苹果新语言swift

    2、解释型语言

    解释性语言的程序不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译
    优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
    缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
    代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby,java

    3、混合型语言

    既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕。就出现了半编译型语言。比如C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行。Java先生成字节码再在Java虚拟机中解释执行。严格来说混合型语言属于解释型语言。C#更接近编译型语言。

    JAVA的源代码首先被编译成字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码。----可以理解为半编译半解释,因为java编译后并不能直接运行,需要利用虚拟机。

    动态语言和静态语言

    1、动态语言

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

    2、静态语言

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

    有三个名词容易混淆:
    Dynamic Programming Language (动态语言或动态编程语言)
    Dynamically Typed Language (动态类型语言)
    Statically Typed Language (静态类型语言)

    可以从变量赋值角度看:c,c++,java都是先定义变量类型,不可变,python/js则不然一个变量可以在运行时根据情况赋予不同类型的数据。

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

    1、动态类型语言

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

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

    动态语言:说的是运行是改变结构,说的是代码结构。
    动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段
    主要语言:Python、Ruby、Erlang、JavaScript、swift、PHP、Perl

    2、静态类型语言

    静态语言的数据类型是在编译期间(或运行之前)确定的,编写代码的时候要明确确定变量的数据类型
    主要语言:C、C++、C#、Java、Object-C

    结论

    静态语言/编译型语言---------> 一次编译无限执行,有编译器优化,执行效率高,移植性差;

    动态语言/解释性语言---------> 边解释边运行,更灵活,平台兼容性好,执行效率差。

  • 相关阅读:
    log4Net使用
    VS Code入门
    用VS Code写Python
    C#(99):LINQ查询操作符实例
    C#(99):LINQ to Objects(2)
    spring mvc 配置对静态资源的访问
    EntLib 自动数据库连接字符串加密
    块级格式化上下文( Block formatting contexts)
    Entlib DAAB映射枚举类型
    js 继承
  • 原文地址:https://www.cnblogs.com/Henry-ZHAO/p/12725131.html
Copyright © 2020-2023  润新知