.NET 對于構建系統應用的探索歷程

這篇文章介紹和梳理一下截止到 2022 年的 .NET 向系統編程探索的歷程。

2003 年的 Singularity 項目試圖讓 Windows 的內核態與用戶態應用完全建立在 .NET 托管世界上,并試驗了一個支持編譯到本機代碼的類似 C# 的語言,并發布了很多相關的論文。后來 Singularity 項目被放棄,因為當時的 CLR 和 C# 的類型系統被認為難以處理系統編程。

2008 年的 Midori 項目試圖讓 Windows 的用戶態應用全部建立在 .NET 上,并且出了很多讓 CLR 和 C# 類型系統向適合系統編程的方向改進的提案,例如 ref 相關和各種零分配抽象設施等等,同時誕生了 RedHawk 項目,也就是 .NET Native 的前身,一個以 UTC 為后端(MSVC 的代碼生成后端)的支持將 C# 代碼編譯到本機代碼的編譯器。

2015 年 Project N 項目將 RedHawk 編譯器帶到了 .NET Core 1.0 中,并且改名為 .NET Native,同時支持了 UWP。以及誕生了 LLILC 項目,實驗將 LLVM 作為后端的 JIT。另外,.NET 發布了下一代高吞吐量 JIT:RyuJIT,用于取代先前 UTC 后端的 JIT64,顯著改善了代碼生成效率和質量,并給 .NET Core 啟用。.NET Native 更名為 CoreRT 后開源,將 UTC 后端更換為 RyuJIT 后端。

2017 年開始在 CoreCLR、C# 和 .NET BCL 中加入 Midori 項目中探索出來的特性之一 ref struct 和 Span 系列。同年 LLILC 項目基本宣告失敗,主要因為 LLVM 導致的 JIT 吞吐量低下和 CoreCLR 與 LLVM 類型系統相關問題難以解決,該方案被放棄。另外,RyuJIT 正式上位成為 .NET Framework 和 .NET Core 的默認 JIT。

2019 年 CoreRT 更名為 NativeAOT 再次成為實驗性項目繼續發展,并分叉出 NativeAOT-LLVM 分支實驗將 LLVM 作為后端支持生成 WebAssembly 的將 .NET 程序集編譯到本機代碼的編譯器。同年 CoreRT 的一部分成果被拿去做 crossgen2,這是一個支持交叉編譯的生成本機代碼的編譯器,用來作為混合 AOT 方案。

2021 年 crossgen2 作為下一代 ReadyToRun 特性正式推出,同時也使得 .NET RyuJIT 支持了交叉編譯來生成各平臺和架構的代碼。

2022 年 Midori 項目提案的另一波語言特性繼續加入 CoreCLR 和 C#,諸如 ref fields、生命周期以及 ref struct 配套的泛型和反射支持等等,同時 NativeAOT 也正式發布。

這方面的探索仍在持續進行中,期待未來的發展,同時如有不對之處歡迎指出。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286671.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286671.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286671.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android之tint圖片著色器

1、爆照 上面是原圖,下面是點擊效果。 2、介紹 設置著色模式用的。這個模式共有6種,分別為: multiply screen src_in(默認) src_over src_atop add android:tint 屬性可以改變圖片顏色 3 源代碼 colors.xml <?xml version="1.0" encoding="utf-8&qu…

完美解決ArcGIS10.x柵格空間插值報錯無法進行和導出插值柵格結果出錯的問題

不少GISer,尤其是初學者,對柵格數據的操作,主要是柵格插值無法進行,或者是插值后的柵格結果無法導出,或者導出結果為空,或者是柵格格式無法轉換,今天劉一哥GIS就幫您排憂解難吧。 其實,關于柵格(尤其是ESRI GRID格式)問題,我們只需要要記住兩點,一般問題就可以迎刃…

關于 Oracle分頁數據重復的問題

2019獨角獸企業重金招聘Python工程師標準>>> 先說問題吧。最近在測試一個新的模塊&#xff0c;發現列表數據的前三頁數據竟然是一樣的。第一反應是 pageNo 的問題&#xff0c;debug一看&#xff0c;pageNo是正確的&#xff0c;然后一層層debug下去&#xff0c;所有參…

10分鐘做一個新聞問答web站點[iVX低代碼實戰]

一、創建首頁 進入到iVX線上編輯器后&#xff0c;選擇相對定位。 點擊創建后進入到 IDE 之中&#xff1a; 我們在第一步中首先創建一個首頁。點擊左側組件欄中的頁面組件&#xff0c;創建一個頁面&#xff1a; 接著重命名該頁面為Home&#xff0c;在頁面中創建一個行&#x…

iOS開發網絡篇—網絡編程基礎

一、為什么要學習網絡編程 1.簡單說明 在移動互聯網時代&#xff0c;移動應用的特征有&#xff1a; &#xff08;1&#xff09;幾乎所有應用都需要用到網絡&#xff0c;比如QQ、微博、網易新聞、優酷、百度地圖 &#xff08;2&#xff09;只有通過網絡跟外界進行數據交互、數據…

PDF.js開發筆記

PDF.js是一個由HTML5建立的PDF閱讀器。依托開源社區驅動和Mozilla實驗室的技術支持。目標是建立一個通用的&#xff0c;基于web的解析和渲染PDF文件的平臺。https://github.com/ChineseDron/pdf.js# 是從Mozilla原版中fork出來的一個版本&#xff0c;原版的鏈接在這里https://g…

深入理解Three.js(WebGL)貼圖(紋理映射)和UV映射

本文將詳細描述如何使用Three.js給3D對象添加貼圖&#xff08;Texture Map&#xff0c;也譯作紋理映射&#xff0c;“貼圖”的翻譯要更直觀&#xff0c;而“紋理映射”更準確。&#xff09;。為了能夠查看在線演示效果&#xff0c;你需要有一個兼容WebGL的現代瀏覽器&#xff0…

Android之glide加載圓形圖片地址異常監聽

1 問題 glide加載圖片地址的時候&#xff0c;可能這個地址沒有圖片&#xff0c;那么我們需要對這種異常情況進行處理&#xff0c;當然我們也需要把這個圖片進行圓形化 2 代碼解決 Glide.with(mContext).load(iconPath).error(new ColorDrawable()).listener(new RequestListen…

在蘭州吃牛肉面時親眼目睹的一幕,我感動了

今天中午去吃占國牛肉面&#xff0c;人比較多&#xff0c;很熱鬧。旁邊坐了一群身穿校服的小學生&#xff0c;身后坐著一位小學老師&#xff0c;當孩子們發現老師在后面的時候&#xff0c;都異口同聲地叫老師過去跟他們一起吃&#xff0c;老師嘿的一笑&#xff0c;沒同意&#…

如何跨 Namespace 同步 Secret 和 ConfigMap?

Secret 和 ConfigMap 資源對象是命名空間級別的。它們只能被同一命名空間中的 Pod 引用。所以有時候不得不手動為每個命名空間創建它們。但有很多場景&#xff0c;我們想讓它們是全局的&#xff0c;至少可以是跨命名空間共享的 Secret 和 ConfigMap&#xff0c;例如這些場景&am…

OS X 10.11 安裝Cocoapods

sudo gem install cocoapods報如下錯誤&#xff1a; ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/xcodeproj 解決的辦法是&#xff1a;sudo gem install -n /usr/local/bin cocoapods gem影像改成&#xff1a;https://ruby.taobao.org/…

一文總結學習 Python 的 14 張思維導圖

本文主要涵蓋了 Python 編程的核心知識&#xff08;暫不包括標準庫及第三方庫&#xff0c;后續會發布相應專題的文章&#xff09;。 首先&#xff0c;按順序依次展示了以下內容的一系列思維導圖&#xff1a;基礎知識&#xff0c;數據類型&#xff08;數字&#xff0c;字符串&am…

GEE學習筆記

掩膜 ? 在遙感圖像處理中&#xff0c;"掩膜"是指一種用于隱藏或保留圖像特定部分的技術。掩膜通常是一個二進制圖像&#xff0c;其中的像素值為0或1&#xff0c;分別表示遮蔽或保留。 ? 在去除云的情境中&#xff0c;掩膜通常用于隱藏圖像中被云覆蓋的部分&#…

十一、飛機大戰(IVX 快速開發教程)

十一、飛機大戰 制作微信小游戲大致流程與微信小程序、Web類似&#xff0c;不同的在于是組件的使用。 文章目錄十一、飛機大戰11.1.1 完成游戲角色制作11.1.2 完成物理世界添加11.1.3 完成子彈對象反重力運動11.1.4 使用對象組創建子彈11.1.5 子彈優化11.1.6 設置敵機11.1.7 優…

中國版LinkedIn呼之欲出

迄今為止&#xff0c;發展勢頭強勁的Facebook仍未上市&#xff0c;而美國職業社交網站LinkedIn 卻率先登錄紐約證券交易所&#xff0c;股價在第一天的交易中飆升&#xff0c;從45美元的發行價上漲了一倍&#xff0c;然后超過100美元&#xff0c;最終以94.25美元收盤。 LinkedIn…

Android之實現RecyclerView拖拽效果和固定部分元素不進行交換位置(包含源代碼下載地址)

1、效果爆照 啟動的效果 拖動過程中的效果 拖動后的效果 2、需求和問題 需求:RecyclerView實現拖拽效果,但是部分固定位置不能進行拖拽也不能在拖拽的過程中交換順序

各主流瀏覽器內核介紹

所謂的“瀏覽器內核”無非指的是一個瀏覽器最核心的部分——“Rendering Engine”&#xff0c;直譯這個詞匯叫做“渲染引擎”&#xff0c;不過我們也常稱其為“排版引擎”、“解釋引擎”。這個引擎的作用是幫助瀏覽器來渲染網頁的內容&#xff0c;將頁面內 容和排版代碼轉換為用…

測繪地理信息標準(國家、行業、地方)大全來了:測繪地理信息標準化服務平臺

測繪地理信息標準化服務平臺&#xff0c;這里有你需要的所有標準&#xff0c;趕快來圍觀吧&#xff01;

WPF效果第一百八十七篇之再玩ListBox

大周末的接著上一篇又玩了ListBox,這不又來再次去玩耍ListBox;畢竟是我的最愛,沒辦法就喜歡玩耍他;閑話也不多扯了,直接看最終效果:2、ItemsPanel還是老樣子:<ItemsPanelTemplate x:Key"CommonItemsPanelTemplate"><WrapPanel Orientation"Horizontal&…

Nginx支持比Apache高并發的原因

1.先從各自使用的多路復用IO模型說起&#xff1a; select模型&#xff1a;&#xff08;apache使用&#xff0c;由于受模塊等限制&#xff0c;用的不多&#xff09; 單個進程能夠 監視的文件描述符的數量存在最大限制select()所維護的 存儲大量文件描述符的數據結構 &#xf…