.NET技术初探2 - 中间语言的引入与新语言C#的诞生

.NET 的推出,使得 Windows 下的编程语言发生了重大的变化,在 .NET 之前,各个编程语言都有自已的 Runtime 类库,而在 .NET 之后,各个 .NET 编程语言都引用同一套类库,这就使得微软必须要修改编程语言,否则就不能做到多种编程语言引用同一套类库。为什么不修改编程语言就做不到多种语言引用同一套类库呢? 原因是用这些编程语言编写的代码在编译之后都以机器语言(机器码)的形式存在,而由于机器语言并没有数据类型的概念,更别谈支持面向对象了,所以代码一经编译,数据类型和面向对象等等编程语言的特性就丢失了,所以,像 “VB 编写的类可以在 C# 中继承 这样的特性,显然在旧的机制下是实现不了的。

  让我们奇思妙想一下,如果机器语言支持数据类型和面向对象,那一切都不是问题了,所有的编程语言都编译后仍然保留数据类型和面向对象特性,互操作就不成问题了,问题是, CPU 制造商会在 CPU 指令中加入数据类型和面向对象这么复杂的指令吗?

   既然机器语言不支持数据类型和面向对象,那我创造一套支持数据类型和面向对象的伪机器语言总可以吧,于是,中间语言的思路就浮出水面了,中间语言这个伪机器语言直接支持数据类型和面向对象特性(当然还不至这些),这样,通过修改编译器,使所有的 .NET 编程语言编译后不是产出机器语言,而是产出伪机器语言,即中间语言。

 

可是, CPU 并不认识中间语言,所以程序在编译后不能像以前那样直接运行,中间语言要得以执行,还需要经过一层转换(编译),需要先将中间语言转换成机器语言才能执行。

 

当然,中间语言出言的原因不只是为了解决多语言之间的互操作问题,它还提供了跨平台移植、以及运行时代码安全控制能力等,虽然在移植性方面, .NET 目前主要的平台还是微软的平台。

为什么微软需要创造 C#?

时下最流行的编程语言,当算 Java VB C++ 等,微软肯定要考虑所有这些语言的开发人员,让他们都能开发 .NET 程序,但是微软只拥有 VB ,微软只能把 VB 修改成 .NET 编程语言 VB.NET ,由于微软并不拥有 C++ ,所以微软不能随意修改 C++ ,这样 C++ 不能成为 .NET 编程语言, Java 呢, Sun 更加不愿意让你微软碰一丁半点。

 

怎么办呢?让 Java C++ 程序员都转去学 VB 吗?呵呵,让这帮酷爱花括号的家伙去学习 VB 实在是比登天还难的事。

 

因此,为了把 C++ 程序员和 Java 程序员拉入 .NET 阵型,微软决定创造一个新语言 C# 这个新语言的语法几乎与 C++/Java 一致,同时结合了 C++ Java 的优点,所以无论是 C++ 程序员还是 Java 程序员, C# 都非常亲切。

 

但也并不是说 C++ 就不能开发 .NET 程序,由于 C++ 在一些性能悠关的场合仍然有着不可替代的地位, 而且很多旧的系统和软件都是用 C++ 编写的,它们仍然工作一段时间,因此微软自然不能放弃 C++ ,为了使 C++ 也能够使用 .NET Framework 的功能,微软为 C++ 提供了一个扩展库,使得 C++ 既可以编写原生的 Windows 程序,也可以编写 .NET 程序,但微软这么做可能只是为了新旧系统交替时的一个过渡方案,所以对于 C++ 程序员来说,在编写新软件时,学习和使用 C# 可能是较好的选择。

 

  再说说 Java, Java .NET 要进行对决这个战线是很明确的,因此,微软并没有给 Java 提供编写 .NET 程序的能力,反之,微软创建了一个另一个新语言 J# 来吸引 Java 程序员。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值