动态语言,准确地说,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。
所谓的动态类型语言,意思就是类型的检查是在运行时做的,比如如下代码是不是合法的要到运行时才判断(注意是运行时的类型判断):
而静态类型语言的类型判断是在运行前判断(如编译阶段),比如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语言。
Q:
Q: What is strong-typing versus weak-typing Which is preferred, Why
要注意是强类型和弱类型,很多人容易将此与静态语言和动态语言的混淆。静态语言在运行时检查变量类型,动态语言在运行时检查变量类型。但这不是强类型和弱类型的区别。
弱类型语言允许将一块内存看做多种类型。比如直接将整型变量与字符变量相加。C and C++ 是静态语言,也是弱类型语言;Perl and PHP 是动态语言,但也是弱类型语言。
强类型语言在没有强制类型转化前,不允许两种不同类型的变量相互操作。Java、C# 和 Python 等都是强类型语言。
也有许多大型的系统是用动态类型语言编写的,编译器捕获类型错误只能捕获很小比例的错误。加强软件测试才能产出更加可靠的系统,这无关何种类型语言的使用。
尽管如此,使用哪种语言还是要按需而定。个人观点是,编写简单小应用,使用弱类型语言可节省很多代码量,有更高的开发效率。而对于构建大型项目,使用强类型语言可能会比使用弱类型更加规范可靠。
静态类型定义语言
一种在编译时,数据类型是固定的语言。大多数静态类型定义语言强制这一
点,它要求你在使用所有变量之前要声明它们的数据类型。Java和C是静态类型定
义语言。
动态类型定义语言
一种在执行期间才去发现数据类型的语言,与静态类型定义相反。VBScript
和Python是动态类型定义的,因为它们是在第一次给一个变量赋值的时候找出它的
类型的。
强类型定义语言
一种总是强制类型定义的语言。Java和Python是强制类型定义的。如果你有
一个整数,如果不显示地进行转换,你不能将其视为一个字符串(在本章后面会有
更多如何去做的内容)。
弱类型定义语言
一种类型可以被忽略的语言,与强类型定义相反。VBScript是弱类型定义
的。在VBScript中,可以将字符串 '12' 和整数 3 进行连接得到字符串 '123',
然后可以把它看成整数 123,而不需要显示转换。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mikel/archive/2007/06/13/1649941.aspx
分享到:
相关推荐
动态网页和静态网页的区别,首先要分别了解两个概念,就是什么是静态网页,什么是动态网页,并且学会区分哪些是静态哪些是动态。 静态网页: (1)静态网页不能简单地理解成静止不动的网页,他主要指的是网页中没有...
汉英语言对比之静态与动态.pdf
Kotlin语言写的静态库和动态库.zip
静态网页是由HTML、CSS和JavaScript等静态语言编写的,内容固定不变,不与服务器进行交互。而动态网页则可以根据用户输入或特定条件,从服务器端获取实时数据并展示,如PHP、ASP.NET、Python的Web框架等。 在...
以上就是WPF应用中实现多国语言支持和动态切换的基本步骤。通过这种方法,开发者可以轻松地为全球用户提供本地化的用户体验,同时保持代码的整洁和可维护性。在实际项目中,可能还需要考虑资源文件的编译和打包,...
本文将深入探讨如何在JNI中引用第三方的静态库(.a)和动态库(.so),并基于提供的"Jni测试引用第三方静态库和动态库demo"进行分析。 首先,我们需要了解静态库和动态库的区别。静态库是直接链接到目标程序中的,...
在IT领域,静态文本的动态生成是一项常见的技术,尤其在网页设计、软件开发以及数据分析可视化中广泛应用。...在实际开发中,我们应该根据项目需求选择合适的编程语言和工具,灵活运用静态文本的动态生成技术。
此资源最好搭配讲解,地址http://blog.csdn.net/m_nanle_xiaobudiu/article/details/79267703
在现代软件开发中,为了代码复用和模块化设计,经常会用到静态链接库和动态链接库这两种形式的库。静态链接库在编译时期与应用程序链接,而动态链接库则在运行时期加载。 首先,我们来谈谈静态链接库。创建静态库的...
总结来说,动态语言和静态语言主要区别在于类型检查的时间点,而强类型和弱类型关注的是类型转换的规则。动态类型语言与静态类型语言各有优劣,动态语言更灵活,适合快速迭代的开发;静态类型语言则提供了更好的编译...
2. **为什么要动态生成静态HTML** - 提高性能:静态页面加载更快,因为它们不涉及服务器上的复杂处理或数据库查询。 - SEO优化:搜索引擎更喜欢静态页面,因为它们内容固定,利于爬虫抓取和索引。 - 减轻服务器...
动态页面如`.aspx`文件(如`index.aspx`和`a.aspx`),通常基于服务器端的编程语言(如ASP.NET)运行,每次请求时都会根据用户输入和数据库交互生成内容。而静态页面如`.html`文件(如`index.html`),是预先生成的...
wpf多语言切换,动态和静态切换
本文将深入探讨C与C++接口、静态库和动态库的互调,以及如何通过`build.sh`脚本来实现这一过程。 首先,让我们理解C与C++接口。由于C++支持类、对象等高级特性,而C语言则不包含这些,因此在两者之间建立接口需要...
4. **扩展性和灵活性**:动态网站更易于扩展和修改,而静态网站一旦内容增加或需要更改时,则需要重新生成整个站点。 5. **安全性考虑**:动态网站因为涉及用户数据处理,所以需要更多的安全措施来保护用户隐私。 #...
首先,我们来了解一下什么是静态库和动态库。在编程中,库是一段预先编译好的代码,可以被多个程序共享。静态库(.a 或 .lib)在编译时会与目标代码链接在一起,形成一个完整的可执行文件,不依赖外部的库文件。而...
### Java静态代理与动态代理深度解析 #### 一、代理模式概述 代理模式是一种常见的设计模式,主要用于在访问目标对象...掌握这两种代理模式的差异和应用,对于深入理解和灵活运用Java编程语言的设计模式至关重要。