中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

討論:“Mono是個跨平臺的.NET”是否是個正確的說法

  Thorbjorn在提問中認為Mono并不能稱作是跨平臺的.NET,理由如下:

  • OpenJDK等Java提供商都通過了官方的Sun TCK來保證正常工作,Mono似乎并沒有通過Microsoft TCK。
  • Mono的發(fā)布總是落后于.NET,那么目前它又對.NET支持到什么程度呢?
  • 如WinForm等GUI工具是否可以在Mono下正常工作?
  • 商業(yè)用戶不會將開源框架作為備選方案。

  用戶sparkie首先回應(yīng)了以上幾點疑問:

首先,CLI(Common Language Infrastructure)和.NET是有區(qū)別的,前者是公開標(biāo)準,而后者是微軟對這一標(biāo)準的實現(xiàn),Mono則是CLI的又一實現(xiàn),它從來不是“可移植的.NET”。同樣,C#也是一個公開標(biāo)準,也不和.NET綁定在一起。

Mono相對于.NET是有些落后,但也只有一丁點而已。Mono可以運行C# 4.0的代碼(最新的.NET版本),與此同時微軟最近把所有的DLR代碼都開源了(使用Apache 2.0授權(quán)協(xié)議),這意味著mono可以直接使用IronPython,IronRuby,同時F#也不久前也已經(jīng)開源,再加上微軟都會定期發(fā)布.NET的CTP版本,因此Mono開發(fā)人員幾乎可以時刻和.NET保持同步。.NET中的部分工具和擴展,如Code Contract等等,它們并沒有mono中的完整實現(xiàn),不過它們的使用并不廣泛。如果這些擴展變得流行起來了,那么Mono也會提供對應(yīng)的實現(xiàn)。

WinForm沒有得到完整的移植,因為它們是.NET的特性功能,而并非CLI的一部分。CLI中并沒有定義特定的組件庫。有一些組件庫是跨平臺的,例如GTK#和Silveright,如果你從編寫應(yīng)用程序的一開始就考慮到可移植性,那就不應(yīng)該使用WinForm/WPF。此外,Mono提供了一個很薄的封裝層,現(xiàn)有的WinForm應(yīng)用程序可以可以比較容易地移植為GTK#(不需要完全重寫)。

Mono提供了一個工具:Mono Migration Analyser(MoMA),它能檢查一個.NET應(yīng)用程序能否移植到Mono上(如,是否使用了不可移植的類庫,或是P/Invoke)。

對于不愿意使用開源產(chǎn)品的商業(yè)應(yīng)用,Mono可以使用另一種授權(quán)方案,這時候Mono代碼的歸屬權(quán)則交由Novell負責(zé),此時授權(quán)方案便不是LGPL了。

因此,如果要考慮“.NET可否移植”這個命題,我想如果你從一開始就考慮到框架的可移植性問題,則它是成立的。但如果換個說法“我有個使用.NET開發(fā)的Windows應(yīng)用程序,它應(yīng)該可以在Mono上運行”,那就不正確了——不過Mono讓移植這樣的應(yīng)用程序變得簡單許多。

  隨后Lloeki談?wù)摿怂墓ぷ鞣绞剑?/p>

除了技術(shù)方面的因素以外,關(guān)鍵還是在于編寫代碼的方式。

無論是哪種跨平臺的應(yīng)用程序(例如JavaPython,Ruby……),如果在寫代碼時不考慮可移植性,那么你應(yīng)該假設(shè)這些代碼可以直接跨平臺執(zhí)行的可能性為零(即使實際上這樣的可能性要高出許多)。你無法隨便拿到一個程序集就保證它能在Mono下正確執(zhí)行。

不過對于一個新項目(或是你可以輕易重構(gòu)的項目),選擇.NET/Mono作為可移植的方案之一則是明智的,不過對于跨平臺的代碼來說,你還是需要不斷地進行測試。如果你使用持續(xù)集成,那么只要簡單的創(chuàng)建一個Mono構(gòu)建的節(jié)點即可。只要養(yǎng)成良好的習(xí)慣(例如路徑的分隔符),很多問題可以在開發(fā)階段就解決掉,而絕大部分代碼只要使用單元測試以及其他一些常見的實踐方式,再加上一點點先期規(guī)劃就能得到很好的跨平臺性。剩下的,例如平臺相關(guān)的代碼(如P/Invoke),則可以通過封裝,為不同平臺提供針對性的實現(xiàn)。這樣產(chǎn)出的項目,幾乎不會付出額外的代價就能得到很好的移植性。

當(dāng)然,使用一個Mono中不存在或是不兼容的類庫則另當(dāng)別論,不過就我的個人而言還沒有遇到這樣的情況。這些是我們在工作中實際用到的做法,我可以放心的聲稱“.NET+Mono”是跨平臺的解決方案。

  對于Mono于.NET功能的支持程度,Robert和Michael談到:

我用過Mono,我認為它就和其他開源平臺一樣好,只不過不是微軟直接支持的而已。如果你能接受Clojure或Scala這樣的開源項目,那么Mono也能讓你滿意。Mono對于.NET的支持程度可以參考Mono Roadmap頁面。Mono并不等同于.NET,它們有或多或少的區(qū)別,例如現(xiàn)在你還無法使用Entity Framework。

Mono不是.NET的移植品,有些技術(shù)是Mono不會或不打算實現(xiàn)的(如Workflow Foundation或WPF),此外它們還提供了微軟.NET外的其他一些技術(shù),例如SIMD擴展。簡單地說,Mono和微軟.NET是基于相同基礎(chǔ)——CIL和BCL——的兩個不同項目。

  在討論中,Mono創(chuàng)建者Miguel de Icaza給出了最為詳細的回應(yīng):

“.NET是否跨平臺”是一個模糊的說法,無論是框架本身還是整體環(huán)境都在不斷改變。

簡單地說,作為.NET的基礎(chǔ)架構(gòu),CLI標(biāo)準是跨平臺的,但如果要在不同平臺上得到最好的體驗,則勢必要使用各自平臺上有針對性的API。CLI技術(shù)家族從來沒有試著要“一次編寫,到處執(zhí)行”,好比電話和大型機的區(qū)別實在是太大了。與其為不同平臺提供統(tǒng)一的API和運行時,不如各自平臺上的最佳體驗提供最正確的工具。試想那些非Windows PC或Unix服務(wù)器的程序員,要知道如今已經(jīng)出現(xiàn)了游戲設(shè)備,移動電話,機頂盒,分布式集群等太多激動人心的平臺。

微軟的.NET框架不是跨平臺的產(chǎn)品,它只能運行在Windows上。其他系統(tǒng)上還有一些.NET框架的變體,例如Windows Phone 7,XBox 360和瀏覽器中的Silverlight,它們都有些許不同的配置(Profile)。

如今你已經(jīng)可以在各個主流的操作系統(tǒng),電話,移動設(shè)備,嵌入式系統(tǒng)或是服務(wù)器上使用基于.NET的技術(shù),以下是各種CLI實現(xiàn)的列表,雖不完整,但應(yīng)該可以覆蓋99%的情況:

  • 基于x86和x86-64的計算機:
    • Windows:一般來說你會使用.NET或Silverlight,不過你也可以使用完整的Mono。
    • Linux, BSD或Solaris:完整的Mono或Silverlight。
    • MacOS X:完整的Mono或Silverlight。
    • Android:Mono及Android的子集。
  • ARM計算機:
    • Windows Phone 7:Compact Framework 2010。
    • Windows 6.5及更早:早期的Compact Framework。
    • Android設(shè)備:Mono/Android
  • PowerPC計算機:
    • 在Linux,BSD或Unix操作系統(tǒng)上使用完整的Mono功能。
    • 在嵌入式系統(tǒng)中使用Mono,如PS3,Wii。
    • 在XBox36上運行Compact Framework。
  • S390, S390x, Itanium, SPARC計算機:
    • 完整的Mono支持
  • 其他嵌入式操作系統(tǒng):

有時候相同的代碼很難四處運行。例如XNA代碼不會在每個桌面上運行,反之亦然。為了.NET不同的配置里運行,你需要修改些許代碼。以下是我所了解的一些配置:

  • .NET 4.0配置
  • Silverlight配置
  • Windows Phone 7配置
  • XBox360配置
  • Mono核心配置:與.NET配置相同,可以在Linux,MacOS X,Solaris,Windows和BSD里使用。
  • .NET Micro Framework
  • Mono的iPhone配置
  • Mono的Android配置
  • Mono的PS3配置
  • Mono的Wii配置
  • Moonlight配置(與Silverlight兼容)
  • Moonlight擴展配置(Silverlight和完整的.NET 4 API)

以上配置都有多多少少的不同,這不是壞事。每個配置的設(shè)計都適應(yīng)其平臺,去除任何一個都是不明智的。例如,Silverlight API可以控制瀏覽器,這不關(guān)電話什么事;由于缺少合適的支持,XNA的著色功能對PC硬件也沒有多少意義。你越早認識到.NET不是個將開發(fā)人員綁定在特定硬件或平臺上的解決方案,就能越早成為更好的開發(fā)人員。

這意味著,有些API或解決方案可以在多個平臺中使用,例如ASP.NET可以用在Windows,Linux,Solaris,MacOS X上,因為.NET和Mono都提供了這些API。同時,ASP.NET則無法在某些微軟支持的平臺上使用,例如XBox或Windows 7,也不支持Mono的Wii和iPhone配置。

其他解決方案的本質(zhì)也是一樣的。要完整列出這些技術(shù)需要一張復(fù)雜的表格,我不知道如何在這里表現(xiàn)出來,不過這里有個特定技術(shù)與特定平臺的列表:

核心運行時引擎(所有平臺):

  • Reflection.Emit支持:除WP7、CF、XBox、MonoTouch和PS3外的所有平臺 。
  • CPU SIMD支持:Linux,、BSD、Solaris及MacOS X。即將支持PS 3、MonoTouch和MonoDroid。
  • Continuations - Mono.Tasklets:Linux、BSD、Solaris、MacOS、PS3及Wii。
  • 程序集卸載:只有Windows。
  • VM注入:Linux、BSD、MacOS X及Solaris。
  • DLR:Windows、Linux、MacOS X、Solaris及MonoDroid。
  • 泛型:在iPhone和PS3上存在一些限制。

語言:

  • C# 4:所有平臺。
  • C# 編譯器即服務(wù):Linux、MacOS、Solaris、BSD及Android
  • F#、IronRuby及IronPython:除WP7、CF、Xbox、MonoTouch及PS3外的所有平臺。

服務(wù)器技術(shù):

  • ASP.NET:Windows、Linux、MacOS、BSD及Solaris。
  • ADO.NET:所有平臺
  • LINQ to SQL:所有平臺
  • Entity Framework:僅Windows
  • XML核心技術(shù):所有平臺
    • XML序列化:除WP7,CF和XBox外的所有平臺。
  • LINQ to XML:所有平臺
  • System.Json:Silverlight,Linux,MacOS,MonoTouch,MonoDroid(譯注:可移植到其他平臺)
  • System.Messaging:Windows、Linux、MacOS和Solaris的支持則需要RabbitMQ。
  • .NET 1 Enterprise Services:僅Windows。
  • WCF:完整版僅支持Windows。Silverlight、Solaris、MacOS、Linux、MonoTouch、MonoDroid支持其自己。
  • Windows Workflow:僅Windows。
  • Cardspace identity:僅Windows。

GUI技術(shù):

  • Silverlight:Windows、Mac和Linux(Moonlight)
  • WPF:僅Windows
  • Gtk#:Windows、Mac、Linux及BSD
  • Windows.Forms:Windows、Mac、Linux和BSD
  • MonoMac - 原生Mac集成:僅Mac
  • MonoTouch - 原生iPhone集成:僅iPhone/iPad
  • MonoDroid - 原生Android集成:僅Android
  • Media Center API:僅Windows
  • Clutter:Windows和Linux

圖像類庫:

  • GDI+:Windows、Linux、BSD及MacOS
  • Quartz:MacOS X、iPhone及iPad
  • Cairo:Windows、Linux、BSD、MacOS、iPhone、iPad、MacOS X、PS3及Wii

Mono類庫 - 跨平臺,可以在.NET里使用,不過需要手動編譯:

  • C# 4編輯器及服務(wù)
  • Cecil - CIL操作,工作流,CIL探測,鏈接器
  • RelaxNG類庫
  • Mono.Data.* 數(shù)據(jù)提供者
  • 完整的System.Xaml(用于安裝程序,.NET沒有提供這個技術(shù))

MonoTouch為iPhone上運行的Mono,MonoDroid為Andriod上運行的Mono。PS3和Wii的移植只供索尼和任天堂認證的開發(fā)人員使用。

  在討論中Miguel de Icaza還表示,IBM至少完成了兩個針對AIX的Mono移植,不過他們的移植團隊沒有得到反饋其成果的許可。

NET技術(shù)討論:“Mono是個跨平臺的.NET”是否是個正確的說法,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 精品欧美一区二区三区久久久 | 三级黄色片在线 | 日一区二区 | 国产精品爱久久久久久久 | 免费在线观看一区二区 | 欧美成人精品二区三区99精品 | 国产欧美日韩视频 | 国产精品3区 | 亚洲国产精品激情在线观看 | av网站免费观看 | 欧美一区二区三区一在线观看 | 盗摄精品av一区二区三区 | 中文字字幕一区二区三区四区五区 | 天天综合久久 | 中文字幕第90页 | 99免费在线视频 | 亚洲欧美一区二区三区国产精品 | 欧美精品一区在线发布 | 欧美日韩免费 | 国产精品久久一区二区三区 | 久久国产精品一区二区 | 国产精品美女久久久久久久网站 | 国产精品爱久久久久久久 | 18gay男同69亚洲网站 | 国产男人的天堂 | 影音先锋中文字幕在线观看 | 国产 日韩 欧美 在线 | 一区二区三区欧美 | 在线观看成人小视频 | 国产精品久久久久影院色老大 | 日韩精彩视频 | 午夜av成人 | 亚洲综合在线一区二区 | 久久99深爱久久99精品 | 水蜜桃久久夜色精品一区 | 精品视频在线播放 | 亚洲夜射| 国产精品一区二区不卡 | 欧美久久一区二区 | 久久精品99国产精品 | 激情久久网 |