精华内容
参与话题
问答
  • 动态语言与静态语言

    2020-06-06 21:35:55
    动态语言无需编译,它由解释器动态解释执行,一般来说,动态语言拥有比静态语言更大的灵活性和表达能力。动态语言优势在于灵活,易于开发和学习,劣势在于性能较低。在高性能服务器和并行处理的实现方案里,动态语言...

    在这里插入图片描述

    动态语言也称为脚本语言,是介于标签语言(如HTML,XSLT,VML)和静态语言(如C++、C#、Java,也称编译语言)之间的语言。JavaScript、PHP、Perl、Ruby等都是动态语言。动态语言无需编译,它由解释器动态解释执行,一般来说,动态语言拥有比静态语言更大的灵活性和表达能力。动态语言优势在于灵活,易于开发和学习,劣势在于性能较低。在高性能服务器和并行处理的实现方案里,动态语言的优势掩盖自身的不足。一般来说,完成同样逻辑功能的程序,使用Ruby或Python之类的动态语言所需的代码量往往只有使用Java实现版本的1/10,相比C/C++差距更大。近两年来,动态语言似乎有山雨欲来风满楼的气势。在各大开发技术网站,有大量介绍动态语言的文章,在各大论坛里,人们针对动态语言的学习、交流、论战、预测的帖子不断成为抢眼热帖,搅动着开发者的神经。动态语言最突出的特性是语法简洁灵活,易于学习,拥有大量高级程序库,无须从底层开始搭建程序,降低了应用实现的难度。一个C++程序员,往往经过了几年的训练仍然不能开发出可用的程序,但动态语言的程序员经过几个月的训练就已经可以编写出可复用性的代码了。此外,动态语言的代码往往以开源的形式发布,容易被使用和学习。程序库往往决定了一种语言应用难度,纵观历史,凡是具有优秀程序库的语言生命力都很顽强,反之则容易销声匿迹。目前几种流行的动态语言,都具有丰富的程序库,在Python中,不仅具有诸如网络应用,多线程,图像处理,科学运算之类的程序库,甚至还拥有多套不同量级的Framework来辅助Web开发。事实上,任何需要的功能几乎都能找到相对稳定的程序库,大部分程序员仅仅需要组合这些库就能编写出强大的应用——这也正是使用动态语言开发程序代码量较少的原因之一。除了众多的程序库,动态语言本身的种类也远远大于静态语言,同样,每种语言也各具特点。Ruby,Python,Groovy,Perl是四种颇具代表性的动态语言,按照一般的看法,这些语言适合用来黏合不同的系统和模块,素有“胶水”的之称。后来人们发现“胶水”不仅仅能粘合其他模块,本身也具有强大的功能。在没有性能问题的重要性不突出的场合,动态语言看起来无所不能了,无论是网站还是应用程序,都能看到动态语言的身影。对时下的程序员来说,掌握一种动态语言已不仅仅是赶时髦,虽然你不一定能够靠单单一种动态语言找到一份喜欢的工作,但适时地采用动态语言,一定可以让你的工作变的简单许多。

    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
    sv9Ffngn2N1uTBdyWeTELA==

    展开全文
  • 静态语言、动态语言

    2017-12-09 14:45:29
    一、 前两者,弱/强类型指的是语言类型系统的类型检查的严格程度。后两者指的是变量与类型的绑定方法。弱类型相对于强类型来说类型检查更不严格,...简单地说,在声明了一个变量之后,不能改变它的类型的语言,是静态

    一、
    前两者,弱/强类型指的是语言类型系统的类型检查的严格程度。后两者指的是变量与类型的绑定方法。

    弱类型相对于强类型来说类型检查更不严格,比如说允许变量类型的隐式转换,允许强制类型转换等等。强类型语言一般不允许这么做。

    静态类型指的是编译器在compile time执行类型检查,动态类型指的是编译器(虚拟机)在runtime执行类型检查。简单地说,在声明了一个变量之后,不能改变它的类型的语言,是静态语言;能够随时改变它的类型的语言,是动态语言。因为动态语言的特性,一般需要运行时虚拟机支持。

    二、
    1.
    Program Error
    strapped errors:导致程序终止执行,如除0,Java中数组越界访问
    untrapped errors: 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址Forbidden Behaviours 语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.
    Well behaved、ill behaved
    well behaved: 如果程序执行不可能出现forbidden behaviors, 则为well behaved。
    ill behaved: 否则为ill behaved…

    2.有了上面的概念,再讨论强、弱类型,静态、动态类型强、弱类型

    强类型 strongly typed: 如果一种语言的所有程序都是well behaved——即不可能出现forbidden behaviors,则该语言为strongly typed。
    弱类型 weakly typed: 否则为weakly typed。比如C语言的缓冲区溢出,属于trapped errors,即属于forbidden behaviors..故C是弱类型
    前面的人也说了,弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说C语言的int可以变成double。 这样的结果是:容易产生forbidden behaviours,所以是弱类型的
    动态、静态类型
    静态类型 statically: 如果在编译时拒绝ill behaved程序,则是statically typed;
    动态类型dynamiclly: 如果在运行时拒绝ill behaviors, 则是dynamiclly typed。

    3.
    这里写图片描述
    红色区域外:well behaved (type soundness)
    红色区域内:ill behaved
    如果所有程序都是灰的,strongly typed
    否则如果存在红色的程序,weakly typed
    编译时排除红色程序,statically typed
    运行时排除红色程序,dynamically typed
    所有程序都在黄框以外,type safe


    参考:《Type Systems》 Luca Cardelli - Microsoft Research

    Trapped error: An execution error that immediately results in a fault.

    Untrapped error: An execution error that does not immediately result in
    a fault.

    Forbidden error: The occurrence of one of a predetermined class of execution errors;Typically the improper application of an operation to a value, such as not(3).

    Well behaved: A program fragment that will not produce forbidden errors at run time.

    Strongly checked language: A language where no forbidden errors can occur at run time (depending on the definition of forbidden error).

    Weakly checked language: A language that is statically checked but provides no clear guarantee of absence of execution errors.

    Statically checked language: A language where good behavior is
    determined before execution.

    Dynamically checked language: A language where good behavior is
    enforced during execution.

    Type safety: The property stating that programs do
    not cause untrapped errors.

    Explicitly typed language: A typed language where types are part of
    the syntax.

    Implicitly typed language: A typed language where types are not part of the
    syntax.

    这里写图片描述

    原文参考

    展开全文
  • 今天小熙突然想到一个问题,那就是Java到底是动态语言还是静态语言,是强类型还是弱类型呢?虽然知道但是还是不够深入,接下来就一起探讨下吧。 二. 图释 小熙碰巧看到一张,完美的区分了以上的问题 如图所示,...

    一. 前言

    今天小熙突然想到一个问题,那就是Java到底是动态语言还是静态语言,是强类型还是弱类型呢?虽然知道但是还是不够深入,接下来就一起探讨下吧。

    二. 图释

    小熙碰巧看到一张图,完美的区分了以上的问题,如下图所示:

    语言类型

    如图所示,Java是强类型语言,静态类型。下面解释下为什么。

    三. 解释

    1. 静态类型语言:变量定义时有类型声明的语言。

      (1)变量的类型在编译的时候确定

      (2)变量的类型在运行时不能修改

      这样编译器就可以确定运行时需要的内存总量。
      例如:C、Scala、Java、F#语言是静态类型语言。

    2. 动态类型语言:变量定义时无类型声明的语言。

      (1)变量的类型在运行的时候确定

      (2)变量的类型在运行可以修改

      例如:python、Javascript、Ruby语言是动态类型语言。

    3. 强类型定义语言

      强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。

    4. 弱类型定义语言

      数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。

    综上所述:小熙认为Java是在编译时期确定的变量类型且在运行时期不能改变,在类型转换方面也是强制的,例如大范围整数类型转换为小范围整数类型时必须要强转,如 int 必须强制转换才能得到小范围类型 byte。所以Java是静态、强类型语言。

    以上就是小熙总结的结论,欢迎大家讨论。

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

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

    今天在群里聊天的时候,谈论到python和Java相比居然不用定义变量类型。我心血来潮就去百度了一番动态语言和静态语言的具体区别,一番百度才发现自己原来的想法不够全面,所以在这里做个笔记。

    基本概念

    • 动态类型语言:在运行期进行类型检查的语言,也就是在编写代码的时候可以不指定变量的数据类型,比如Python和Ruby
    • 静态类型语言:它的数据类型是在编译期进行检查的,也就是说变量在使用前要声明变量的数据类型,这样的好处是把类型检查放在编译期,提前检查可能出现的类型错误,典型代表C/C++和Java
    • 强类型语言,一个变量不经过强制转换,它永远是这个数据类型,不允许隐式的类型转换。举个例子:如果你定义了一个double类型变量a,不经过强制类型转换那么程序int b = a无法通过编译。典型代表是Java。
    • 弱类型语言:它与强类型语言定义相反,允许编译器进行隐式的类型转换,典型代表C/C++。


    如果所有程序都是灰的,strongly typed
    否则如果存在红色的程序,weakly typed
    编译时排除红色程序,statically typed
    运行时排除红色程序,dynamically typed

    总结

    上一个图就很清晰了

    preview

    展开全文
  • 写动态语言的不屑于静态语言那冗余的类型系统;写静态语言的则嘲讽动态语言里面各种光怪陆离的运行时错误。 本文转载自raindi:原文链接 基本概念 静态语言(强类型语言) 静态语言是在编译时变量的数据类型...
  • 动态语言和静态语言的区别

    万次阅读 多人点赞 2017-10-30 11:20:20
    编译型语言和解释型语言 1、编译型语言 需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。 编译是把源代码编译成机器码, 链接是把...
  • 静态语言和动态语言之探索

    千次阅读 2018-05-18 14:30:13
    有三个名词容易混淆:Dynamic Programming Language (动态语言或动态编程语言)Dynamically Typed Language (动态类型语言)Statically Typed Language (静态类型语言)静态类型语言的类型判断是在运行前判断(如编译...
  • 什么是动态语言/静态语言

    千次阅读 2017-07-23 10:40:18
    下面简单介绍下什么是静态语言静态语言: 动态语言:动态语言是指在运行期间才去做数据类型检测的语言。在用动态语言编程的时候并不需要给变量指定数据类型,该语言会在第一次将数据赋值给变量的时候在内部将数 据...
  • C语言是静态语言、弱类型语言。 Java语言是静态语言、强类型语言。 JavaScript语言是动态语言、弱类型语言。 静态类型语言、动态类型语言分析: 静态类型语言:变量定义时有类型声明的语言。 1)变量的类型在...
  • 静态语言和动态语言

    2010-02-04 16:34:00
    1.静态类型语言和强类型语言静态类型语言是指在编译时变量的数据类型即可确定的语言,指需要进行变量/对象类型声明的语言,多数静态类型语言要求在使用变量之前必须声明数据类型,某些具有类型推导能力的现代语言...
  • 通常我们所说的动态语言静态语言指 动态类型语言(Dynamically Typed Language) 静态类型语言Statically Typed Language)。 还有一个 Dynamic Programming Language (动态编程语言),静态编程语言。 ...
  • 问题1:静态语言和动态语言的区别是什么? 问题2:强类型语言和弱类型语言的区别是什么? 问题3:以你实际举例,用过哪些动态、静态语言?以及强类型,弱类型语言? 问题1:静态语言和动态语言的区别是什么? 答...
  • 通常我们所说的动态语言静态语言指 动态类型语言(Dynamically Typed Language) 静态类型语言Statically Typed Language)。 还有一个 Dynamic Programming Language (动态编程语言),静态编程语言。 ...
  • 1 在看书的时候无意中讲到编程语言分为解释型编译型。我们知道软件的产生大都进过了这样的过程:(1)源程序----中间代码------机器代码;(2)源程序----机器代码。第一个过程应该是使用编译型程序设计语言,第...
  • 编译型语言和解释型语言  计算机是不能理解高级语言,当然也就不能直接执行高级语言了。计算机只能直接理解机器语言,所以任何语言,都必须将其翻译成机器语言,计算 机才能运行高级语言编写的程序。  一、编译...
  • 1、动态语言和静态语言 通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也...
  • 一 、静态语言的优势到底在哪? 来自robbin 摘自 http://www.javaeye.com/article/33971?page=7 引用 是像Java或者C#这样强类型的准静态语言在实现复杂的业务逻辑、开发大型商业系统、以及那些生命周期很...
  • 在Python中,等号=是赋值语句,可以把任意数据类型...这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是
  • 根据语言特性分类根据语言的执行方式可以分为解释型语言编译性语言根据...优缺点对比静态语言:这个概念是相比较动态语言的特性产生的概念。脚本语言:即扩建语言,是为了缩短传统的编写-编译-链接-运行(edit-co...
  • 首先要清楚静态类型语言和动态类型语言的判别的标准 定义:如果类型检查发生在编译阶段(compile time),那么是静态类型语言(statically typed languages)中,相反的,如果类型检查发生在运行阶段(run time),那么是...
  • 1.动态语言 动态语言是在运行时才确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。 例如PHP、ASP、Python、SQL、JavaScript、Unix Shell等等。 动态语言的优势:思维不受...
  • 编译型解释型的区别 先来看看编译型语言定义: 编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码 (二进制)。 再来看看解释型语言的定义: 解释型语言的源代码不是直接翻译成机器指令,而是...

空空如也

1 2 3 4 5 ... 20
收藏数 585,860
精华内容 234,344
关键字:

静态语言