Understanding 翻译为了解或理解,对于 .NET 来说,2015 年注定会更加精彩,所以标题就用了“精彩”这个词,翻译这篇文章有两个原因:学英语、以及跟随作者回顾一下去年的 .NET。
在去年 BUILD 大会之后,我写了一篇文章 Exciting Times for .NET,并且从那以后,我在 .NET 团队中工作充满了乐趣,其中包括 runtime、framework、languages 和编译器。虽然在过去一年中,我的工作重点在内部社区,例如为我们的同事安排内部会议,我也花费了一些时间帮助 .NET Foundation 落成,也学习了一下关于开源社区和 .NET Foundation 项目 的一些内容。哦,对了,我也结婚了,:-) 这对于我是个过渡期,从社区的“布道者”越来越多的变成了“协调者”或“连接者”,我真的非常喜欢 Alex Hillman’s term: Tummler。
现在,我们正在接近下一个 BUILD 的到来,我对我们已经取得的进展感到非常兴奋,特别是围绕 .NET 平台自身,和团队的方式去开源,还有更多复杂的东西将会产生,所以,我想写一个更高层次的“事件贴”,来帮助大家理解一些主要部分,并晓得怎样去参与项目,换句话说,这是学习 .NET 2015 一个好的开始,至少,这是我的希望!
.NET 2015 – 10,000 foot view(一万英尺鸟瞰图)
下面是“.NET 2015”主要的组成部分:
需要注意的是,.NET Core 的三个关键组件:
- .NET 变化 – 保持平台不断向前和创新,我们正在使每一层现代化,包含:语言、编译器、基础类库、应用程序模型、运行时和工具。
- 开源 – 我们的工作过程一直保持公开,并不断得到开发帮助,使之培育一个充满活力的 .NET 社区。
- 跨平台 – 因为我们的客户越来越希望得到跨平台支持,所以我们跨平台了。
.NET 2015 的主要组成
Frameworks and Runtimes
.NET Framework 是一个管理执行环境,为运行的应用程序提供各种服务。它包括两个主要组件:公共语言运行时(CLR),它是用于处理正在运行应用程序的执行引擎;另一个组件是 .NET Framework 类库,它提供了测试,可重用的代码,开发人员可以从自己的应用程序中进行调用。
.NET Framework 4.6 建立在 4.5.2 版本之上,其中包含新的 API,改进的事件跟踪,以及修复一些 bug。这就是我们今天所知道完整 .NET Framework 的下一个版本。.NET Framework 4.6 将包含在 Windows 10 中,也将在 Windows OSes (Vista and above) 以上版本,进行推出并更新,参见:.NET Framework 2015 Preview。
.NET Core 5 是一个通用的模块化框架,可以跨各种应用程序模式和平台进行使用,并且它是开源的,可以模块化和组件化部署,并且支持微软 Windows,Linux 和 Mac OSX。这是重构的一套基础类库(corefx)和运行时(coreclr),其中包括一个新的 JIT 编译器(“RyuJIT”)、.NET 垃圾机制、本地互操作和其他一些 .NET 运行时组件。如今,.NET Core 构建并运行在 Windows 上。在未来数个月,我们正在增加 Linux 和 Mac 特定平台下的组件,参见:Introducing .NET Core 和 CoreCLR is now Open Source。
如果你从这篇文章只点击一个链接,那当然是 Introducing .NET Core,IMMO 非常详细的解释了我们为什么需要它,以及它如何使用。
Compilers-编译器
.NET Compiler Platform ("Roslyn") 提供了开源 C# 和 Visual Basic 编译器,以及丰富的代码分析 API,它和 Visual Studio 构建代码分析工具被使用的API,是相同的。Roslyn 产生独立于平台的中间语言(IL),并针对 .NET 2015,包括 Framework 和 Core 构建时使用。在发布时,整个 .NET Framework 将通过 Roslyn 进行编译。还有关键的语言变化 VB 和 C#,参见:Roslyn on GitHub ,也有 F# 语言和编译器的变化,参见:F# on GitHub。
“RyuJIT” 是新的默认即时(JIT)编译器,JIT 编译器将 IL 编译为特定的机器语言,在第一次在运行时执行。用于桌面和基于服务器的情况下,RyuJIT 是先前 64 位 JIT 编译器的修复版本,显著减少了启动时间,它还包括支持 SIMD(单指令,多数据),在平行方式下,它允许数学运算来执行一组值,这可以提供一个加速,对某些依赖于向量运算的应用程序类型,参见:The next-generation JIT compiler for .NET。
.NET Native 可以像 C++ 一样,将 C# 直接编译为本地机器码执行,因此开发人员继续从 .NET Framework 性能和效率中受益。通常情况下,.NET 应用程序被编译成中间语言(IL),在运行时,即时(JIT)编译器会将 IL 再编译成本地代码。相比之下,.NET Native 是一个 ahead-of-time 编译器,直接将应用程序编译成本地代码,并包含一个小的 CLR 运行时。当编译使用 .NET Native 方式,流行的 Windows Store 应用程序启动速度将提高至多 60%,并减少 15-20% 的内存使用,通用的 Windows 应用程序将运行在 .NET Native (ARM, x86, x64) 上,参见:Compiling Apps with .NET Native。
App Models-应用程序模型
应用程序模型扩展了 .NET Framework 4.6 基础类库和 .NET Core 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 Core 5 的优化设计。
ASP.NET 5 是一个精简的应用程序模型,用于构建现代 Web 应用程序。它被构建从本地到优化开发框架的应用程序,它由最小开销的模块化组件组成,让你保持灵活性,同时构建你的解决方案。ASP.NET 5 可以在.NET Framework 4.6 或.NET Core 5 上运行,今天,ASP.NET 5 在 Linux 和 Mac 上运行,使用的是 Mono runtime,一旦 .NET Core 支持 Linux 和 Mac,那么 ASP.NET 5 将为这些平台,转移使用 .NET Core,参见:Introducing ASP.NET 5。
通用的 Windows 应用程序是一个应用程序模型,可以让你在 Windows Phone 和 Windows 应用程序(8.1+)之间分享源代码,并部署到 Windows 应用商店。通用的 Windows 应用程序将运行在 .NET Native 上,编译 IL 为本地机器码,并包含一个最小的 CLR 运行时,参见:Building universal Windows apps for all Windows devices 和 Getting Started with .NET Native。
.NET Core 又是什么?
.NET Core 5 是通用的模块化框架,可以广泛在多种应用程序模型和平台中使用,因为它是基础类库(corefx)和运行时(coreclr)的重构。对于不同的应用程序模型,这些 .NET Core 基础类库(BCL)的 API 是相同的,这些 API 不只是看起来是一样的-它们共享相同的实现,大多数的 API 或程序集更加模块化,并且平台独立。
App-local (or side-by-side) 的部署也是 .NET Core 的一个关键特征,你可以为你的应用程序部署,选择你需要的程序包,模块化的程序包使用 NuGet,这意味着你的应用程序可以单独运行,并且不会受到完整 .NET Framework 版本的影响,你的应用程序可以 x-copy 部署,并且完全不用担心。
.NET Core 支持 Windows、Linux 和 Mac OS X,今天,.NET Core 构建并只能在 Windows 上运行,但我们正在加入 Linux 和 Mac 特定平台下的组件实现,这一切都开源,这是非常重要的,对于在 .NET 跨平台的基础上,建立一个强大的生态系统。
从代码到运行应用程序-.NET Core 开发
当我们学习技术知道它们是如果进行工作的方式,我认为这是非常有帮助的,这是我开发应用程序和 .NET Core 的简单看法,从代码/构建/调试周期到应用程序的部署和执行,部署和执行使不同的,取决于你的应用程序模型。
你写的代码是非常模块化,来引用你所需要的 BCL 和应用程序模型组成部分,Roslyn 编译器将你的代码,生成独立于平台的中间语言(IL),除了编译器的管道,有一组丰富的 API,你可以用做各种分析你的代码,如果你正在使用 Visual Studio,这是 IDE 的一个新特性,利用这些 API 给你一个更高效的编码体验。
如果你正在构建一个通用的 Windows 应用程序,.NET Native 工具链将从那里拿过来,你的应用程序引用被构建成一个本地部署本机映像和一个小的运行时,如果你正在构建一个 ASP.NET 5 应用程序,引用和 CoreCLR 与你的应用程序部署在本地服务器,使用 RyuJIT,JIT 编译在启动时发生。
此外,ASP.NET 5 可以让你改变你的代码,保存更改,并刷新浏览器(在没有明确重新构建项目的时候),Visual Studio 中使用 Roslyn 启用动态编译,你还有所有编译框架的结构和权力,但开发体验感觉更像是一种解释型语言。
注意:如果你正在关注的是完整 .NET Framework 4.6,那么你仍然可以享受在语言和 Roslyn 编译器新的变化中,应用程序的部署从它出现的时候就没有发生变化,它仍然依赖于具有安装在机器上的完整框架,但 JIT 编译变成了优化的 JIT 编译,那就是 RyuJIT。
What is open, 现在吗?
很多 .NET 2015 项目都是开源的,并且在 .NET Foundation 的管理下,我们和社区正在积极努力的工作,使这些项目尽早开源。
你可以在 .NET Foundation 看到所有项目的版本库和活动记录,GitHub:http://dotnet.github.io/ 。
这里有几个不错的项目开始,签出非常详细的说明和提交规范。
- ASP.NET 5: https://github.com/aspnet/Home
- .NET Core CLR: https://github.com/dotnet/coreclr
- .NET Core Framework: https://github.com/dotnet/corefx
- Roslyn: https://github.com/dotnet/roslyn
另外,值得一提的是完整 .NET Framework 是“开源”,也就是说,我们不是没有完全提交 ,它不是一个 OSI 批准协议的完整版本,但你可以在这里查看到所有的源代码:http://referencesource.microsoft.com/ 。
项目正在开放中
对于微软来说,OSS 不是新的,但它是一个新的 .NET 运行时和类库,这是一个相当大的想法,一个 15 年的老项目,这么多的人都在内部工作,长期并不仅仅只是移动代码,但所有的工程流程都是开放,这需要时间,这就是为什么团队从一个小的基础类库开始,并已经发布越来越多,并在这个过程中学习,这些经验和最佳实践已经影响了整个团队,We’ve been humbled by the overwhelming support and contributions so far.
你可能会想到自己:“在白天,我没有足够的时间来构建自己的应用程序,更不用说搞清楚,如何编写代码的 CLR!”很公平,我和你在一起!你可以选择你希望参与的方式,你不用写代码就是一个贡献者,File an issue, comment on a proposal, answer a question,或者只是查看活动。
你可能会想:“我不希望失去的简单,也不是我习惯的质量和支持!”,别担心!我们像以前一样仍致力于质量和服务的水平。简单地说,我们所做的就是使我们的项目开放,我们此前曾在内部完成构建软件,它现在只是开放罢了。
我真为我们的团队文化和 .NET 的未来感到兴奋。
享受吧!
[更新 2015年2月26日]-我应该还提到,dotNetConf 2015 快到了,你可以学到很多,这是一个免费的虚拟活动和演讲,来自社区和产品团队,3月18日、19日准时直播。
翻译一篇英文文章的时间,可以写好几篇文章了,花了时间,翻译出来却像“翔”一样,惨不忍看,建议大家读原文。
但话说过来,这个翻译过程,对我来说,真的很有收获,这就足够了。