《圣殿祭司的ASP.NET4.0专家技术手册》----2-2 静态与动态语言的比较

本节书摘来自异步社区《圣殿祭司的ASP.NET4.0专家技术手册》一书中的第2章,第2节,作者: 奚江华,译者: 武海军 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2-2 静态与动态语言的比较

圣殿祭司的ASP.NET4.0专家技术手册
程序语言若按照类型检查的时机来划分,可分为:

静态语言(statically typed languages)。
若一种程序语言的类型检查(Type Checking)工作是发生在编译时期(Compile Time),则称为静态语言。C#与Java都是静态语言代表,程序编写时必须使用明确的类型声明,编译的当下,编译程序就会进行类型检查,且变量或对象的类型一旦声明后,在运行时就无法任意更换类型,否则会发生Exception错误。

动态语言(dynamically typed languages)。
若一种程序语言的类型检查工作发生在运行时(Runtime),则称为动态语言。Python、Ruby、JavaScript、PHP、SmallTalk、ColdFusion、Groovy等都是著名的动态语言,编译程序不会事先进行类型检查,而是在运行时才会进行。且有的语言在运行时,变量还能不断任意更换类型,JavaScript就是一例。

故静态与动态语言在类型检查的根本出发点上是不同的,因此利弊互见,以下阐述其优缺点。

静态语言优缺点。
F:20100708-Nancy-AEL010800ICON項目2.tif 优点:
静态语言因为在编译时期就进行类型检查,故能事先找出类型误用或不合法的地方,达到类型安全的目的。同时程序编写时也能得到开发工具有效支持(如Visual Studio的IntelliSense),且由于事先就确定类型,编译程序还能进行程序的优化,静态语言执行速度通常比动态语言快。

缺点:
因为类型检查工作较严格,程序语言会花很多精力在处理类型工作上,例如类型的声明、类型的转换、类型的兼容性等,同时也因为层层的检查与类型转换工作,而导致某些程序语法冗长与编写困难。有点像为了飞行安全,机场通关要进行十分严格又繁复的检查,导致旅客通关速度缓慢。

动态语言优缺点。
动态语言的优缺点恰恰与静态语言相反,把对方缺点变优点,但同时也因此失去对方的优点,只是大家各取所需,想取得的优势不一样罢了。

- ![F:\20100708-Nancy-AEL010800\ICON\項目2.tif{6}](/api/storage/getbykey/screenshow?key=150610230083545f6fa5) 优点:
不必为了类型问题耗费太多程序代码与时间,程序简洁、编写较快、语法灵活、有灵活性。相同的功能,往往用静态语言要一堆程序,用动态语言几行就搞定了。甚至在运行时,还能动态加入属性与方法。

- ![F:\20100708-Nancy-AEL010800\ICON\項目2.tif{6}](/api/storage/getbykey/screenshow?key=150644ad7bd6efb5a98c) 缺点:
在程序编写时,因为类型是不确定或弱类型的关系,难以获得IDE工具的有效支持。且编译时期不会事先进行类型检查工作,因此可能留下不少Bug,在运行时才会发生Exception错误。且因类型检查与转换工作是在运行时才进行,故很难事先优化程序,执行当下会耗费许多时间进行类型检查工作,执行速度通常较静态语言慢。

另外,在TIOBE网站刚好有静态语言与动态语言的使用率比较图,看上去目前静态语言长期一直占有使用比例的优势(因为类型安全、IDE支持、优化与执行速度的关系),但动态语言却是长期看涨(语法简洁、生产力与灵活的关系),如图2-1所示。在大家受够了若干静态语言


04c738946b496c8823de5141cff9bb246aba574b

日趋复杂,程序员耗费不少时间与心力,只是为应付语言或平台本身的复杂度(如J2EE的复杂,连国外J2EE专家都这么觉得,而.NET也是越来越不容易了),而非工作与生产力上面,故反思与流行的带动下,势必想抛掉旧包袱,遇见一个可以专注在开发乐趣与生产速度的语言。“众里寻她千百度,蓦然回首,那人却在灯火阑珊处”,寻觅到心中理想的佳人,琴瑟共鸣,怎能不叫人感动呢!故Ruby与Python这几年流行也不是没有道理的。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值