精彩 .NET 2015
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日准时直播。
翻译一篇英文文章的时间,可以写好几篇文章了,花了时间,翻译出来却像“翔”一样,惨不忍看,建议大家读原文。
但话说过来,这个翻译过程,对我来说,真的很有收获,这就足够了。
精彩 .NET 2015的更多相关文章
- #一周五# VS2015 CTP6, TFS2015 CTP1更新,老衣的开发工具汇总,2015 MVP 社区巡讲
又到周五,这一周博主我工作效率极高,每天更新博客一篇,<快速创建网站>系列已经进程大半了,希望这个系列能够对大家有所帮助.今天周五了,博主要休息一下,就给大家唠叨一下这段时间都发生了什么. ...
- #一周五# VS2015 CTP6, TFS2015 CTP1更新,老衣的开发工具汇总,2015 MVP 社区巡讲
又到周五,这一周博主我工作效率极高,每天更新博客一篇,<快速创建网站>系列已经进程大半了,希望这个系列能够对大家有所帮助.今天周五了,博主要休息一下,就给大家唠叨一下这段时间都发生了什么. ...
- Microsoft解读
微软-这个在软件行业影响着我们这个时代 我们所了解的微软或许只在于windows操作系统和office办公软件.但是我们如果只这样认为,那就大错特错了,微软能成为全球互联网巨头,并不是那么简单.今天我 ...
- 【SDN】SDN相关资料--了解一下电信领域的SDN
SDN相关资料 数据中心架构下ospf bgp如何选择及优缺点? - 数据中心 - 知乎 组播扩展OSPF_百度百科 carrier.huawei.com/cn/products/fixed-netw ...
- 2015微软MVP全球峰会见闻
2015.10.31-2015.11.8 一周的时间完成微软MVP全球峰会旅程,这一周在不断的倒时差,行程安排非常的紧张,还好和大家请假了没有更新微信公众号,今天开始继续更新微信公众号,开始新的旅程, ...
- 2015/10 中外合璧再现辉煌—CCFC2015技术峰会
笔者有幸参加了CCFC技术峰会,现在发布照片几张.大家看一下. 2015年10月14日,CCFC 2015电子数据取证技术峰会于四川成都举办,有200余名一线取证技术人员及国内外各行业专家参会.此次峰 ...
- MyEclipse 2015免费在线公开课,2月5日开讲
MyEclipse 2015免费在线公开课,2月5日开讲,由MyEclipse官方高级PM Brian Fernandes 主讲. 主讲内容: 更好地支持javascript和技术模块 全新的REST ...
- (视频) 开源,免费和跨平台 - MVP ComCamp 2015 KEYNOTE
2015年1月31日,作为KEYNOTE演讲嘉宾,我和来自全国各地的开发人员分享了作为一名MVP的一些体会. Keynote – Open Source, Free Tools and Cross P ...
- Visual Studio 2015官方汇总包括下载和视频
7月20日 23:30 Visual Studio 2015正式版正式发布,作为微软新一代开发利器,在全地球乃至全宇宙乃至全太阳系中最强大 且没有之一的IDE(上述描述来自微博用户评论)跨平台支持成 ...
随机推荐
- errno
关于errno有以下需要注意: 1 A common mistake is to do if (somecall() == -1) { printf("som ...
- 向mysql中插入Date类型的数据
先看数据库表的定义 date字段为sql.date类型.我要向其中插入指定的日期和当前日期. 一.插入当前日期 思路:先获取当前系统,在将当前系统时间转换成sql类型的时间,然后插入数据库.代码如下 ...
- 为什么commonjs不适合于浏览器端
有了服务器端模块以后,很自然地,大家就想要客户端模块.而且最好两者能够兼容,一个模块不用修改,在服务器和浏览器都可以运行. 但是,由于一个重大的局限,使得CommonJS规范不适用于浏览器环境.还是上 ...
- 《寒江独钓_Windows内核安全编程》中修改类驱动分发函数
最近在阅读<寒江独钓_Windows内核安全编程>一书的过程中,发现修改类驱动分发函数这一技术点,书中只给出了具体思路和部分代码,没有完整的例子. 按照作者的思路和代码,将例子补充完整,发 ...
- mac远程桌面连接windows 8.1 update,提示: 远程桌面连接无法验证您希望连接的计算机的身份
在网上找到解决方案: SolutionEnable RDP security layer in Group Policy on the machine: Verify that the firewal ...
- [实践] Android5.1.1源码 - 在Framework中添加自定义系统服务
前言 本文的方法要修改Android源码.但只要将系统服务写出来,也可以注入system_server进程将系统服务加载到system_server中. 步骤 1. 添加一个aidl文件,我将aidl ...
- 探索c#之一致性Hash详解
阅读目录: 使用场景 算法原理 虚拟节点 代码示例 使用场景 以Redis为例,当系统需要缓存的内容超过单机内存大小时,例如要缓存100G数据,单机内存仅有16G时.这时候就需要考虑进行缓存数据分片, ...
- Hystrix框架4--circuit
circuit 在Hystrix调用服务时,难免会遇到异常,如对方服务不可用,在这种情况下如果仍然不停地调用就是不必要的,在Hystrix中可以配置使用circuit,当达到一定程度错误,就会自动调用 ...
- is_null, empty, isset, unset对比
is_null, empty, isset, unset 我们先来看看这4个函数的描述 isset 判断变量是否已存在(配置)unset 把变量删除(释放)掉empty 判断变量是否为空is_null ...
- Java中Eclipse的使用
Eclipse是跨平台的自由集成开发环境(IDE),初衷主要为Java语言的定制.第一次使用就喜欢上了它.它可以帮我们导入包,而不需要我们导入,有很多快捷键提供我们使用,方便节省时间:最值得我喜欢的是 ...