C#运行原理——我的柔情你永远不懂

记得歌手陈琳曾经在1993年发行了第一张专辑《你的柔情我永远不懂》,创造了150万张的销售纪录,里边的主打歌——我的柔情你永远不懂,多年以后才发现是写给C#运行原理的,因为原理总是伤不起~
你的柔情我永远不懂
我无法把你看得清楚
你的柔情我永远不懂
感觉进入了层层迷雾
你的柔情我永远不懂
雾中的梦想不是归宿
你的柔情我永远不懂
我等待着那最后孤独
没有心思看你装糊涂
 ......
这个你,我想换做C#运行原理更合适吧,呵呵,我不得不说,没有一点点防备,你就存在了我深深的脑海里...
 
说到原理这东西,一直都很头大,什么通信原理,自控原理,编译原理,微机原理,伤人的原理是无处不在啊,我们在学校的时候恐怕对这个吐槽的最多了,因为原理这玩意,我们玩不起啊,连教授都没搞明白,你还想咋着,所以这里的原理也是蜻蜓点水而已!
 
我一直在想计算机是属于什么民族的,后来一想应该是土著人,为什么呢,因为老土著只会讲自己的语言,也只懂他们自己的语言,那计算机还不一个德行,就看见机器语言才会两眼放光,什么0101的,你也拿它没辙,反正人家就懂机器语言,而我等程序猿只懂高级语言啊,什么JAVA、C#、C++了,没办法计算机就是不认识啊,那找个翻译应该可以吧,你还别说真有,有个叫做“编译器”的翻译,瞬间就把C#等转换成0101了,我和我的小伙伴们都惊呆了!
 
编译器把0101以文件的形式保存在外存储器中,CPU执行程序时,要把指令读到内存中(你不用担心,是OS搞定的),这些指令都是一条条放好的,然后CPU就是一条条取出执行即可,但是这个指令还是有问题的,为啥?因为CPU和OS一换,瞬间这些指令又变成天书了,他们也有个名字“非托管代码”,没托管的代码伤不起啊!
 
write once ,run everywhere!听过吧,这还真不是吹牛,搞java的最有发言权了,那微软也是不敢示弱的,这套思想他也领会了,而且更强大一点!要支持跨平台和跨语言这一特性,软件工程师写的程序经过编译器生成的结果就不能是依赖于操作系统和计算机硬件的机器指令了,而必须是一种中间的、在所有操作系统和计算机硬件平台上都能执行的代码,这种代码Java称之为ByteCode(字节码),.NET称之为MSIL(微软中间语言)。程序最终还是要靠CPU执行,所以,Java的ByteCode和.NET的MSIL仍然需要最终被翻译成CPU能执行的机器指令,这部分功能由一个运行在特定操作系统之上的软件系统来完成,这个软件系统称为VM(Virtual Machine,虚拟机)。只需要为每种操作系统和特定的硬件平台提供一个虚拟机,就可以让同样一个程序不加修改地在不同的操作系统和硬件结构的计算机上运行。
 
那我们的.NET的虚拟机就是CLR!你只要装了这个东东,原则上是可以跨平台的!这种运行在CLR上面的代码就是托管代码,你开发的.NET程序,没有这个CLR的支持,你就运行不了,而要有CLR,你就必须装.NET FrameWork这个实实在在的东东,这个东东才是.NET 的核心!
 
在.NET中,我们还可以在一个程序里边使用多种语言,这依赖于CTS,比如VB和C#,反正最后都是编程MSIL,这个貌似java没有哦,所以搞.NET的也算是搬回了一局啊!
 
值得一提的是,虽然微软自己并不提倡跨平台(跨平台会影响Windows操作系统的市场垄断),但现在已经出现了在Linux操作系统中运行和编辑.NET程序的平台,就是Mono平台。 该平台包括有C#编译器、公共语言运行时以及相关的一套.NET类库,Mono平台可使开发者开发的.NET应用程序不仅能在Windows上运行,也能在任何支持Mono的操作系统上运行,包括现有的Linux和UNIX操作系统。在Linux下运行的.NET Framework称为MONO,这是一个开源的软件项目,你可以到因特网上搜集它的信息!
 
若要深入理解,有两本书推荐:1、《你必须知道的.NET》 2、《CLR via C#》
 
 
 
 
 

你可能感兴趣的:(C#)