日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Mono介紹

系統 2375 0
Mono 是一個由 Novell 公司(先前是 Ximian)主持的項目。該項目的目標是創建一系列符合 ECMA 標準(Ecma-334 和 Ecma-335)的 .NET 工具,包括 C# 編譯器和共通語言執行平臺。 與微軟的 .NET Framework 不同,Mono 項目不僅可以運行于 Windows 系統上,還可以運行于 Linux,FreeBSD,Unix,Mac OS X 和 Solaris。

Mono 現由 Novell 持有雙重許可,這和 Qt 和 Mozilla 應用程序套件的情況相似。 Mono 的 C# 編譯器及其相關工具發布于 GNU General Public License(GPL)之下,其運行時庫發布于 GNU Lesser General Public License(LGPL)之下,其類庫發布于 MIT License 之下。這些均是開源協議因此 Mono 是一個開源軟件。如果你打算向 Mono 貢獻你的源碼,則你須簽署一個版權分派給 Novell 以允許它將這些代碼在其它協議下再申請許可,從而允許 Novell 保留其雙重許可的能力來持有 Mono 的商業協議。

微軟開發了一個稱為共享源碼公共語言基礎(Shared Source Common Language Infrastructure,Shared Source CLI)的可用于 FreeBSD,Windows 和 Mac OS X 的 .NET 實現版本。微軟的共享源碼協議并不是開源軟件協議,且可能對于社區來說也是不足夠的(它明文禁止了對軟件的商業用途)。我們還可以見到另外一個 .NET 實現版本,Portable.NET 項目,該項目與 Mono 項目有著很多相同的目標。

Mono 虛擬機包含一個實時編譯引擎,該引擎可用于如下處理器:x86,SPARC,PowerPC,ARM,S390(32位模式和64位模式),x86-64,IA64 和64位模式的 SPARC。該虛擬機可以將代碼實時編譯或者預先編譯到原生代碼。對于那些沒有列出來的系統,則使用的是代碼解釋器。

歷史
Miguel de Icaza 在 .NET 的文檔于2000年10月發布時就馬上對 .NET 產生了興趣。在查看字節碼解釋器后,他發現對于元數據(metadata)沒有相應的說明文檔。2001年2月,de Icaza 在 .NET 郵件列表中索要到了那段缺失了的關于元數據文件格式的信息,并開始了采用 C# 編寫一個 C# 編譯器的工作,作為對 C# 的實踐。2001年4月 ECMA 公布了那段缺失的文件格式,而在 GUADEC(2001年4月6日-4月8日)de Icaza 展示了他的編譯器的一些特性(那個時候他的編譯可以解釋自身)。

Ximian 內部對如何創建能有效提升生產效率的工具進行了大量的討論,他們的目標是通過這些創建出來的工具讓使用者可以在更短時間內創建出更多的應用程序從而縮短開發周期和降低開發成本。經過可行性研究后,他們清楚地見到創建這樣的一項技術是可行的,于是 Ximian 從其它的項目抽調人員并創建了 Mono 的開發小組。由于缺少人力來創建整個 .NET 替代產品,他們在2001年7月19日的歐萊禮大會創建了 Mono 的開源項目。

差不多三年后,Mono 于2004年7月30日發布了1.0版本。

架構

類庫
類庫為應用程序開發提供一套廣泛而有效的工具類。這些工具類本是采用 C# 編寫的,但是由于 .NET 采用的公共語言運行時,它們可以用于任何 .NET 語言。類庫被按命名空間進行了結構化,并被放置于稱為程序集的共享庫中。在我們談到 .NET framework 時,我們多數是指這個類庫。

命名空間和程序集
命名空間是一種用于將邏輯上相似的類按層次結構分組的機制。這種機制防止了命名沖突。在這種結構化采用被點號"."分隔的單詞來實現。通常最頂層的命名空間是 System,例如 System.IO 和 System.Net(完整的命名空間列表可以在 Mono 文檔中找到)。當然還有別的頂層命名空間,例如 Accessibility 和 Windows 就是這樣的例子。新建的命名空間還可以以開發組織的名字開頭。

程序集是這些類庫的物理載體。它們跟 Win32 共享庫一樣都是 dll 文件,盡管不完全一樣。一些程序集的例子有:mscorlib.dll,System.dll,System.Data.dll 和 Accessibility.dll。命名空間經常被分拆到幾個程序集中,而一個程序集可以由幾個文件組成。

公共語言基礎和公共語言規范
公共語言基礎(Common Language Infrastructure,CLI),又叫公共語言運行時(Common Language Runtime),已由 Mono 實現。該運行時用于執行已編譯的 .NET 應用程序。公共語言基礎已被 ECMA 定義為標準 ECMA-335。 要運行一個 .NET 應用程序,你必須使用相應的參數調用運行時。

在 ECMA-335 的第六章詳細說明了公共語言規范(Common Language Specification,CLS)并定義了提供給公共語言基礎的接口,例如對于枚舉類型的隱含表示類型的協定。Mono 的編譯器負責生成符合公共語言規范的映射代碼,即公共中間語言(Common Intermediate Language,CIL)。Mono 的運行時將運行這類代碼。ECMA 標準先前還定義了一個符合公共語言規范的程序庫作為應用框架。

托管與非托管代碼
在原生的 .NET/Mono 應用程序中,所有代碼都是托管的,也就是說,是受管于 CLI 式的內存管理和線程安全管理的。其它的 .NET 或 Mono 應用程序可以通過使用 System.InterOpServices 庫創建 C# 綁定來調用已存的非托管代碼。 很多移植到 Mono 的類庫使用了 CLI 的這個特性,例如 Gtk#。

相關項目
現有大量與 Mono 相關的用于擴展 Mono 的項目,這些項目允許開發者在他們的開發環境中使用 Mono。這些項目包括:
Cocoa#,對原生 Mac OS X 工具包的一系列包裝(Cocoa)。
Gecko#,一個對在 Mozilla 中使用的嵌入式布局引擎的綁定(Gecko).
Gtk#,對使用 C 的 GTK+ 庫的 C# 的外包。
Tao,一個圖形及游戲庫的綁定。

Mono 與微軟的專利
人們對于微軟能否采用專利摧毀 Mono 項目進行了大量的爭論。 其實,專利問題不在于已被提交到 ECMA 組織的核心技術或 Unix/Gnome 的專有部分, 而在于由微軟基于 .NET Framework 創建的技術,例如 ASP.NET,ADO.NET 和 Windows Forms。這些技術在 Mono 中至今還沒有被完全地實現,事實上,在開發 Mono 應用程序時也不需要用到,然而,在開發基于 Windows 平臺的程序時卻是不可缺少的。 Mono 團隊將目標定為將這些技術納入到項目中,并制訂了一個三步走策略來處理它們:
1.采用其它實現方式來實現從而繞過專利問題
2.把包含專利的代碼清除出項目
3.找出“現有技術(prior art)”從而將專利變為非專利
顯然,第一個選項并不總是可行的。對于一些問題,例如那些與協同工作和交互相關的,可能就只有一種解決方案。由于這個相同的原因,盡管第二個選項總是可行的,它卻可能導致一個開發出來的產品并不能作為 .NET 的替代品。第三個選項則是昂貴的,甚至不可能的,這需要一定程度的運氣。


使用 Mono 開發的軟件
F-Spot photo management program
Muine music player以下是使用 Mono API 和 C# 編寫的部分程序:

Banshee 是一個用于 GNOME 的音樂管理和播放軟件。
Beagle 是一個桌面搜索軟件。
Blam! 是一個 RSS 新聞聚集器,特別適合于閱讀如 Planet Gnome 這樣的行星資訊。
Bless 是一個十六進制編輯器。
CDCollect 是一個 CD 編目應用程序。
Diva 是一個用于 GNOME 的視頻編輯器。
F-Spot 是有個由 Novell 開發的圖片便捷管理程序。
Galaxium 是一個 MSN 即時通訊軟件客戶端。
GLyrics 是一個歌詞搜索器。
Gpremacy is an implementation of the board game Supremacy written in Mono/Gtk#.
iFolder 3 (by Novell) 讓你使用點對點協議(peer-to-peer)或Novell的群集服務器產品與其它計算機和用戶共享文件。
imeem a social networking software. Mac client and servers run Mono while the Windows client uses Microsoft.NET.
MindFire 是一個用于輔助速讀(speed reading)的跨平臺電子書閱讀器
MonoDevelop 是一個用于創建 Mono 應用程序的集成開發環境。該軟件原先是 SharpDevelop 向 Gtk# 的一個移植,而現今該軟件已獨立開發。該軟件在 Windows 上有測試版的可用版本。

Mono介紹


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 太仆寺旗| 宁晋县| 新龙县| 阿合奇县| 广昌县| 大港区| 门源| 大化| 卢湾区| 克什克腾旗| 班戈县| 宁安市| 杭锦后旗| 玛纳斯县| 会东县| 鄂托克旗| 潞西市| 辽宁省| 时尚| 濮阳市| 玛多县| 奉新县| 吉木乃县| 德州市| 开江县| 棋牌| 萝北县| 清涧县| 永嘉县| 广东省| 边坝县| 会理县| 合江县| 油尖旺区| 探索| 梧州市| 南召县| 江津市| 萍乡市| 大宁县| 通道|