.NET是个啥_拓展


一、前言

差不多一年前写过一篇博客——.NET是个啥

那篇博客基本上就是按照官方文档的翻译,并加入一些自己的理解和吐槽来写的。现在回过去看呢,虽然内容全面,但是停留在表面。(相当于回答了它是什么,它包含了什么)

什么意思呢?
通过那篇博客,可以知道.NET是微软的开发平台,它包含各种各样的工具。
但是,微软为什么要开发这样一个平台?这个平台是怎么实现的?和其他平台/技术(如Java)有什么不一样?
这些拓展的问题,似乎并没有办法得到解答。

本文主要围绕这几个问题,来讨论、进一步认识.NET。


二、.NET是个啥

.NET,它是微软创建的一个用于构建多种不同类型的应用程序的开发人员平台。

1 微软为什么要开发.NET平台

这个问题比较好理解。

我们都知道微软早期在PC操作系统市场几乎是垄断的。
电脑/计算机光有操作系统可不行,上面还得有应用软件啊。当然,微软自己不可能开发出用户需要的所有软件。虽然不能开发出所有软件,但可以开发一个平台,让有需要的人用该平台来开发软件,这样归根到底还是用了微软的技术,命脉(上层技术/元技术)还是掌握在微软手中。

当然,归根到底还是钱。占有市场,基于已有业务(OS)拓展新业务(应用软件)。

实际上这一步也不得不走,因为Java是1995年面世的,.NET是2000年出现的,而95年到2000年Java相当火爆。如果.net迟迟不出现,微软可能受到严重打击,失去相当一部分软件市场。可见.NET的出现是为了与Java抗衡。

最终,因为.NET的出现,至少在PC端桌面应用上,微软保住了霸主地位。至于其他方面(移动端、网页端),微软因为布局问题并不占优势。

至于为了程序员开发程序变的容易这一说,这是.NET必须达到的(.NET得做的好用,才有人去用;不然人人写汇编开发应用不就好了)。这不是.NET出现的原因,微软又不是搞慈善的。

2 .NET是怎么实现的

或者说是什么语言编写的。
这里提到的.NET当然不是指整个.NET平台,更像是专指CLR。

在这之前,先谈谈C语言的编译过程,大家应该都不陌生。
简单讲就是,预处理=>编译=>汇编=>链接。
它是一个将高级语言代码转换为计算机可理解的机器码的过程。

那显然,.NET最终也要生成计算机可理解的机器码,所以必然会经过其中一个或几个过程。一种更高级(这个高级不是说该语言多么先进,多么优越;而是指抽象层次更高)的语言(语言的编译器),通常是由更底层的语言来编写实现的。.NET的这个核心运行环境CLR也不例外,它是由C/C++以及汇编来编写完成的。

题外话——自举(bootstraping )


大家应该都听过“计算机中的万物是由01组成的”。
但是人不太可能直接用0和1去编程,于是出现了汇编。
汇编语言(Assembly Language)是一种与机器语言相对应的低级语言,它使用助记符(英文缩写)来代替机器指令的二进制码,更容易理解和编写。显然,这个更容易理解是相对而言的。看过汇编的人应该都知道,它的代码都是一些指令,什么mov啊、jmp啊,可读性还是不太行的。

于是出现了C语言,根据上面说的,高级语言通常由低级语言编写实现,所以C语言(C编译器)是由汇编写的?
其实现在的C编译器,一般就是C写的。
???C写C自己?那编译C编译器的是啥?
非要追根溯源,应该说最早的C编译器是汇编写的。最初,用汇编语言去写C语言的编译器,这个编译器就是C编译器的老祖宗。后来的C编译器就是用C结合该C编译器来写了。
其实学过编译原理的话,应该知道有个词叫自举
我们先用底层语言实现上层语言的一部分,称为C0。然后用这部分上层语言C0去实现其他部分C1;再用C1去实现C2…于是最终就得到了完整的上层语言。

有了自举这个概念后,再问.NET平台(这次指整个平台)是啥编写的?答案就很花了,C、C++、C#、汇编等等。

3 .NET和Java有何不同?

.NET是个开发平台;Java是一种编程语言。
两者没啥可比性,硬要比的话应该是C#和Java比。
不过平时口头上(有时候会把C#和.NET等同起来),确实会出现拿这两者作比较,这个时候通常是讲.NET相关技术和Java相关技术比较。
因为两者确实有很多对应的技术,比如.NET有ASP,Java有JSP;桌面端.NET有WinForm、WPF,Java有swing、Javafx等。当然它们各有千秋,有些技术不适应环境已经快被淘汰了。

总之,我认为两者各有千秋,C#在工业领域应用广;Java在企业应用广。从当下国内大环境来讲,Java是热于C#的,不过这不是C#的问题,是生态、历史等多因素造成的。同时,Java求职市场也更卷,国内大厂应用多。


三、 结语

严格来讲,这篇博客有点跑题了。
不过以上几点拓展认识对全方位了解.NET还是有促进作用的。

猜你喜欢

转载自blog.csdn.net/BadAyase/article/details/129971160