静态类型设法在编译时验证程序的安全性,因此消除了所有与类型匹配和内存访问违规有关的运行时错误类型。C#程序很大程度上是静态类型的,尽管一些类似脏向上转换的特性允许较少考虑或避免使用静态类型而支持动态类型。在这种情况下,运行库确保类型在运行期是一致的。
  一些人认为静态类型对编程人员而言更加烦冗,并且编程样式缺乏探索性。例如,类型声明往往杂乱地分布于程序中,即使在采用能够推断类型声明的更智能的编译器的情况下也如此。当然,它的好处就是可以在编译时发现更多的错误,但是在一些情况下,编译器必须承受较重负担的限制过大。动态语言将许多静态语言在编译期执行的正确性检查推迟到运行时进行。一些语言采取极端的方式,推迟所有检查,而另一些语言采用混合静态检查和动态检查的方法。
  许多人提到强类型和弱类型程序以及早期绑定和后期绑定程序设计。遗憾的是,很少一致地使用这些术语。通常而言,强类型检查是指在访问内存时程序必须以合理的方式和类型系统交互。根据此定义,已确定CTS是一种强类型执行环境。后期绑定是一种动态的程序设计方法,直到运行时才将正确的类型和目标操作绑定在一起。大多数程序直接在IL中绑定到精确的元数据标记。例如,动态语言执行这种绑定非常迟,也就是说,刚好在执行方法调用之前。

 

个人总结:
  静态类型的安全性更高,并且,静态类型程序的性能要高于动态类型程序的性能,因为它能够生成原生的IL指令,而不需要依赖额外的函数调用,例如后期绑定库的调用。
  动态类型程序在编译成了IL后,由于没有进行类型安全性验证,因此,在执行调用函数之前,需要做一个后期绑定操作,即调用后期绑定库进行类型安全性验证,这样无形之中就降低了程序的性能。

posted on 2008-11-02 11:35  肖斌  阅读(629)  评论(0编辑  收藏  举报