易于反编译的中间语言 |
无论是用VB、C#或其他的.NET编程语言编写的软件都会被编译成一种"中间语言"(IL),只有在软件运行时,一个运行时编译器(JITter)才将IL代码编译成机器语言,这在理论上就意味着创建非Windows平台的.NET运行库是可能的,但目前关于这一点还没有任何的官方说法。IL的一个不足之处是:它可以非常容易在VB5中进行反编译,使得许多开发人员都怀疑.NET架构的安全性。 在IL一级对代码有影响的CLR的变化能使所有的使用CLR的开发人员受益。对特定语言的优化主要与如何将这种语言编译为IL的质量有关,因此从技术上说,在不同的.NET语言之间还是有着细微的差别。尽管如此,总体情况还是很好的,比如,VB与C#具有相同水平的调试和分析工具,因为它们使用的就是同一个工具。 CLR提供了空前的跨语言集成能力,其中包括跨语言的代码继承。所有的使用CLR的语言都共享一个相同的类型系统,这就使得利用多种编程语言开发软件变得更为简单。 在CLR中运行的代码被称作管理代码,它使用的内存是完全由CLR控制的。管理代码带来的好处是显而易见的,包括跨语言的集成性、跨语言的异常处理和组件交互的单一模型。Visual Basic只能使用管理代码,而C#则还可以不使用管理代码(不使用运行库),使用指针管理等功能,这是VB与C#的一个不同之处,这一点的重要性取决于你需要完成的任务。 The architectural differences imposed by the CLR run deeper than cross-language inheritance, shared features, and managed code. For one, 由CLR带来的结构上的差异性远不止跨语言的继承、共享的特性和管理代码。Visual Studio.NET的基础架构不是COM,包括字符串在内的VB.NET中的所有元素都是对象。基于这些原因和其他的一些原因,微软改变了基础架构处理对象的方式,每当引用一个对象时,COM都把对象引用计数器加1。如果释放了一个对象则计数器减1,当计数器减为0后这个对象也结束了。 自由线程带来的风险 无用单元的收集 |