前言

不知不觉中,.NET Framework 已经更新到 4.8,.NET Core 也更新到了 3.0 版本。那么 .NET 的未来怎么样呢?

计划

2019 年 Build 大会上,微软宣布下一个 .NET 版本(继 .NET Core 3.0 和 .NET Framework 4.8 之后)将是 .NET 5,统一 .NET Framework 和 .NET Core,从此只有一个 .NET,可以用来开发Windows,Linux,macOS,iOS,Android,tvOS,watchOS 和 WebAssembly 等等。

.NET 5 将基于 .NET Core 和 Mono 的最佳实践构建出一个平台,用于所有现代 .NET 平台的开发。

.NET 5 将于 2020 年正式发布,.NET 6 将于 2021 年正式发布,以此类推。其中偶数版本号为 LTS 版本。

继承

.NET 5 将制造一个可在任何地方使用的 .NET 运行时和框架, 并具有统一的运行时行为和开发人员体验,并且通过充分利用 .NET Core、.NET Framework、Xamarin 和 Mono 来扩展 .NET 的功能,最重要的是,全部开源,官方和社区共同参与扩展和改进。

.NET 5 仍然是开源的、跨平台的、高性能、支持旁加载安装模式和命令行操作等等,并与 Visual Studio、Visual Studio for Mac 和 Visual Studio Code 集成。

.NET 5 是基于 .NET Core 和 Mono 出来的,也就是说不存在断代的问题,是 .NET Core 的一个升级,同时改个名字顺便统一一下生态,也就是说您现有的 .NET Core 项目届时应当可以无缝升级,就像从 .NET Core 2 升级到 .NET Core 3 那样。

创新

新的 .NET 5 中,你可以选择使用 Mono 或 CoreCLR 运行时,前者主要针对移动设备、游戏平台和 WebAssembly,后者主要针对云服务、物联网、机器学习以及 Windows Desktop 等。

另外,.NET 5 将在所有平台上提供与 Java 的互操作性,和在多个系统上的 Objective-C 和 Swift 的互操作性

成就

高性能、高生产力

.NET 依赖 JIT 将 IL 转化为优化的机器代码,构建了业界领先的基于 JIT 的托管运行时,具有非常高的性能,提升开发人员的体验。

JIT 非常适合长期运行的云和客户端方案,它能够生成针对特定机器配置的代码,包括特定的 CPU 指令。JIT 还可以在运行时重新生成方法,可以进行快速的 JIT,并且针对频繁调用的方法生成高质量代码(即分层编译)。

从 Techpower 基准测试上 ASP.NET Core 运行的更快也是 JIT 的强大力量和在 CoreCLR 上投资的很好的例子。

大多数 .NET 5 工作场景的默认将使用基于 JIT 的 CoreCLR 运行时。不过 iOS 和 WebAssembly 例外,因为它们都需要 AOT 执行原生编译。

启动快,占用小

Mono 项目的大部分精力都集中在移动和游戏机上。该项目的一个关键功能和结果是基于业界领先的 LLVM 编译器项目的 .NET AOT 编译器。Mono AOT 编译器允许将 .NET 代码内置到一个可以在计算机上运行的原生代码可执行文件中,就像 C++ 代码一样。AOT 编译的应用可以在资源十分有限的地方中高效运行。

Blavor 项目 (WebAssembly) 已经在使用 Mono AOT,这将是最早过渡到 .NET 5 的项目之一。

有两种类型的 AOT 解决方案:

  • 需要 100% AOT 编译的解决方案。
  • 大多数代码是 AOT 编译的解决方案, 但 JIT 或解释器可用于 AOT 不友好的代码 (比如泛型)。

Mono AOT 支持这两种情况。出于安全原因,苹果对 iOS 和一些游戏机需要第一种 AOT。第二种方法是更好的选择,因为它即具 AOT 优点同时还能避免各种缺点。

.NET Native 是用于 Windows UWP 应用程序的 AOT 编译器,也是上面列出的第一种 AOT 类型的示例。在这个实现里限制了 .NET API 和可以使用的功能。微软从这一经验中了解到,AOT 解决方案需要涵盖 .NET API 和模式的所有方面。

在 iOS、WebAssembly 和一些游戏里将仍然采用 AOT 编译。而对于更需要快速启动或低占用空间的应用程序,AOT 编译将成为一个可选项。

未来

.NET 5 将融合 .NET Framework、.NET Core、Mono、Xamarin 等优点构建出一个统一的 .NET 平台,开发人员可以在此平台上用 C#、VB.NET、F#、XAML 语言、使用相同的 API 开发针对任何系统、任何架构、任何形态的应用程序,并且代码和库均可以通过 .NET Standard 共享。

参考资料

https://devblogs.microsoft.com/dotnet/introducing-net-5

.NET 的未来:.NET 5的更多相关文章

  1. CSS的未来

    仅供参考 前言 完成<CSS核心技术与实战>这本书,已有一个多月了,而这篇文章原本是打算写在那本书里面的,但本章讲解的内容,毕竟属于CSS未来的范畴,而这一切都还不能够确定下来,所以这一章 ...

  2. 从中间件的历史来看移动App开发的未来

    在移动开发领域我们发现一个很奇怪的现象:普通菜鸟新手经过3个月的培训就可以拿到 8K 甚至上万的工作:在北京稍微有点工作经验的 iOS 开发,就要求 2 万一个月的工资.不知道大家是否想过:移动应用开 ...

  3. 展望未来:使用 PostCSS 和 cssnext 书写 CSS

    原文链接:A look into writing future CSS with PostCSS and cssnext 译者:nzbin 像twitter,google,bbc使用的一样,我打算看一 ...

  4. 代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

    坏味道--夸夸其谈未来性(Speculative Generality) 特征 存在未被使用的类.函数.字段或参数. 问题原因 有时,代码仅仅为了支持未来的特性而产生,然而却一直未实现.结果,代码变得 ...

  5. 如何理解DT将是未来IT的转型之路?

    如今的IT面临着内忧外患的挑战. 一方面,企业多多少少都建立了信息化,有些企业或集团甚至会有数几十个分公司,包含直销.代理.零售以及第三方物流等多种业态.越是复杂的业务,信息化建设越困难,比如运用大量 ...

  6. 面向未来的友好设计:Future Friendly

    一年前翻译了本文的一部分,最近终于翻译完成.虽然此设计思想的提出已经好几年了,但是还是觉得应该在国内推广一下,让大家知道“内容策略”,“移动优先”,“响应式设计”,“原子设计”等设计思想和技术的根源. ...

  7. 【流量劫持】SSLStrip 的未来 —— HTTPS 前端劫持

    前言 在之前介绍的流量劫持文章里,曾提到一种『HTTPS 向下降级』的方案 -- 将页面中的 HTTPS 超链接全都替换成 HTTP 版本,让用户始终以明文的形式进行通信. 看到这,也许大家都会想到一 ...

  8. HTPC家庭娱乐和XBOX未来发展畅想<另:创业工作机会>

    微软中国在上海举办新闻发布会,正式宣布Xbox One将于9月23日在中国开始销售,定价3699元起.这款早在2001年就发布的电视游戏机终于在经历了14年的等待后,进军中国大陆市场.此次Xbox O ...

  9. 2015游戏蛮牛——蛮牛杯第四届开发者大赛 创见VR未来开启报名

    蛮牛杯启动了,大家开始报名! http://cup.manew.com/ 这不是一篇普通的通稿,别着急忽略它.它是一篇可以让你梦想变现的通稿! 从某一天开始,游戏蛮牛就立志要为开发者服务,我们深知这一 ...

  10. 来,一起让我们越来越懒,面向CSS、JS未来编程。(9.28已更新)

    2016.10.29更新 本文存在大量的错误,仅供参考. 不知不觉在前端领域马上一个年头就要过去了,然而再看看自己的代码,果然够烂,那么为什么代码一直没有用面向对象的思维去写CSS呢?首先有两点:一点 ...

随机推荐

  1. oracle实例状态

    oracle数据库实例启动过程分三个步骤,分别是启动实例,加载数据库,打开数据. 1.NOMOUNT模式:这种模式只会创建实例,不会打开任何的数据文件,用户要以sysdba的身份登录,才具有关闭和启动 ...

  2. 使用ASP.NET Core 3.x 构建 RESTful API - 3.3 状态码、错误/故障、ProblemDetails

    HTTP状态码 HTTP状态码会告诉API的消费者以下事情: 请求是否执行成功了 如果请求失败了,那么谁为它负责 HTTP的状态码有很多,但是Web API不一定需要支持所有的状态码.HTTP状态码一 ...

  3. 【CKB.DEV 茶话会】第二期:聊聊 CKB 钱包和 Nervos DAO 全流程

    CKB.DEV 茶话会第二期:聊聊 CKB 钱包和 Nervos DAO 全流程 为了鼓励更多优秀的开发者和研究人员参与到 CKB 的开发和生态建设中去,我们希望组织一系列 CKB Developer ...

  4. [TimLinux] Python如何运行程序

    1. Python解释器安装 访问官方网站:https://www.python.org/, 在首页标签中找到“Downloads”,根据不同的操作系统,选择相应的下载源文件即可. 2. 源码安装 在 ...

  5. Redis 命令执行过程(下)

    在上一篇文章中<Redis 命令执行过程(上)>中,我们首先了解 Redis 命令执行的整体流程,然后细致分析了从 Redis 启动到建立 socket 连接,再到读取 socket 数据 ...

  6. LightOJ1284 Lights inside 3D Grid (概率DP)

    You are given a 3D grid, which has dimensions X, Y and Z. Each of the X x Y x Z cells contains a lig ...

  7. Python 如何定义只读属性?【新手必学】

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Daniel2333如果还没学到属性问题,看不懂不怪你,可以先去小编的P ...

  8. 跨站脚本(XSS)备忘单-2019版

    这是一份跨站脚本(XSS)备忘录,收集了大量的XSS攻击向量,包含了各种事件处理.通讯协议.特殊属性.限制字符.编码方式.沙箱逃逸等技巧,可以帮助渗透测试人员绕过WAF和过滤机制. 译者注:原文由Po ...

  9. Springboot静态页面放在static路径下还是访问不到

    一种最常见的问题,静态资源放在默认的目录,如:resources/static或resources/templates 访问静态资源的时候,路径不应带上默认目录,因为springboot默认从这些目录 ...

  10. SQL-SQL查询检索阶段二

    一 前提准备 先声明一下,下面的库表只是简易的学习示例,不是生产的设计,不要深究,此文我们的目的是学习sql的检索不是库表设计:初学者最好跟着作者的文章一步一步敲一遍,如果没有使用过sql的可以查阅作 ...