當前位置: 妍妍網 > 碼農

呼籲改正【上海市衛生健康資訊科技套用創新白皮書】 C# 被認定為A 元件 的 錯誤認知

2024-06-25碼農

近日,微信公眾號上海衛生觀察發了一篇文章 節選, 【上海市衛生健康「資訊科技套用創新」白皮書】(以下簡稱【白皮書】)正式釋出,介紹了「醫療信創核心套用適配方法、公立醫院資訊系統及全民健康資訊平台信創設計思路」, 其中發現了一個錯誤的認知,C#/.NET 被認定為A 元件, 具體詳見下圖:

C#/.NET 平台需要被區分為兩個階段:.NET Core 1.0 對應的 C# 版本是 C# 7.0 為界線,我們來看下C# 的發展歷程:

  1. C# 1.0(2002年1月) :作為與 Visual Studio .NET 2002 一起釋出的版本,C# 1.0 在設計上受到了 Java 的影響。它的主要功能包括類、結構、介面、事件、內容、委托、運算子和運算式、語句以及特性,執行平台.NET Framework 1.0/Mono 1.0。

  2. C# 2.0(2005年11月) :此版本引入了泛型、匿名方法和叠代器等特性,大幅提高了語言的靈活性和效能,執行平台.NET Framework 2.0/Mono 2.0。

  3. C# 3.0(2007年11月) :這個版本伴隨著 .NET 3.5 的釋出,引入了LINQ、匿名型別、隱式型別的局部變量、物件和集合初始化器、擴充套件方法、查詢運算式、 Lambda 運算式等特性, 執行平台.NET Framework 3.5/Mono 2.0。

  4. C# 4.0(2010年4月) :增加了動態繫結、命名和可選參數、泛型協變和逆變、嵌入的互操作型別等特性, 執行平台.NET Framework 4.0/Mono 2.0。

  5. C# 5.0(2012年8月) :此版本引入了異步編程、呼叫方資訊、協變返回型別和成員等特性, 執行平台.NET Framework 4.5/Mono 3.0。

  6. C# 6.0(2015年7月) :引入了自動內容初始化器、運算式體成員、字串內插、空合並運算子、異常過濾器等特性, 執行平台.NET Framework 4.8/Mono 4.4,在2014年成立了.NET基金會。

  7. C# 7.0(2017年3月) :增加了 out 變量、元組、模式匹配、局部函式、ref 局部變量和返回、擴充套件異步返回型別等特性, 執行平台.NET Framework 4.8/Mono 6.12/.NET Core 1.0。

  8. C# 7.1 和 7.2 :這兩個小版本分別在 2017 年 8 月和 2017 年 11 月釋出,引入了預設運算式、異步 Main 方法、推斷元組名稱、數位分隔符、ref 結構、in 參數等特性, 執行平台.NET Framework 4.8/Mono 6.12/.NET Core 2.0。

  9. C# 8.0(2019年9月) :引入了可空參照型別、異步流、範圍和索引、預設介面方法、唯讀成員、解構委托等特性, 執行平台.NET Framework 4.8/Mono 6.12/.NET Core 3.1。

  10. C# 9.0(2020年11月) :隨 .NET 5 一起釋出,引入了記錄、僅限 Init 的資源庫、頂級語句、模式匹配增強、本機大小的整數、函式指標等特性 , 執行平台Mono 6.12/.NET 5.0。

  11. C# 10(2021年11月) :引入了記錄結構、結構型別的改進、內插字串處理常式、global using 指令、檔範圍的名稱空間聲明、擴充套件內容模式、對 Lambda 運算式的改進、可使用 const 內插字串、記錄型別可密封 ToString()、改進型明確賦值、在同一析構中可同時進行賦值和聲明、可在方法上使用 AsyncMethodBuilder 內容、CallerArgumentExpression 內容、增強的 #line pragma 等特性, 執行平台Mono 6.12/.NET 6.0 。

  12. C# 11(2022年11月) :增加了原始字串字面量、泛型數學支持、泛型內容、UTF-8 字串字面量、字串內插運算式中的換行符、列表模式、檔本地型別、必需的成員、自動預設結構、常量 string 上的模式匹配 Span、擴充套件的 nameof 範圍、數值 IntPtr、ref 欄位和 scoped ref、改進了方法組向委托的轉換、警告波 等特性, 執行平台.NET 7.0 。

  13. C# 12(2023年11月) :引入了主建構函式、集合運算式、行內陣列、Lambda 運算式中的可選參數、ref readonly 參數、建立任何型別的別名、試驗性內容、攔截器等特性, 執行平台.NET 8.0.

我們從C# 的發展歷程來看,他的執行平台一共有3個 Windows上的.NET Framework, 以及跨平台(Windows/Linux/Macos)執行的mono 和.NET Core/.NET , 從時間線上來看2014年成立.NET基金會是一個分水嶺,2020 .NET 5的釋出(2019年新冠疫情的爆發,統一的.NET時間變成了2020年),把.NET Framework/Mono/.NET Core 這三大平台開始統一為.NET,下面這張圖來自我2019年參加華為雲的一個演講PPT【面向 .NET 和 .NET Core 開發人員的華為雲】。

C# 從他的誕生之日就是標準的ECMA 334/335 標準,JavaScript 最初由 Netscape 開發,現在由 ECMA 標準化的 ECMA Script 版本廣泛套用於網頁開發。這些語言的標準化工作有助於確保不同平台和環境之間的相容性和互操作性。

從標準化角度來說,把C#歸類為A元件是完全錯誤的,從開源計畫和版權歸屬來說C# 在2014年成為開源計畫,並且所有的版權和專利都歸屬社群中立的.NET 基金會。Java 語言由 Sun Microsystems 開發,後來成為 Oracle 的一部份。Java的版權都歸屬Oracle,因此C#應當歸類為淺藍色的開源元件。

.NET 平台現在是指從(.NET 5.0開始的) 統一的C# 執行平台, 他的智慧財產權歸屬方是.NET基金會,使用最寬松的MIT和Apache 2開源協定,文件協定遵循CC-BY。這將允許任何人任何組織和企業任意處置,包括使用,復制,修改,合並,發表,分發,再授權,或者銷售。唯一的限制是,軟體中必須包含上述版權和授權提示,後者協定將會除了為使用者提供版權授權之外,還有專利授權,並且授權是免費,無排他性的(任何個人和企業都能獲得授權)並且永久不可撤銷。早在2022年微軟就已經特別公告過 。微軟已經在出口軟體頁面:https://www.microsoft.com/en-us/exporting/exporting-information.aspx 明確了.NET的所有版本(除了老的.NET Framework)不遵守美國出口管理條例EAR:https://www.bis.doc.gov/ ,因此我們完全不需要擔心存在「斷供」問題。

中國信通院在2022 | OSCAR開源產業大會 大會上釋出的 全球開源生態研究報告裏 首次提出 開源社群成熟度度量模型,.NET 是法律合規表現出色,元件授權證相容性較高。.NET開源生態是基於MIT 和 Apache 2.0 協定基礎上構建的,對於商業是友好的。

大家也可以下載信通院的【全球開源生態研究報告(2022年)】:http://www.caict.ac.cn/kxyj/qwfb/bps/202209/P020220916644891972234.pdf。

在國內,同樣有這麽一支在龍芯旗下的.NET編譯器團隊,他們在參與dotnet的核心開發,當然還有很多社群同學也在參與dotnet 的開源協作。龍芯.NET 團隊已經釋出了.NET Core 3.1和 .NET 6、.NET 7和.NET 8 , 他們也正在準備著釋出.NET 9。具體可以關註他們的產品官網 http://www.loongnix.cn/zh/api/dotnet/。

中科院軟體所還有一個團隊在移植 RISC-V的工作。

OpenEuler 社群對.NET 的支持也是完整的。 OpenEuler 社群的李洋 在2023年12月份 中國 .NET 開發者峰會 2023 上 大家分享【openEuler社群對.NET的相容支持介紹】,資料和視訊參見 .NET 中文社群的網站

上海市衛生健康「資訊科技套用創新」白皮書,這樣的內容作為白皮書向全社會釋出,需要遵守客觀、公平、公正的原則。這裏呼籲相關白皮書的釋出單位及時糾正其中的錯誤。