动态语言_动态语言和静态语言 - CSDN
精华内容
参与话题
  • 先来看看编译型语言定义: 编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码 (二进制)。 再来看看解释型语言的定义: 解释型语言的源代码不是直接翻译成机器指令,而是先翻译成中间代码,再由...

    探索

    编译型和解释型的区别

    先来看看编译型语言定义:

    编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码 (二进制)。

    再来看看解释型语言的定义:

    解释型语言的源代码不是直接翻译成机器指令,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。

    咋看一眼,还是一脸懵逼。下面打个比方:

    • 编译型相当于用中英文词典(翻译器)将一本英文书一次性翻译(编译)成一本中文书。以后查看直接就是中文了。可想而知,以后读书(运行)会非常非常方便。
    • 解释型相当于用中英文词典(翻译器)将一本英文书读一段翻译一段(解释)中文。以后查看时还是需要重新翻译。这样效率会低一些,必须依赖解释器,但是跨平台性好。

    扩展

    编译型和解释型的定义是对立存在的,但也可以在一个语言中同时存在。比如 java 语言同时兼有编译型和解释型特点。整个流程如下:

    将源代码(.java 文件)编译生成字节码(.class 文件),再通过 JVM(java 虚拟机)运行生成机器指令,由机器运行机器码。注意,此处生成机器语言前的操作是解释型,每次运行都要重新解释。因此,此处表明 java 是解释型
    但是,部分 JVM(java 虚拟机)有一种 JIT(Just in time)机制,能够将部分已经解释翻译的常用机器指令保存。下次不需要解释,直接运行即可。此时 java 是编译型

    因此,现在用编译型和解释型区分语言是行不通的。

    动态语言和静态语言

    我们常说的动态语言和静态语言,其实是指动态类型语言和静态类型语言。先来看看动态类型语言:

    动态类型语言,是指数据类型的检查是在运行时做的。用动态类型语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部记录数据类型。

    再来看看静态类型语言的定义:

    静态类型语言,是指数据类型的检查是在运行前(如编译阶段)做的。

    小结:

    • 动态类型语言的优点是不需要写多种数据类型的代码,代码相对简洁一些,方便代码阅读。缺点是不方便调试,代码命名也容易混淆;
    • 静态类型语言的优点是方便调试,代码相对规范。缺点是需要写很多数据类型相关的代码,代码不够简洁。

    参考资料:

    百度百科:编译型语言
    百度百科:解释型语言
    知乎:Java 是编译型语言还是解释型语言?
    IBM:深入浅出 JIT 编译器
    逛博:编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的区别

    本文均为作者原创,未经允许和授权,不得转载,违者必究!

    展开全文
  • 动态语言和静态语言的区别

    万次阅读 多人点赞 2019-05-29 16:37:46
    编译型语言和解释型语言 1、编译型语言 需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。 编译是把源代码编译成机器码, 链接是把...

    本文转自:https://www.cnblogs.com/zy1987/p/3784753.html?utm_source=tuicool
     

    编译型语言和解释型语言

    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在编译成机器码缓存在内存中,下次直接执行。Java先生成字节码再在Java虚拟机中解释执行。严格来说混合型语言属于解释型语言。C#更接近编译型语言。

    动态语言和静态语言

    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。

    展开全文
  • 动态语言理解

    2018-07-09 17:34:22
    1、什么是动态语言 ​ 动态编程语言是高级程序设计语言的一个类别,他是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被改进,已有的函数可以被删除或者是其他的结构上的变化。动态语言有:...

    Python是一门动态的语言

    1、什么是动态语言

    ​ 动态编程语言是高级程序设计语言的一个类别,他是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被改进,已有的函数可以被删除或者是其他的结构上的变化。动态语言有:javascript、php、Ruby、Python等都是动态语言。

    2、运行过程中给对象绑定(添加)属性

    In [1]: class Person(object):
       ...:     def __init__(self, new_name):
       ...:         self.name = new_name
       ...:         
    
    In [2]: wang = Person("老王")

    ​ 上面的代码中,我们定义了一个Person类,在类中有一个初始属性name,如果我们想添加age属性呢?

    In [3]: wang.age = 18
    
    In [4]: print(wang.name)
    老王
    
    In [5]: print(wang.age)
    18

    ​ 要给实例对象添加实例属性,可以直接对象名.属性 = 值

    3、运行的过程中给类绑定(添加)属性

    ​ 上面我们在运行过程中给实例对象添加了属性,那么我们再创建一个实例对象,能不能直接去调用age属性呢?

    In [6]: li = Person("老李")
    
    In [7]: li.age
    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-7-683a5751e9b0> in <module>()
    ----> 1 li.age
    
    AttributeError: 'Person' object has no attribute 'age'

    ​ 我们发现在实例对象li中没有age这个属性,我么想给所有的Person的实例都加上age属性怎么办?答案就是直接给Person添加属性:

    In [8]: Person.age = 0
    
    In [9]: li = Person("老李")
    
    In [10]: li.age
    Out[10]: 0

    4、运行过程中给类添加方法

    ​ 首先我们定义一个函数:

    def print_msg(self):
        print("姓名:%s,年龄:%d" % (self.name, self.age))

    ​ 上面我们直接给对象绑定属性,直接实例对象.属性 = 值,那给实例对象添加方法呢?可不可以直接实例对象.方法名 = 方法名呢?

    wang.print_mag = print_msg
    # 会直接产生异常 AttributeError: 'Person' object has no attribute 'print_msg'
    # 是因为在调print_msg方法的时候,self并没有参数

    ​ 那么我们怎么做才能添加呢?

    import types
    wang.print_msg = types.MethodType(print_msg, wang)

    5、添加类方法

    @classmethod
    def p_class(cls):
        cls.num = 100
    
    # 动态添加类方法
    Person.p_class = p_class
    Person.p_class()
    print(Person.num)

    6、添加静态方法

    @staticmethod
    def run():
        print("-----------run----------")
    
    # 动态添加静态方法
    Person.run = run
    li.run()

    7、__slots__


    • 动态语言:可以再运行过程中,修改代码

    • 静态语言:编译时已经确定好代码,运行过程中不能修改

    如果我们想要限制实例的属性,怎么办?

    比如,只允许对Person添加name、age、sex属性。

    在Python中为了达到限制的目的,Python是允许在定义class的时候,定义一个特殊的__slots__,来限制class实例能添加的属性

    In [12]: class Person(object):
     ....:     __slots__ = ("name", "age", "sex")
     ....:     
    
    In [13]: p = Person()
    
    In [14]: p.name = "老王"
    
    In [15]: p.age = 18
    
    In [16]: p.sex = "男"
    
    In [17]: p.address = "隔壁"
    <hr />
    
    AttributeError                            Traceback (most recent call last)
    <ipython-input-17-c00075f138fc> in <module>()
    ----> 1 p.address = "隔壁"
    
    AttributeError: 'Person' object has no attribute 'address'

    注意点:


    • 使用slots要注意,slots定义的属性仅对当前类实例起作用,对继承的子类是不起作用的

    展开全文
  • 动态语言

    2017-08-28 20:25:17
    这次我们说一下Python是一种动态语言。 所谓动态语言就是可以在运行时改变其结构语言,例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是在其他结构上的变化。 ok,基本的概念我们知道了,下面就用...

    这次我们说一下Python是一种动态语言。

    所谓动态语言就是可以在运行时改变其结构语言,例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是在其他结构上的变化。

    ok,基本的概念我们知道了,下面就用代码来演示一下加强对动态语言的理解。

    运行过程中给对象添加一个属性

    class Person(object):
        def __init__(self, name, sex):
            self.name = name
            self.sex = sex
    p = Person("小明", "男")
    这里我们定义了一个Person类,Person类里面有两个属性,name和male。但是我们我知道一个人的基本信息最起码应该有年龄,但是却没有在类中定义到,好了,现在动态语言就发挥它的威力了。

    我们可以在运行的过程中给对象添加一个age属性

    运行过程中给对添加一个属性

    class Person(object):
        def __init__(self, name, sex):
            self.name = name
            self.sex = sex
    Person.age = 20
    p = Person("小明", "男")
    print(p.age)

    运行过程中给类添加方法(实例方法)

    这个与之前添加属性就有点不同了,需要使用types模块中的MethodType。

    print(help(types.MethodType))
    我们可以使用帮助来查看MethodType的用法


    第一个参数传入函数名,第二个参数传入一个对象或实体,也就是传入的函数名绑定到了后面的对象上。

    import types
    
    
    class Person(object):
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def eat(self):
            print("吃饭")
    
    
    def sleep(self):
        print("我叫%s,我要睡觉" % self.name)
    p = Person("小明", 20)
    p.sleep = types.MethodType(sleep, p)
    p.sleep()
    需要注意的是:绑定完对象后,需要使用p.sleep来进行接收之后才可以调用sleep方法

    我们再来说说types.MethodType(sleep, p)这句话的意思

    其实相当于给sleep函数传入参数p,然后再找个一个变量进行接收,变量名可以是任何的,但是我们为了让sleep与p进行绑定所以使用p接收。

    p对象后面的.sleep 相当于在p对象中有一个变量叫做sleep,这时sleep也就指向了sleep函数。当我们使用p.sleep的时候就相当于调用了sleep函数

    运行过程中给类绑定静态方法

    class Person(object):
        def eat(self):
            print("吃饭")
    
    
    @staticmethod
    def sleep():
        print("睡觉")
    
    Person.sleep = sleep
    Person.sleep()
    Person.eat("None")

    格式:类名.绑定的函数名 = 绑定的函数名

    运行过程中给类绑定类方法

    class Person(object):
        def eat(self):
            print("吃饭")
    
    
    @classmethod
    def drink(cls):
        print("喝水")
    Person.drink = drink
    Person.drink()
    Person.eat("None")
    给类绑定静态方法和绑定类方法是相同的。

    展开全文
  • Dynamic Programming Language (动态语言或动态编程语言) 动态语言,准确地说,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)...
  • 静态语言和动态语言的区别

    千次阅读 2018-12-14 12:53:30
    我心血来潮就去百度了一番动态语言和静态语言的具体区别,一番百度才发现自己原来的想法不够全面,所以在这里做个笔记。 基本概念 动态类型语言:在运行期进行类型检查的语言,也就是在编写代码的时候可以不指定...
  • 什么是动态语言呢?

    千次阅读 2007-04-04 09:43:00
    可以简单的理解为直接被解释执行的语言称为动态语言。而需要编译环境将程序转换为其它的编码再执行的语言称为静态语言。 当前静态语言有:Java、C/C++、C#、Delphi、VB等。 动态语言有:ASP、PHP、CGI、lisp、Perl、...
  • 动态类型语言&动态语言

    千次阅读 2017-11-18 18:57:25
    动态语言 动态类型语言首先,这是两个不同的概念动态语言 dynamic programming language程序运行时,允许改变程序结构(例如引进新函数、删除旧函数)或变量类型。 从这个观点来看,Perl、Python、Ruby是动态语言,...
  • 未来几年动态语言谁将成为主流

    万次阅读 热门讨论 2006-09-17 02:51:00
    什么是动态语言呢? 可以简单的理解为直接被解释执行的语言称为动态语言。而需要编译环境将程序转换为其它的编码再执行的语言称为静态语言。 当前静态语言有:java、C/C++、C#、DELPHI、VB等。 动态语言有:asp、...
  • 静态和动态是针对变量的数据类型而言的。
  • 通常我们所说的动态语言、静态语言指 动态类型语言(Dynamically Typed Language)和 静态类型语言Statically Typed Language)。 还有一个 Dynamic Programming Language (动态编程语言),静态编程语言。 ...
  • 动态语言会淘汰静态语言吗?

    万次阅读 热门讨论 2011-01-04 17:56:00
    上一篇博客动态语言会导致开发质量下降吗?,尽管没有我想像的那么多争议,但还是如期引发了一些误解。有一些朋友指出动态语言,具体来说是 Python 中的各种问题。这些我认为是大部分是正确的。我写上文的用意,在于...
  • 解释型相对于编译型语言存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。比如Python/JavaScript / Perl /Shell等都是解释型语言。 解释型语言:程序不需要编译,...
  • 编译型语言和解释型语言  计算机是不能理解高级语言,当然也就不能直接执行高级语言了。计算机只能直接理解机器语言,所以任何语言,都必须将其翻译成机器语言,计算 机才能运行高级语言编写的程序。  一、编译...
  • 说说动态语言

    万次阅读 热门讨论 2006-05-11 20:33:00
    五一长假之前,我跟好几个开发一线的朋友聊技术的发展,突出的一个感觉是大家都在关注动态语言。有的是使用多年,眼见发展态势不错,大有为自己的先见之明扬眉吐气之感,有的则是刚刚使用,仍处在兴奋不已的状态之中...
  • 三种服务器端动态开发语言的比较

    千次阅读 2016-01-25 15:26:20
    三种服务器端动态开发语言的比较  摘自百度百科  ASP全名Active Server Pages,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的WEB服务应用程序。ASP采用脚本语言VBScript(Java ...
  • 强类型(strong typed、Explicit typed)与弱类型(weakly typed或loosely typed或Implicit typed )的区别可以简单的概括为是否支持隐式转换。 例如:"...静态语言(Statically Typed)与动...
  • 编译型语言和解释型语言 1、编译型语言 需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块...
  • 编程语言的分类与关系

    万次阅读 多人点赞 2018-07-05 13:28:39
    编译型语言:使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。特点:在编译型语言写的程序执行之前,需要一个专门的...
  • 关于如题这几个概念,大部分人应该比较熟悉,但是我昏了好久,所以写下来加深印象。 1. 动态语言 ...除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。 而其实我们平时说
1 2 3 4 5 ... 20
收藏数 767,672
精华内容 307,068
关键字:

动态语言