.NET学习笔记分享:中间语言的引入与新语言C#的诞生

kwiner 2009-10-20 07:37:04
.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 程序员。


  我的另一篇笔记: http://topic.csdn.net/u/20091014/22/a74ea356-1a90-46b4-b674-668f888e9079.html
...全文
112 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChrisAK 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
J#在4.0中已不存在了
[/Quote]过渡语言嘛....
能勾引来的都勾引来了.
剩下的都是立场坚定的.
再怎么勾引也没用.
懒得浪费那个钱了吧.
z415353144 2009-10-21
  • 打赏
  • 举报
回复
俺还不了解4.0
十八道胡同 2009-10-21
  • 打赏
  • 举报
回复
我记得谁说过
c#==c++++
zzxap 2009-10-21
  • 打赏
  • 举报
回复
你out了
dingpo2099 2009-10-21
  • 打赏
  • 举报
回复
项一下~!
kwiner 2009-10-21
  • 打赏
  • 举报
回复
哈哈,刚开始看.net,

发帖的目的是希望向各位.NET大牛请教,

其实笔记中的一些观点来自 <<.NET大局观>>第二版, 大家可以看以下网址:
http://book.csdn.net/bookfiles/165/1001657259.shtml

希望大家多多讨论,帮小弟指定错误,谢谢
wuyq11 2009-10-20
  • 打赏
  • 举报
回复
J#在4.0中已不存在了
kwiner 2009-10-20
  • 打赏
  • 举报
回复
有理解有误的地方,欢迎大家指正啊!
足球中国 2009-10-20
  • 打赏
  • 举报
回复
帮顶吧。显然没看懂。

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧