理解 .NET 2015

去年跟着 BUILD 之后,我发了一篇文章 Exciting Times for .NET 并从那以后我已经很荣幸地能够与.NET团队并肩作战,这其中包括了运行时、框架、语言和编译器。虽然去年我的重心已经更多转移到了内部社区,但是就像为了同行而帮助运维内部会议一样,我也花费了一些时间帮助.NET基金会取得了一些进展并且了解了许多关于开源社区的东西以及学习了所有我们.NET基金会的项目。好,开心的是我也结婚了,这是我人生中的一个转折点。我从一个社区“传教士”俨然成为一个“先驱”或者说是一个“桥梁”  。我真的挺喜欢 Alex Hillman的格言: Tummler .

既然我们正在走进BUILD, 我甚至更加激动于我们所做的进展,特别是关于.NET平台本身的,还有团队开源的方式。现在已经有了许多关于.NET动向的寻觅,因而我认为我已经写了一篇高级“架构性”博文来帮助人们理解各个部件以及该如何在哪儿参加这些项目(的开发当中)。换句话说,这将是一个开始学习.NET 2015的好地方。至少这是我想看到的!

.NET 2015 – 10,000 个脚视图

在一个非常高级的层面上,这是落于.NET 2015伞下的主要部件纲要。

重要的是,我们需要注意这儿有三个主要的.NET核心的投资去向, 而这些足够影响着主要部件的开发。

  1. .NET Innovation(.NET创新)– 带来了平台推动与创新(译者注:这种创新跟Creation还不一样哦)。我们将使得每一层变得更加现代化(译者注:就是更加科学、实用、流行) ,这其中包括了语言、编译器、基类库、应用模型、运行时以及工具。

  2. Open Source (开源)– 将工程进程引入一个开放环境,在社区的帮助支持下开发,繁殖一个富有生命力的生态系统。

  3. Cross platform (跨平台)– 拓展.NET到Linux和Mac平台,因为我们的消费者逐渐地在多样的环境中工作着。

.NET 2015 的主要部件

Frameworks and Runtimes(框架和运行时)

.NET框架是一个托管的可执行环境,其为需要运行的应用提供了许多服务。它有两个主要部分:公共语言运行时(CLR),这是用于处理运行应用的可执行引擎;另者则是.NET框架类库,它提供了一份经过测试且可复用的代码来给开发者们在自己的软件中调用。

.NET Framework 4.6建立于4.5.2之上并添加的新的API,改进了事件追踪,还修复了N多BUG。 这是至今我们所知的最新版完整的 .NET 框架。.NET Framework 4.6 将直接包含于 Windows 10并被推送至老版本系统的Windows Update 中(Vista及以上). 看: .NET Framework 2015 Preview

.NET Core 5是一个综合性目标, 模块化的框架可以被相当广阔的应用模型和平台所使用,同样开源,可被模块化同时本地化部署,并且在微软的促进下将支持 Windows, Linux 和 Mac OS X 系统。有这么一套包含了基类库 ( corefx ) 和运行时( coreclr )的重构集,(CORECLR)包含了一个全新的JIT编译器(“RyuJIT”), .NET 垃圾回收器,本机交互以及其他许多的.NET运行时组件。 今日,.NET Core 在Windows 上建立并运行。 接下来的几个月内,我们将正在通过加入一些具有平台特性的组件到 Linux 和 Mac 实现当中 。看: Introducing .NET Core and CoreCLR is now Open Source

如果你仅仅只看本文中的一个外链,请一定看这个 Introducing .NET Core . Immo 将大量详述解释为什么我们需要它以及如何去适应。

Compilers(编译器)

The .NET Compiler Platform(.NET平台编译器) ("Roslyn") 开放了 C#源码和富含许多分析API代码的Visual Basic 编译器。这样就能够通过使用相同于VS所使用的API来建立代码分析工具(译者注:这很酷啊!)。 Roslyn会生成平台独立的中间语言(IL) ,并在建立.NET 2015时就使用了, 其中就有Framework和Core. 发布版本中,一整个.NET 框架将使用Roslyn编译。关键语言VB 和C#创新的地方也不例外。 看: Roslyn on GitHub . F#语言和编译器同样有创新。看 F# on GitHub .

“RyuJIT”在x64位的.NET上是新的默认(JIT)编译器。在运行时侯,JIT编译器使用IL语言首先为特定架构机器编译。 而对于桌面和服务器情景, RyuJIT 较之前的x64位JIT编译器大大修改以减少启动时间。同样包含了支持SIMD (单指令、多数据) ,这就允许对集合中的数值进行并行化数学运算。这对于一些依赖向量运算的应用而言可以极大地提高运算速度(译者注:比如像MATLAB这样的软件就是靠向量化编程)。 看: The next-generation JIT compiler for .NET

.NET Native(本机化)将C#编译成机器码形式将使其性能堪比C++,这样开发者将得益于.NET 框架所带来强大的生产力、亲和性以及本机代码所带来的性能。举个例子说, apps 基于 .NET开发后将编译成中间语言(IL)。在运行时,(JIT) 编译器才将其转为机器码。 而对比而言, .NET Native 就是一个预编译器用于将app直接编译成机器码并只花费很小的CLR运行时间。通过在.NET Native上编译之后,受欢迎的微软应用商店上的app启动速度将快60% faster 以及少用了15-20% 的内存。普遍的微软apps将运行在.NET Native (ARM, x86, x64). 看: Compiling Apps with .NET Native

App Models(应用模型)

应用模型扩展了 .NET 框架 4.6 和 .NET 核心 5 的公用库。 Windows Forms, WPF, ASP.NET Web Forms, MVC 5 等 这些如今你所熟知的应用模型将成为.NET Framework 4.6的一部分,还有一些新特性将与你见面哦, 这也得益于语言中的创新,还有Roslyn 编译器和RyuJIT。将在.NET 4.6整体上有很多改变。 看: ASP.NET Overview – What about Web Forms? , The Roadmap for WPF .NET Framework 2015 Preview

稍微透露下,将有新的应用模型是特地设计于运载在优化的.NET核心5上的。

ASP.NET 5 是另一种专门用于建立现代网页应用的.NET应用模型。该模型重新建立了来提供一个优化的开发框架以支持可部署在云端或用于内部事务的应用。其由许多开销最小的组件组成, 因此可以在构建解决方案的时候更加弹性。 ASP.NET 5 可以在.NET Framework 4.6 或者.NET Core 5上面运行。 现今ASP.NET 5 通过 Mono 运行时 在Linux 和Mac上跑。有朝一日.NET Core 支持了Linux 和Mac, 那么 ASP.NET 5 将很容易在那些平台的.NET Core 上跑。 看: ASP.NET 5 Overview Introducing ASP.NET 5

Universal Windows apps(统一微软应用)是一种应用模型,其允许你在 Win Phone 和 Win app(8.1+) 之间共享代码 (8.1+) 并部署于微软商店。Universal Windows apps 将运行于.NET Native。 看: Building universal Windows apps for all Windows devices Getting Started with .NET Native

那么什么是.NET Core,我真的很罗嗦吗?

.NET Core 5 是一个综合性目标, 模块化的框架可以被相当广阔的应用模型和平台所使用因为其有这么一套包含了基类库 ( corefx ) 和运行时( coreclr )的重构集。the .NET Core 基类库(BCL)所用APIs 对于不同应用模型是同一的。APIs 并不是看起来一样的 – 而是 他们共享了相同的实现而已。 主要的APIs/程序及被大量分解为模块而且是平台独立的。

App-local (或者说也是同时的)部署也是.NET Core的关键特点。 你可以选择与你app相关的package来随着app部署。模块化的 packages 可通过 NuGet 来获得。 这意味着你的程序将被隔离运行并且不受机器上诸多.NET框架完整版本的影响。你的APP可以像x-copy命令那样华丽地部署,而无需操碎了心。

同时,.NET Core 在微软的促进下将支持 Windows, Linux 和 Mac OS X 系统。今天,.NET Core 在Windows 上建立并运行,但我们将正在加入一些具有平台特性的组件到 Linux 和 Mac 实现当中。而且所有都是开源的。其中相当重要的是为基金会拿下跨平台和建立更强大生态系统做了保障。

从编程到运行程序– .NET Core 开发

我认为去了解工作如何进行的一种心理上的的模型/流程这样的技术总是很受益的。如下是我关于开发基于.NET Core应用的简单示意图 , 描述了从编码/生成/调试 循环圈到应用部署和执行。。不同的应用模型上的部署和执行是不一样的。

你写代码的的同时需要引用相当多的BCL和应用模型中你需要的模块。Roslyn 是这么一种编译器,可以处理你的代码并生成平台独立的中间语言(IL)。在编译流水线一旁,提供了丰富的API集让你对你的代码做足够彻底的种种分析。若你正在使用 Visual Studio, 将有数以吨计(就是很多的意思)的新IDE 特性等着你来更好地使用这些API以满足你的编程生产之旅。

如果你建立了universal Windows 应用, .NET Native 本机化工具链将负责剩下的事情。引用将在最短的运行时间内随着你的app建立同时被本地化部署到本机镜像中。若您正在建立 ASP.NET 5 应用, 引用和 CoreCLR 将被随着app本地化部署到服务器。JIT 编译随之发生于开始使用 RyuJIT。

补充说明,ASP.NET 5 允许你在代码中做些改变然后保存,接着刷新浏览器,而不需要明确地重建项目。Visual Studio 使用 Roslyn 以支持动态编译。你仍然可以拥有所有的结构体以及使用编译好的框架,但是开发体验上就像口译一样(很令人捉急)。

注意: 若你面向完整的 .NET Framework 4.6 开发,那么你将仍然可以享受语言的创新以及 Roslyn 编译器。应用部署并没有从其现在工作的方式中发生改变, 其仍然依赖于机器上安装的完整版本的框架,但是JIT 编译通过优化过的 JIT 编译器--RyuJIT。

现在开放了啥?

许多 .NET 2015的部件是开源的并由 .NET 基金会 指导着工作. 在这些项目上,我们正在积极地与社区进行开放相关的工作。

您可以看.NET基金会支持的所有工程的repos 和 activity ---GitHub: http://dotnet.github.io/

这儿是一些对应的开始的好地方。查看这些非常详细的Readme和contribution所能提供的向导。

值得注意的是,完整的 .NET 框架是 “开源的”。也即是说, 我们并没有正在贡献什么,并且在 OSI 认可的 License 的保护下并没有的完整地放出来,但是,你可以在这儿探索源代码(老外说话真累...): http://referencesource.microsoft.com/

开放中的工程学

OSS(开源软件) 对于微软而言并非新奇之物,但是对于.NET运行时和库来说是全新的概念。这是一个非常大的工程啊,要15年之久,以至于相当多的人在内部已经工作了那么久,其中不仅是移植代码,还有开放中的道道工序。这是很耗时的。这也就是为什么团队从一小部分基类库开始的原因了,同时这一路上发布了越来越多的东西,当然也学到不少东西。 那些学习以及最佳实现已经在整个团队泛起了涟漪。 在贡献榜中我们不得不学会谦虚: overwhelming support and contributions so far

您可能会思考 “ 现今我没有足够的时间建立我自己的APP,更不用提为CLR码代码了!” 说得好啊,我和你想到一块儿了!你可以选择你想要的方式来参与其中。你没必要写代码以成为贡献者。(但你可以) 提出一个问题 , 去评价一个提议 , 回答一个问题 。或者仅仅是在这上面瞧一瞧 看一看

您可能还会想“ 我不想失去我过去所习惯的 简洁性、高质量、支持性(这些特点)” 别急!我们仍然为了相同之前级别的质量和服务而献身。不妨简单想想,所有我们做所的工作只是把工程都置于开放之中。(但是)每一件我们以前在内部为了建立高质量软件所做的是仍然在同样的地方、环境条件下进行,只不过现在我们都是公开进行的。

我真的对团队的新文化以及.NET的未来感到很激动啊。

享受吧!

[更新 2/26/2015]– 我已经注意到 dotNetConf 2015 正在来临,于此你可以了解更多。这是由来自社区和产品团队的演讲者发起的免费虚拟会议。可在三月18、19号在线流媒体收看(译者注:注意时差)。

我来评几句
登录后评论

已发表评论数()