首页 > 代码库 > .Net与CTS,CLS,CIL,CLR和C#

.Net与CTS,CLS,CIL,CLR和C#

起源:

  .Net技术的起源可以说是一个最基本的观点,代码复用。

如何复用:

  以前的复用方式就是类库,使用一个好的类库是非常令人舒心的事情,但现实往往令人沮丧,因为类库都是与语言绑定的,每种语言有自己的类库,比如js想使用stl的unordered_map,或者其他的c++库,需要实现与c++之间的相互调用。

  怎么样才能使js方便的调用c++的类库呢?微软给了两个答案COM和.NET。

  COM这里就不讨论了,其实现原理是基于物理层面的,太复杂,尽管有MFC,ATL,依然非常复杂。

  那么.NET呢,很简单,做个编译器,把js代码编译为c++代码呗!

思路有了,合理吗:

  是啊,把js代码编译为c++代码需要解决一些问题:

    首先就是变量的类型,大家的类型系统都不一样怎么办呢?

    其次是语言本身,解释性语言搞成了编译性语言,难道每次写js代码都要编译两次吗?

  微软也给出了相应的解决方案:

    类型系统不一致,那就统一呗,既然我们希望支持各种语言,那就叫通用类型系统(CTS)吧。

    语言问题怎么办呢,大家都认为自己喜欢的语言是最好的,为了讨论什么语言更好大家往往会讨论到脸红脖子粗。那就给种全新的语言吧,也不用引起IT界的又一次大讨论,既然我们希望支持各种语言,那就叫通用中间语言(CIL)吧。

还差点什么:

  噢,对了,还要给各个编译器作者规定一下把代码编译为CIL的规范吧?既然我们可以支持各种语言,那就叫公共语言定义(CLS)吧。

最后一个问题:

  我们的出发点就是为了解决复用问题,好了现在大家都会被编译为CIL,我们只需要为CIL写一个基础库就可以了,既然我们可以支持各种语言,那就叫公共语言运行库(CLR)吧。剩下的事情就是各个编译器作者的事情了,javascript.net,VB.net。。。

C#在哪呢:

  .Net起源的故事我们就讲完了,毕竟这是一个全新的系统,以前的语言写法或者实现上可能会有些出入(至少让人别扭),所以微软发布了C#。

后记:

  了解事物往往需要了解事物的来龙去脉与核心,复用可以说是IT技术永远的追求,从微软的发展路线可以看出,C API-->MFC-->COM-->.Net,都是为了更好的复用。

.Net与CTS,CLS,CIL,CLR和C#