Windows Runtime - 面向對象化的C++(並不是意味着託管)

 Windows 8的開發平臺整體上分爲兩部分:一是全新的WinRT,界面搭配Metro style,二是傳統的Win3二、.NET(SL)、IE三大平臺,界面爲傳統窗體風格。其中全新的WinRT被微軟視爲開發者的將來。web

  WinRT平臺開發又細分爲兩大方式:一是C/C++搭配XAML,或C#/VB搭配XAML,二是JavaScript搭配HTML/CSS。C、C++、C#、VB、Javascript所有能夠直接調用WinRT APIs,這樣微軟將Native(本地)、Managed(託管)、Dynamic(動態)三大語言運行機制統一了起來。可見,WinRT是微軟將Win3二、.NET(SL)、IE三大平臺進行整合的產物。編程

  回顧歷史,Win32是微軟最先推出、發展時間最久的一個開發平臺。C++搭配Windows SDK或C++搭配MFC等類庫或VB均是Win32平臺的開發方式。而COM技術,也做爲那個時代的組件模型,爲微軟的發展創建了不可磨滅的功勳。2000年,微軟推出.NET戰略,.NET平臺開始走入主流。WinForm、WPF以及以後的Silverlight均是.NET時代的產物。而Assembly組件模型,也逐步地在不少領域替代COM技術。數組

  Win32時代,我稱之爲「PC時代」。那時的硬件性能廣泛較低,因此Win32平臺具備很是高效的性能。可是開發效率低下,內存管理複雜,COM技術晦澀難懂、沒有統一的數據傳遞模型等這些問題,使Win32難以適應網絡發展的須要。因而微軟推出.NET戰略,「網絡時代」來臨。.NET平臺從2000年開始,到如今,已經發展了10年左右,微軟依次給咱們帶來了.NET1.一、.NET2.0、.NET3.0、.NET3.5。安全

  .NET4.0。.NET平臺解決了Win32平臺的問題,設計了很是優雅的開發接口和龐大類庫,開發效率提高了,內存管理引入了GC,Assembly組件模型很是簡單,並且還解決了COM技術形成的DLL Hell問題,也帶來了統一的數據傳遞模型XML。可是.NET平臺從一開始,就暴露了缺點,因爲.NET是創建在Win32基礎上的託管API接口,性能降低,系統資源消耗嚴重,並且和Win32平臺交互困難。隨着硬件的提高、.NET平臺的不斷髮展優化,性能獲得部分提高,跨平臺調用方案也必定程度解決了Win32平臺的交互問題。可是這些改變,沒有根本解決問題,即使微軟後來又推出了「改良的.NET平臺」——Silverlight,但.NET平臺的缺點仍是隨着「移動時代」的來臨,再次暴露無疑。此時WinRT上場了!網絡

  那麼,WinRT給咱們帶來了什麼呢?WinRT是「移動時代」需求的產物,那確定會充滿「移動時代」的色彩。第一,WinRT給咱們帶來了界面上的革命:Metro。新的Metro風格界面更加適合觸摸屏操做,更加適合多尺寸的顯示屏,全屏的顯示方式突出了之內容爲中心的理念。第二,WinRT給咱們帶來了全新的系統級Native API,WinRT APIs是Native的,並且直接創建在系統內核之上,而且還自動得到硬件加速,包裝很是相似.NET,既高效又易用。第三,WinRT採用了MVC模式,作到了界面和邏輯的很好分離。XAML和HTML5做爲兩大界面標記語言同時被採用。第三,WinRT給咱們帶來了新的組件模型:C++組件擴展。該組件模型是COM和Assembly技術的結合體,可同時被Native、Managed和Dynamic三種類型的語言直接調用。WinRT APIs自己就是使用的C++組件擴展技術實現的,因此作到了C、C++、C#、VB、Javascript的直接調用。WPF、SL、網頁應用都可以較小代碼調整,便可在WinRT平臺運行。第四,WinRT同時支持X86/6四、ARM架構,便可在PC上運行,又可在Pad上運行。第五,WinRT全面採用了異步技術。在WinRT中,微軟一直遵循一個簡單的規則:若是一個API預計耗時超過50毫秒,那麼API就是異步的,這樣就能確保Metro UI上的操做體驗是最好的。第六,WinRT程序在不顯示的時候,自動轉換爲掛起狀態,不佔用CPU,節省了電能消耗。session

  對於傳統平臺開發,也稍微作下介紹。IE平臺更新到了IE10版本,.NET平臺更新到了.NET4.5版本。另外,專門提下,傳統的網頁插件技術已經不能在Metro風格的IE中得到支持。而新的插件技術或者是否還提供插件技術尚不得而知。多線程

  開發工具對應的是Visual Studio 11 和 Expression Blend 5。架構

  WinRT是一個新的API 集合,具備如下特性:異步

  • 它實現了Metro UI規範的UI庫
  • 爲Windows開發人員提供一個簡單的UI編程模型,你不須要學習Win32API的那些複雜的API了
  • 它使用XAML-base的UI系統
  • API都設計成了異步的
  • 它和.NET同樣是個沙箱的API,自成體系,用於建立AppStore上的應用程序。
  • API的元數據格式是ECMA335,和.NET同樣的標準。這是否是意味着之後Mono也能夠在xUnit上去實現這樣的API呢?

  WinRT包裝的新的用戶界面系統,和Win32API同樣是Com的上層。工具

  Windows運行時(WinRT)是爲了在Windows上給用戶提供一種流暢且安全的應用體驗。WinRT會受到.NET、C++、以及JavaScript三者的影響。WinRT不會取代CLR或Win32,而是爲那些使用不一樣語言編寫的應用程序提供統一支持,以便它們可以使用新的Metro風格用戶界面運行於Windows之上。 

  WinRT不是爲了取代.NET或Win32提供的全部功能,可是它是一個公共平臺,以便那些使用不一樣語言編寫的應用程序可以使用新的Metro風格界面來運行。當混合C#應用程序基於WinRT建立Metro風格用戶界面時,程序中將仍能執行LINQ查詢,對於存儲、網絡、新式應用程序的安全性等方面一樣能執行LINQ查詢。完整的運行時架構以下圖所示:

  在類型上,WinRT必須提供語言無關的類型——integer(整數)、enumerations(枚舉)、structures(結構)、arrays(數組)、interfaces(接口)、generic interfaces(泛型接口)、以及runtime classes(運行時類)。引入了被稱之爲HSTRING的新字符串類型,該類型容許在不進行任何數據複製的狀況下,在應用程序與運行時環境之間傳輸字符串。

  每一個WinRT對象都會對應一些接口,其中有兩個接口屬於每一個對象:IUnknown接口,熟悉的COM接口;以及IInspectable接口,用於根據對象所包含的元數據來發現有關該對象的信息。一個對象可能經過接口提供其餘功能,然而運行時類會把這些接口集中公開出來。例如,一個FileInformation對象擁有由FileInformation類公開的IStorageItemInformation、IStorageItem、IStorageFile三個接口。

  WinRT對象在編譯時被公開給C++應用程序,而對於C#或VB.NET應用程序而言,對WinRT對象的綁定一部分是在編譯時完成的,另外一部分則是在運行時完成的。HTML或JavaScript應用程序只有在運行時能夠看到WinRT對象,並且元數據是動態生成的。

  Metro界面運行在一個不可重入的單線程之上,然而應用程序的其他部分能夠從線程池中使用由運行時環境所自動提供的多線程。

  開發者能夠用C#語言建立可供C++或JavaScript的WinRT應用程序使用的Windows運行時組件,然而需要遵照一系列規則:「結構體只能擁有公共數據字段;只容許對XAML控件使用繼承,其它類型都必須使用sealed關鍵字;只支持系統提供的泛型。」 

相關文章
相關標籤/搜索