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

    探索

    编译型和解释型的区别

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

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

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

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

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

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

    扩展

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

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

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

    动态语言和静态语言

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

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

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

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

    小结:

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

    参考资料:

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

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

    展开全文
  • 什么是动态语言呢?

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

      可以简单的理解为直接被解释执行的语言称为动态语言。而需要编译环境将程序转换为其它的编码再执行的语言称为静态语言。

      当前静态语言有:Java、C/C++、C#、Delphi、VB等。

      动态语言有:ASPPHPCGI、lisp、Perl、python,Smalltalk、Ruby等。

      对于动态语言,每个人心中都有自己的排序,各自喜好不同。但是对于动态语言越来越受重视是很多人的共识。众多的动态语言当中,谁将成为主流语言,众说纷芸,各持已见。而我最看好的动态语言将从下面三种语言中产生。为什么我会锁定在三种语言上呢?除了语言自身的优势外,另外一点最主要的原因就是其被后的力量。任何一种产品想成为主流都离不开强大的财团支持,开发语言也不例外。

      1、php 动态语言之精典

      对于php语言,笔者的个人感情较浓,从第一次接触它就被其简单、灵活、功能之强大所征服。更快的处理效率,迅速的部署及PHP的跨平台的特性让其应用更为广泛,相信俱有跨平台特性的动态语言中没有任何一个语言能及php语言的普及率高。很多大的网站使用着PHP,历史证明,它是一个经得起考验的动态语言。另外,php的开源环境也相当出色。世界各地数以万计的程序员,采用PHP编写程序。你可以从PHP相关的网站、社区等找到各类优秀的开源程序代码。

      最近IBM、Oracle 正尝试把PHP 应用到SOA 之中,再一次证明了PHP的优秀。虽然PHP存在着维护困难,复用性低等问题,但这些并不能影响其最终成为主流的动态语言。前不久IBM还基于Apache Geronimo项目推出了为it WebSphere Application Server Community Edition开发PHP集成工具集。该工具集能让开发人员在SOA中开发服务时使用PHPJava。zend也推出了php开发框架,这些技术将帮助软件公司创建企业级PHP应用。 PHP会变得更加广泛,从当前网站技术上的胜行,到企业级WEB应用,php必将成为最有竞争力的动态语言。

      2、在java的基础上产生新的语言

      java语言的发展是有目共睹的,早已成为时下最为主流的开发语言。在java环境下的应用层出不穷,特别是JDK1.5发布之后,java在性能上的提升已今非惜比。对于动态语言的支持早就在日程当中。

      在Lang.net 2006 会议上, Sun公司宣布将积极参与让JVM支持动态语言的开发项目.将会增加一个新的JVM 指令——invokedynamic,用来设计对动态语言对象的支持。然而主仅仅是一个开始。我想java平台将会全面支持动态语言,俱备运行时更改类结构或相关配置。另外很类技术人员都知道Sun已经整体收购了JRuby项目,sun公司对于动态语言的发展是有备而战的。目前java平台下的动态语言有Groovy、nice、BeanShell、Jython、JRuby、Rhino(JavaScript)、Jacl(TCL)、Bistro(SmallTalk)、Kawa(Lisp/Schema),真是越来越多了。java下这么多的动态语言建议选择Groovy,感觉血统较为正宗,兼容Java的语法,java程序员学习起来较为容易,上手较快。

      由于2EE太过于复杂,面对当前的行业需要,必将会在java语言的基础上发展出一种新的基于java的动态语言,使WEB开发过程变得更快,更简洁,但又不失java自身的特点。使Java在WEB开发能力上达到前所未有的提升。由于sun及IBM公司的推动,反微软企业的支持,还有企业的认可,基于java语言所产生的动态语言也必将会成为动态语言家族中有力的竞争对手。

      3、.net的动态语言

      微软的动态语言用的人最多的应该是asp,现在发展到ASP.NET。看微软在开发语言方面的发展,他们一定不会放弃这块肥肉,并会加大投入力度,与其它的动态语言提供商火拼到底。只要是有利可图的地方,没有微软不想伸脚的,更何况这是一块大肥肉呢。

      前不久微软CLR开发组的负责人Jim Hugunin表示,微软将加强对CLR中的动态语言的支持。并将会发布成熟的软件模式,细化到代码中,放在库中供开发者调用,以帮助他们通过.Net Framework上的动态语言开发自己的应用程序。种种迹像表明微软在动态语言方面没闲着,正紧锣密鼓实施着一系例动作。

      我把微软的动态语言列为最可能成为主流动态语言的原因是因为其Windows的平台无所不在。这是无法否认的。微软势比处投入重手,增强竞争能力。以微软的人力、财力,想不分给微软一块蛋糕是不可能的。有钱就是好,投入大笔的资金,什么都可以做。

      有人一定会反问我,为什么把其它的动态语言抛开不谈。Perl语言过时了,虽然还有一些公司在使用,但早已不是主流。python、Ruby最近几年开始火起来的动态语言,我并不看好它们,虽然它们是很优秀的语言,但是优秀并不帶表会成为主流。正如操作系统一样,大家都有个共识就是,unix、Linux很优秀,但是并不是主流系统。当然会有人反驳说应用场景不同,不能一概而论。那么开发语言也一样,我说的是大众主流,大众主流就是指最广泛的被采用。

      有人说,未来动态语言会取代静态语言,将一统天下,我并不这样认为,相信应该是动态语言与静态语言互相辅助,各在其擅长的方面发挥作用。比如多线程,目前的动态语言支持都不如静态语言的好,很多还不支持。

      对于语言的选择,一般性的应用,完全可以采用动态语言完成,也可以采用静态语言,这要看撑握语言的人或是需求而决定。更为灵活,更容易扩展及复用的方式是采用动态语言+静态语言的方式。前台功能采用动态语言实现,后台服务采用静态语言实现,充分利用各自的优势。当前在java的WEB应用开发过程中,采用模板技术就是这类应用模式的一个雏型。java的模板技术很多都支持简单的编程,如逻辑控制等。当然现在还不能称其为一种语言,但是相信,这一切随着动态语言的发展并将成为一种新的语言。

      动态语言必将大行其道,但是不是独行,而将与静态语言相辅相成。 

    展开全文
  • 动态语言理解

    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:12
    这次我们说一下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")
    给类绑定静态方法和绑定类方法是相同的。

    展开全文
  • 什么是动态语言?

    2007-05-25 10:31:00
    什么是动态语言呢? 可以简单的理解为直接被解释执行的语言称为动态语言。而需要编译环境将程序转换为其它的编码再执行的语言称为静态语言。 当前静态语言有:Java、C/C++、C#、Delphi、VB等。 动态语言有:ASP、PHP...
  • 动态类型语言&动态语言

    千次阅读 2017-11-18 18:56:34
    动态语言 动态类型语言首先,这是两个不同的概念动态语言 dynamic programming language程序运行时,允许改变程序结构(例如引进新函数、删除旧函数)或变量类型。 从这个观点来看,Perl、Python、Ruby是动态语言,...
  • 静态语言和动态语言的区别

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

    万次阅读 多人点赞 2017-10-30 11:20:20
    编译型语言和解释型语言 1、编译型语言 需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。 编译是把源代码编译成机器码, 链接是把...
  • 通常我们所说的动态语言静态语言指 动态类型语言(Dynamically Typed Language) 静态类型语言Statically Typed Language)。 还有一个 Dynamic Programming Language (动态编程语言),静态编程语言。 ...
  • 动态语言和静态语言
  • 1、动态语言和静态语言通常我们所说的动态语言静态语言是指动态类型语言和静态类型语言。(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也...
  • 动态语言和静态语言

    2012-02-01 10:37:25
    在说明什么是动态语言和静态语言之前,先澄清一下标题中的名字。 我们通常的所指的动态语言和静态语言其实是动态类型类型语言和静态类型语言。   上面的2句话被删除了,因为是错误的,那是我当初的认识。 动态语言...
  • 编译型语言和解释型语言  计算机是不能理解高级语言,当然也就不能直接执行高级语言了。计算机只能直接理解机器语言,所以任何语言,都必须将其翻译成机器语言,计算 机才能运行高级语言编写的程序。  一、编译...
  •  通常我们所说的动态语言静态语言是指动态类型语言和静态类型语言。 (1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言 ,也就是说,在用动态类型的语言编程时,永远也不用给任何...
  • 动态语言静态语言的区别

    千次阅读 2017-08-31 10:15:04
    通常我们所说的动态语言静态语言指 动态类型语言(Dynamically Typed Language) 静态类型语言Statically Typed Language)。 还有一个 Dynamic Programming Language (动态编程语言),静态编程语言。 ...
  • 静态语言和动态语言之探索

    千次阅读 2018-05-18 14:30:13
    有三个名词容易混淆:Dynamic Programming Language (动态语言或动态编程语言)Dynamically Typed Language (动态类型语言)Statically Typed Language (静态类型语言)静态类型语言的类型判断是在运行前判断(如编译...
  • 动态语言和静态语言 1.动态类型语言:是指在运行期间才去做数据类型检查的语言。在用动态语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种...
  • 我们先看看编译型,其实它汇编语言是一样的:也是有一个负责翻译的程序来对我们的源代码进行转换,生成相对应的可执行代码。这个过程说得专业一点,就称为编译(Compile),而负责编译的程序自然就称为编译器...
  • 问题1:静态语言和动态语言的区别是什么? 问题2:强类型语言和弱类型语言的区别是什么? 问题3:以你实际举例,用过哪些动态、静态语言?以及强类型,弱类型语言? 问题1:静态语言和动态语言的区别是什么? 答...
  • 根据语言特性分类根据语言的执行方式可以分为解释型语言编译性语言根据...优缺点对比静态语言:这个概念是相比较动态语言的特性产生的概念。脚本语言:即扩建语言,是为了缩短传统的编写-编译-链接-运行(edit-co...
  • 什么是动态语言和静态语言?http://haohetao.iteye.com/blog/589070   Java语言的动态性支持(一) http://uuhorse.iteye.com/blog/1705684   Java语言的动态性支持(二) ......
  • 1、动态语言和静态语言通常我们所说的动态语言静态语言是指动态类型语言和静态类型语言。(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也...
  • 首先要清楚静态类型语言和动态类型语言的判别的标准 定义:如果类型检查发生在编译阶段(compile time),那么是静态类型语言(statically typed languages)中,相反的,如果类型检查发生在运行阶段(run time),那么是...
  • 三分钟看懂编译型语言和解释型语言概念、特点、区别,动态语言和静态语言的优缺点 编译型语言和解释型语言: 0.补充: 1.计算机并不能直接识别各种编程语言,需要将各种编程语言转化成机器能够识别的指令集, 2.由于...
  • 1.动态语言 动态语言是在运行时才确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。 例如PHP、ASP、Python、SQL、JavaScript、Unix Shell等等。 动态语言的优势:思维不受...

空空如也

1 2 3 4 5 ... 20
收藏数 786,673
精华内容 314,669
关键字:

动态语言