动态语言

动态语言

  有三个名词容易混淆:
  Dynamic Programming Language (动态语言或动态编程语言)
  Dynamically Typed Language (动态类型语言)
  Statically Typed Language (静态类型语言)
  动态语言,准确地说,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。
  所谓的动态类型语言,意思就是类型的检查是在运行时做的,比如如下代码是不是合法的要到运行时才判断(注意是运行时的类型判断):
  def sum(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语言。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值