本节书摘来自异步社区《圣殿祭司的ASP.NET4.0专家技术手册》一书中的第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所示。在大家受够了若干静态语言
日趋复杂,程序员耗费不少时间与心力,只是为应付语言或平台本身的复杂度(如J2EE的复杂,连国外J2EE专家都这么觉得,而.NET也是越来越不容易了),而非工作与生产力上面,故反思与流行的带动下,势必想抛掉旧包袱,遇见一个可以专注在开发乐趣与生产速度的语言。“众里寻她千百度,蓦然回首,那人却在灯火阑珊处”,寻觅到心中理想的佳人,琴瑟共鸣,怎能不叫人感动呢!故Ruby与Python这几年流行也不是没有道理的。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
相关资源:敏捷开发V1.0.pptx