`

什么是动态语言和静态语言?

阅读更多

定义
通常我们所说的动态语言、静态语言指 动态类型语言(Dynamically Typed Language)和 静态类型语言Statically Typed Language)。
还有一个 Dynamic Programming Language (动态编程语言),静态编程语言。

动态类型语言:在运行期间检查数据的类型的语言。用这类语言编程,不会给变量指定类型,而是在附值时得到数据类型。如:Python和ruby就是典型动 态类型语言。很多脚本语言vbscrīpt,javascrīpt也是这类语言。看下面javascrīpt代码:

function add(a,b){
return a+b;
}
add(1,2);
add('1',2);



静态类型语言:相反静态类型语言是在运行前编译时检查类型。在写代码时,没声明一个变量必须指定类型。如:java,c#,c,c++等等。
public int add(int a,int b){
return a+b;
}
其实比较一下代码,你很快就会发现,其实区分动态静态类型语言从语法上就够了,语言语法格式基本就可确认动静态类型。

而Dynamic Programming Language (动态编程语言)指在程序运行过程中可以改变数据类型的结构,对象的函数,变量可以被修改删除。比如:javascrīpt就是这类语言,ruby, python也属于这类语言。而c++,java不属于这类语言。看javascrīpt代码:

function Person(name){
this.name=name;
}
Person.prototype.getName=function(){
return this.name;
}
var person=new Person("okok");
alert(person.getName());
person.getName=function(){return "nono"};
alert(person.getName());



当然静态编程语言 是运行时不可改变结构了。

网上有人说 类型检查和改变结构 是静态语言和动态语言两个区别点。基本概念上应该就这些,是我个人理解,不一定完全正确。个人感觉没必要很清晰分门类,掌握优点、特点就好了。这个话题说开根本不是我能说清楚的。总结思考一下。

有三个名词容易混淆:

  1. Dynamic Programming Language (动态语言或动态编程语言)
  2. Dynamically Typed Language (动态类型语言)
  3. Statically Typed Language (静态类型语言)

FantasySoft在他文章中所提到的动态语言与静态语言实际上指的就是动态类型语言与静态类型语言。

动态语言,准确地说,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的 ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态 语言。

所谓的动态类型语言,意思就是类型的检查是在运行时做的,比如如下代码是不是合法的要到运行时才判断(注意是运行时的类型判断):

defsum(a,b):
return a + b

而静态类型语言的类型判断是在运行前判断(如编译阶段),比如C#就是一个静态类型语言,静态类型语言为了达到多态会采取一些类型鉴别手段,如继 承、接口,而动态类型语言却不需要,所以一般动态语言都会采用dynamic typing,常出现于脚本语言中。(idior不知道这能不能回答你对动态语言多态的疑问^_^)

这里我需要明确说明一点,那就是,是不是动态类型语言与这门语言是不是类型安全的完全不相干的,不要将它们联系在一起!

静态类型语言的主要优点在于其结构非常规范,便于调试,方便类型安全;缺点是为此需要写更多的类型相关代码,导致不便于阅读、不清晰明了。动态类型 语言的优点在于方便阅读,不需要写非常多的类型相关的代码;缺点自然就是不方便调试,命名不规范时会造成读不懂,不利于理解等。顺便说一下,现在有这样一 种趋势,那就是合并动态类型与静态类型在一种语言中,这样可以在必要的时候取长补短,Boo就是一个很好的试验性例子。^_^

最后说一下Boo,Boo是一个静态类型语言,虽然用duck typing可以模拟dynamic typing,但是duck并不支持所有类型的操作替代,所以即使完全使用duck typing也不能达到dynamic typing。就像FantasySoft所述,Type Inference不是动态类型语言的特性,所以支持Type Inference不代表这门语言就是dynamically typed。

再特地为Ninputer 这个VB的fans说一下VB.NET^_^,VB.NET是dynamically typed语言。

分享到:
评论
5 楼 zander 2016-07-15  
zander 写道
c 语言是静态类型语言还是动态类型语言

阅读理解已知
4 楼 zander 2016-07-15  
c 语言是静态类型语言还是动态类型语言
3 楼 exception01 2014-05-28  
不错,可以基本了解 概念  +1
2 楼 一碗三餐 2011-08-12  
truevirtual 写道
写得很好,特别是例子举的很好!很容易理解

1 楼 truevirtual 2011-08-08  
写得很好,特别是例子举的很好!很容易理解

相关推荐

    汉英语言对比之静态与动态.pdf

    汉英语言对比之静态与动态.pdf

    WPF 多国语言实现与动态切换当前语言

    以上就是WPF应用中实现多国语言支持和动态切换的基本步骤。通过这种方法,开发者可以轻松地为全球用户提供本地化的用户体验,同时保持代码的整洁和可维护性。在实际项目中,可能还需要考虑资源文件的编译和打包,...

    PHP动态语言静态化示例

    此资源最好搭配讲解,地址http://blog.csdn.net/m_nanle_xiaobudiu/article/details/79267703

    静态网页和动态网页的区别.txt

    动态网页和静态网页的区别,首先要分别了解两个概念,就是什么是静态网页,什么是动态网页,并且学会区分哪些是静态哪些是动态。 静态网页: (1)静态网页不能简单地理解成静止不动的网页,他主要指的是网页中没有...

    动态语言、动态类型语言、静态类型语言、强类型语言、弱类型语言介绍

    总结来说,动态语言和静态语言主要区别在于类型检查的时间点,而强类型和弱类型关注的是类型转换的规则。动态类型语言与静态类型语言各有优劣,动态语言更灵活,适合快速迭代的开发;静态类型语言则提供了更好的编译...

    动态页面生成静态页面实例

    动态页面如`.aspx`文件(如`index.aspx`和`a.aspx`),通常基于服务器端的编程语言(如ASP.NET)运行,每次请求时都会根据用户输入和数据库交互生成内容。而静态页面如`.html`文件(如`index.html`),是预先生成的...

    动态生成静态HTML

    C#作为一款强大的.NET平台编程语言,提供了丰富的库和框架来实现这一功能。以下是对这个主题的详细解释: 1. **动态与静态页面的区别** - 动态页面:基于服务器端脚本(如ASP.NET、PHP等),根据用户请求实时生成...

    Java动态绑定和静态绑定.doc

    在Java编程语言中,动态绑定和静态绑定是两个重要的概念,它们涉及到方法调用和多态性。了解这两个概念对于深入理解面向对象编程至关重要。本文将详细探讨它们的区别,并通过实例来阐述它们的工作原理。 首先,让...

    动态网页 和静态网页

    动态网页与静态网页是网页开发中的两种主要类型,它们各自具有独特的特性和应用场景。 静态网页主要是由HTML、CSS和JavaScript等基本Web技术构建的。这些网页在服务器端被完全生成,然后以固定的内容发送到用户的...

    动态网页与静态网页的区别

    在互联网世界中,网页是信息传播的重要载体,根据生成方式,可以分为静态网页和动态网页。理解这两种网页的区别有助于更好地设计和管理网站。 1. **静态网页** - 静态网页是早期网页设计的常见形式。它们是由HTML...

    librdkafka 动态库 静态库

    动态库和静态库是两种不同的库文件形式,动态库在运行时被加载到内存中,而静态库在编译时直接链接到目标代码中。 描述进一步说明这些库是由VS2015(Visual Studio 2015)编译的,并且是v1.6.1版本。这意味着库文件...

    Android动态系统语言切换

    在Android系统中,用户通常可以在设备的设置菜单中选择或更改系统语言,但这是一种静态的切换方式。然而,开发者有时需要在应用程序运行时动态地改变系统语言,以便为用户提供更个性化的体验。本文将深入探讨如何...

    静态、动态链接库的创建和调用

    在现代软件开发中,为了代码复用和模块化设计,经常会用到静态链接库和动态链接库这两种形式的库。静态链接库在编译时期与应用程序链接,而动态链接库则在运行时期加载。 首先,我们来谈谈静态链接库。创建静态库的...

    Kotlin语言写的静态库和动态库.zip

    Kotlin语言写的静态库和动态库.zip

    弱类型、强类型、动态类型、静态类型语言的区别是什么.md

    弱类型、强类型、动态类型、静态类型语言的区别是什么

    wpf多语言切换,动态和静态切换【可联系作者购买】

    wpf多语言切换,动态和静态切换

    应用Dreamweaver设计静态网页和动态网页

    静态网页是由HTML、CSS和JavaScript等静态语言编写的,内容固定不变,不与服务器进行交互。而动态网页则可以根据用户输入或特定条件,从服务器端获取实时数据并展示,如PHP、ASP.NET、Python的Web框架等。 在...

    C# 动态模板生成静态页

    在.NET开发领域,C#是一种广泛使用的编程语言,尤其在构建动态网站时。"C# 动态模板生成静态页"的主题涉及到将原本基于服务器端的动态内容转换为客户端可以直接访问的静态HTML页面,这有助于提高网站性能,减轻...

    动态汉语和静态英语.doc

    例如,英语写作时应注重句子结构的清晰,逻辑关系的显性表达,以及适当运用静态语言的特征,如非谓语动词和动词的名词化。同时,汉语的动态性和意合性则要求我们在翻译或写作时,注意保持句子的连贯性和情感的生动性...

Global site tag (gtag.js) - Google Analytics