追时间

Yak shaving during web development, thoughts...from Jijie Chen

.NET Core:面向未来的开源跨平台开发技术

为一种全新的开源和跨平台的开发平台,.NET Core 历经两年多的开发,终于在于2016年6月27日针对所有主流服务器和桌面操作系统发布 1.0 RTM 版本。.NET Core 是一种通用开发平台,它包含了自动内存管理和现代化高级开发语言等重要特性,这些都能让面向多个平台开发静态类型的高质量应用程序变得轻松。.NET Core 本身采用 MIT 协议开源,因此可以免费用于各种类型的商业和闭源项目。

不同于内置于 Windows 系列操作系统上的 .NET 框架,.NET Core 是微软从 2013 年启动新开发的一项技术,它与此前的 .NET 框架是不能直接兼容的。此外,与此前 .NET 的框架之间更显著的不同可能是, .NET Core 的完全开源,以及跨平台的能力。


全新的 .NET Core

.NET Core 是开源和跨平台的

.NET Core 本身的开发工作是基于开源项目代码大本营 GitHub 网站的,.NET Core 核心的代码都采用了 MIT 授权协议,也有少数项目采用了 Apache 协议。在前不久的“开发者论坛”活动现场,针对笔者提出的 .NET Core 开源理念的询问,微软开发工具事业部副总裁潘正磊女士回答说“它一开始就被设计为开源的”,这一理念很真诚地表达了 .NET Core 开源的决心,在过去两年多时间以内,核心开发团队也以行动证实了这一点。在 GitHub 上,与 .NET Core 相关的代码库有一百来个,分布在多个账户中。来自世界各地、包括中国的大量开发者都参与了 .NET Core 的开发过程:开发团队会每周与社区跟进进度、讨论计划,随时在线上回答其他开发者的提问,合并其他开发者贡献的代码。笔者也有幸见证这一过程,并实际参与到其中几个项目的贡献中。

跨平台的说法,在各种开发技术上一直以来饱受争议。从前,人们提出“编写一次,到处运行”的理念到最后变成“编写一次,到处调试”的笑话。以至于现在一提跨平台,大家都持一种怀疑的态度。事实上,对跨平台的需求是真实存在的:我们使用 Windows 或 macOS 从事开发工作,而使用 Linux 系统作为服务器环境;我们开发一套运行在服务器上的软件产品,希望将服务器平台的选择自由留给客户……因此对于现代化的轻量级开发技术栈而言,跨平台也成为一个基本要素。典型的轻量级开发平台大多是基于动态语言的,比如 PHP、Python 或 Node.js,这类动态语言正是由于“动态语言”的特性,在一些场合显得过于灵活、难以掌控,在工程的内建质量和开发效率上取得平衡并不容易。


开源跨平台的 .NET Core

对于 .NET Core 来说,跨平台这个目标并没有多少历史包袱。在开发 .NET Core 本身的过程中,开发团队很早就使用了持续集成的实践来保障代码针对多个平台的兼容能力。在开发进程中,团队同步维护多个示例项目,例如经典的 MusicStore,及时回归核心特性、保障稳定性。从两年之前开始,就陆续有 alpha、beta 和 RC 版本发布出来,让开发者提前体验到新运行时的同时,也借助 GitHub 开源平台及早收到来自社区的监督和帮助。借助这些一系列的措施,.NET Core 跨平台的能力有着充分的事实保障。


.NET Core 是适应趋势的生产力平台

新打造的 .NET Core 有一些关键特性,颇具吸引力。例如与特定操作系统无耦合,可编译为原生平台代码,运行效率极高;完全模块化, 内置包管理器用于管理依赖项;提供完整而标准化的命令行工具集,与 Docker 等新近技术能无缝集成。它虽然是全新的开发平台,却直接使用 C# 这样的明星静态语言的最新版本作为开发语言,充分运用 .NET 平台十几年积累的设计理念,汲取过去数十年各种编程语言和开发模型中的精华,才最终锻炼成适用于下一代开发工作的新平台。

由于它是一项新兴的技术,过往的类库不能直接与它兼容。为了解决一开始应用这项技术可能存在的框架和类库缺乏的问题,在开发 .NET Core 框架的同时,微软还投入资源以开源的方式重写了大量开发框架和常用类库,比如 ASP.NET MVC、EntityFramework 等。不仅如此,一套面向非 Windows 环境的生态系统工具也在同期陆续地发布了出来,包括跨平台的编辑器 Visual Studio Code,高性能 Web 服务器 Kestrel 以及持续集成编译工具 Cake 等。从这些举动可以看出,微软在 .NET Core 上投入的诚意实在真挚可见。

在国外,不少开发者已经在积极响应 .NET Core 的路线,发布基于 .NET Core 的运行时的类库,提供兼容 .NET Core 的 SDK 等。常用的 XUnit.net、Moq、Autofac、MongoDB 和 RavenDB 等流行的类库和工具已经提供了对 .NET Core 的支持,或正在积极地开发新的版本。在国内 .NET Core 在社区中的交流学习也正在稳步铺开。很多开发人员已经着手文档翻译、源码学习,以及实践分享等工作。在博客园网站上已经出现不少关于 .NET Core 的文章,而在颇受关注的公众账号“.NET 跨平台”中,也已经发布了与 .NET Core 相关的文章。这些都预示着一个重要的新平台的来临,而且 .NET Core 这项新技术的成长一定是与社区合作密不可分的。


展望

软件工程在走过了野蛮生长,到达了基于云的互联网产业形态日趋成熟的今天,开发技术的发展已经从现实中收获了不少经验。从活跃的 Web 开发技术的发展足以反映出开发者对新技术的向往了。然而在大谈了 B/S 架构十余年之后的今天向回看,服务器端的基础开发技术在过去的五年、十年乃至更久的时间之内,并没有发生大的改善。新入门的开发者,仍然走着上一代开发者的老路,一步一步摸着石头过河——在网上搜索着上一代人写下的伴随他们成长留下的严重过时、版本错乱,甚至漏洞百出的文章和贴子,似乎津津有味,却是迷惑不解。

我们都需要新技术,那种能让新一代开发者认为“属于这个时代,并且面向未来”的新技术。请相信,.NET Core 就是你期待的那个新技术。它刚刚产生,却已胸怀古今,诗与远方唾手可得!



blog comments powered by Disqus