.NET平台的历史和替代方法

我最近很幸运地与编写DotNetAnywhere (.NET Runtime的替代版本)的Chris Bacon聊天,我很高兴地指出:


...您可能是创建自己的.NET运行时的少数人之一,这真棒!

如果我们排除了那些有薪水的人,即 Microsoft / Mono / Xamarin工程师,他们很少。



这是Matt Warren( .NET运行时历史 )的翻译。 为了不重新发布,我将按原样离开


然后我想:.NET运行库总数有多少? 首先,我列出了自己的清单,然后将一组高薪研究人员(我的订户)与这种情况联系起来:



对于本文而言,.NET运行时是指基于ECNET的ECMA-335标准实现的所有内容 (有关更多信息, 请参见此处 )。 我不知道是否有更精确的定义或某种正式确认符合性的方法,但是实际上这意味着运行时支持任何C#/ F#/ VB.NET编译器创建的exe / dll.NET文件。


列表准备好后,我便进入了Wikipedia(请参阅源列表)。 结果为以下时间顺序:



时间轴制造商
(对于交互式版本,请单击链接)


如果我错过任何运行时,请告诉我。


为了促进对时间顺序的理解,我将每种媒介都归为以下类别之一:


  1. Microsoft .NET框架
  2. 其他Microsoft运行时
  3. Mono / Xamarin运行时
  4. AOT编译运行时
  5. 社区项目
  6. 研究项目

文章的其余部分将专门介绍不同的运行时。 他们为什么出现,他们能做什么以及为什么要进行比较。


Microsoft .NET框架


微软最初的.NET Framework出现于90年代后期,但此后才变得更加高效。 最近,该公司宣布发布.NET Core框架,从而改变了发展方向,该框架以跨平台和开放源代码而著称。 此外,通过开发.NET Standard规范,Microsoft提供了跨运行时环境的互操作性。


.NET标准规范提供代码共享。 它定义了所有.NET实现中应可用的API集,以符合该标准。 这样可以确保所有.NET运行时的一致性,并防止将来出现碎片。

有点题外话:如果您想了解更多有关.NET的历史,我建议您听Anders Halesberg或观看Richard Campbell演讲 -这是一个非常酷的讲故事的人。



(也可以提供播客 。此外, Campbell还在写关于同一主题的书 。如果您想了解整个.NET生态系统的历史,而不仅仅是运行时,请查看.NETLegends页面)。


其他Microsoft运行时


除了广泛使用的核心.NET Framework之外,Microsoft还发布了用于特殊目的的其他版本的环境。


.NET Compact Framework


紧凑(.NET CF)和微型(.NET MF)框架试图为资源受限的设备创建较短的运行时版本。 例如,.NET CF:


...设计用于资源有限的移动或嵌入式设备,例如PDA,移动电话,工业控制器,机顶盒等。 .NET Compact框架使用一些与.NET完整版相同类的库,以及几个专门为移动设备创建的库,例如.NET Compact控件。 但是,库不是.NET Framework中使用的库的精确副本。 它们减少了占用的空间。

.NET Micro Framework


.NET MF框架更小,并且:


...适用于资源有限的设备,它们至少具有256 KB的内存和64 KB的RAM。 它包括.NET CLR的简化版本,并支持C#和Visual Basic .NET开发,以及使用Microsoft Visual Studio的调试(在模拟器或硬件中)。 NETMF实现了一组.NET基本库(大约70个类和420个方法)。 添加了用于嵌入式应用程序的特殊库。 这是根据Apache License 2.0发布的免费开源软件。

对于那些想尝试实际使用该框架的人,Scott Hanselman写了一份出色的《 .NET Micro Framework-适用于软件人员的硬件》指南。


银光


尽管平台处于支持模式 (视您的观点而定,甚至处于停滞状态或即将日落),但返回原始公告并查看Silverlight的目的是很有趣的:


Silverlight是基于NET的跨平台,跨浏览器的扩展模块,旨在为浏览器创建丰富的Internet应用程序。 本周发布的预构建版本支持Mac和Windows上的Firefox,IE和Safari。

在2007年,Silverlight 1.0实现了以下功能(该平台甚至可以在Linux上运行):


  • 支持用于在浏览器中播放VC-1和WMV视频文件以及MP3和WMA格式的音频文件的内置编解码器...
  • Silverlight支持从任何Web服务器逐步下载和播放媒体内容的功能。
  • Silverlight还可以选择支持集成媒体流...;
  • 使用Silverlight,您可以创建多功能的用户界面和动画,将矢量图形和HTML结合起来以创建有吸引力的内容...;
  • Silverlight使创建丰富的交互式视频内容变得容易...

另外,如评论中所建议,Silverlight 在Symbian S60上


Mono / Xamarin运行时


Mono的出现是Miguel de Icaz和其他开发人员试图使.NET在Linux上运行的结果(来自Mono的早期历史 ):


谁是第一个对我来说并不重要,因为我认为Mono是达到目的的一种手段:一种可以帮助Linux在台式机上立足的技术。

同一篇文章描述了一切的开始:


至于Mono,事件大致发生如下。
.NET文档于2000年12月发布后,我对这种技术开始感兴趣,并且像其他所有人一样,开始从字节码解释器中研究它。 但是,我很快遇到了一个问题-缺少元数据规范
早期虚拟机源中的最新更改于2001年1月22日发布。大约在这个时候,我开始使用.NET邮件列表编写消息并询问有关元数据文件格式的缺失信息。
...
大约在同一时间,Sam Ruby试图说服ECMA委员会成员发布对二进制文件格式的描述,但这不是其计划的一部分。 我不知道一切如何发展,但是到2001年4月,ECMA发布了文件格式的说明。

随着时间的流逝,Mono( 现在为Xamarin )已扩展到其他平台。 该框架可在Android和iOS / Mac上运行。 2016年2月,微软收购了Xamarin。 值得回顾的是Mono / Xamarin与Unity之间长期的合作 ,旨在为Unity中的C#提供支持。 同时,Unity现在是.NET Foundation的成员。


AOT编译运行时


我将此类环境归为一个单独的类别,因为传统上.NET使用JIT编译 ,但是随着时间的流逝,出现了更多使用AOT的实现。
据我所知,第一个是Mono框架,其中AOT编译于2006年出现。 此外,Microsoft最近发布了.NET Native,他们目前正在CoreRT上工作,CoreRT是为AOT编译而优化的.NET运行时环境。


社区项目


但是,并非所有.NET运行时都是由Microsoft或其后来购买的公司开发的。 有一些由社区实施的项目。


  • 其中最老的是DotGNU Portable.NET 。 它的开发与Mono同时开始,其目标是“创建一套免费的工具,用于在CLI的框架内编译和执行应用程序……”。
  • 其次,我命名为DotNetAnywhere ,它是由一个人Chris Bacon开发的。 DotNetAnywhere以充当Blazor项目的初始运行时而闻名。 这也是一个很好的机会,它使您可以了解什么构成了.NET兼容的运行时,而无需花费大量的时间编写构成CoreCLR的代码!
  • 然后是CosmosOS一个GitHub项目 ),它不仅是.NET运行时,而且是托管操作系统。 如果您想了解更多信息,建议您阅读此常见问题解答部分或“ 深入了解” 。 另一个类似的尝试是SharpOS
  • 最后,我最近遇到了CrossNet 。 此运行时“解析.NET程序集并生成可以由任何C ++编译器编译的非托管C ++代码。” 要了解更多信息,请查看文档和示例生成的代码。

研究项目


现在让我们进入鲜为人知的.NET运行时。 这些是Microsoft开展的研究项目,目的是了解托管执行环境的功能可以扩展多少,以及在其帮助下可以解决哪些任务。 .NET环境的商业实现中出现了一些研究发现,例如Span <T>源自Midori项目


共享源通用语言基础结构(SSCLI) (或转子)


Microsoft的CLI(.NET Framework)的实现,其中的源代码在Shared Source许可下可用。 尽管SSCLI由于特定的许可而不适用于商业用途,但借助它的帮助,程序员可以分析许多.NET库的实现功能并创建CLI的修改版本。 Microsoft提供了Shared Source CLI作为教育参考CLI。

有趣的是,随着Rotor的发布,该公司得以发布Gyro项目 ,该项目提供了泛型如何在.NET运行时中出现的想法。


绿鸟


Midori是Microsoft与Microsoft Research联合开发的托管代码操作系统的代码名称。 据报道,它可能成为Singularity操作系统的商业实现,Singularity操作系统是一项研究项目,于2003年启动,旨在创建一个高度可靠的操作系统,其中内核,设备驱动程序和应用程序由托管代码组成。 它是为并行计算而设计的,可以同时运行分布在多个节点上的程序。 它还基于隔离环境中运行的应用程序实现了安全模型。 Microsoft建议了几种从Windows迁移到Midori的可能方法。 尽管该操作系统中实现的许多想法都属于其他Microsoft项目,但该操作系统的工作已于2015年终止。

显然,来自Midori项目的大多数想法都回到了.NET Framework中。 您可以在有关Midori一系列文章中与Joe Duffy一起阅读有关此内容的更多信息:


  1. 三个安全的故事
  2. 对象作为安全功能
  3. 异步一切
  4. 安全的本机代码
  5. 错误模型
  6. 表演文化
  7. 并发15年

单一性(操作系统) (也包括单一性RDK)


奇点是Microsoft Research在2003年至2010年之间开发的实验性操作系统。 它被认为是一个高度可靠的操作系统,其中内核,设备驱动程序和应用程序由托管代码组成。 内部安全性使用类型安全性而不是硬件内存保护。


红鹰


最后但并非最不重要的环境是Redhawk
演变为CoreRT的托管代码运行时的实验性最低版本的代码名称。


参考资料


以下是我用来创建按时间顺序排序的Wikipedia文章:



找到更多选择


网络60


在评论中, bmforce建议存在另一个平台Net60。 关于它的信息不多,但是设法在CodeGuru 的论坛文章上找到了提及


适用于Symbian S60 3rd的.NET Compact Framework终于发布了!
因此,您可以使用Visual Studio 2005的任何语言为Symbian编程。(Visual Basic,Visual C#,Visual C ++)。 消息附带了DotNet(net60)本身,您需要签名并将其安装在手机上。 顺便说一句,它可以运行Windows Mobile .NET CF上从其自己的文件夹编写的.exe文件!

月光


没有提及Moonlight,它基于 Silverlight的Mono-开源版本:


Moonlight是Silverlight的开源实现,主要用于Linux和其他Unix / X11操作系统。 最新版本的Moonlight(Moonlight 4 Preview 1)提供对核心Silverlight 3功能集的支持,以及与Silverlight 4的兼容性。

开拓者


同样没有提及的是新的Blazor项目 ,该项目有很大的成功机会:.NET for Web Assembly。 例如,在Try .NET项目中使用它,该工具包用于创建可在浏览器中运行的.NET代码示例。


PageFX


对我来说,这看起来绝对是太棒了,但PageFX项目的一位开发人员震惊了我,并删除了指向从.NET CIL到Flash字节码的转换器存储的存储库的链接。 太好了 :)这个项目的作者是@todysh



马特·沃伦(Matt Warren)的更多文章翻译


Source: https://habr.com/ru/post/zh-CN466811/


All Articles