Windows 運行時(WinRT)的設計細節

作者: Abel Avram  來源: InfoQ  發布時間: 2011-09-29 21:02  閱讀: 5598 次  推薦: 2   原文鏈接   [收藏]  

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

  兩年前,微軟從一個愿望開始了Windows運行時(WinRT)的研發工作,此愿望是,建立一個更好的開發平臺,讓開發者在此平臺上使用具有豐富智能感知功能和優秀調試功能的工具來創造快速、流暢、可靠的應用程序,而且開發者可自由選擇所使用的語言和庫。最終結果是產生了一種架構以及一組可以從.NET語言(C#、VB.NET、F#)、C++、以及HTML/JavaScript調用的API。所有這些語言都會對WinRT的設計產生影響。

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

  語言投射(Language Projection)表示對于每種已支持語言的WinRT API視圖。通過Visual Studio 11的智能感知,在“Windows”命名空間下可找到那些推薦的用于創建Metro風格應用程序的API。

  在BUILD開發者大會上,Windows運行時開發經理Martyn Lovell通過題為 “包圍Windows運行時”的演講介紹了WinRT背后的設計原則:

  • 任何耗時超過50毫秒的事情都應該通過使用了Async關鍵字的異步調用來完成,以確保流暢、快速的應用體驗。由于即便當異步調用的情況存在時,許多開發者仍傾向于使用同步API調用,因此在WinRT深處建立了使用Async關鍵字的異步方法從而迫使開發者進行異步調用。
  • 應用程序彼此之間被更好地隔離開,從而使得一個應用程序的性能不會影響到另一應用程序,同時也是為了獲得更好的安全性。隸屬于某個應用程序的運行時對象不能被暴露給另一應用程序,除非通過借助標準的操作系統級的通訊信道Windows契約(Windows Contracts)來完成。
  • 基于平臺的版本控制(Platform-based versioning)確保應用程序在不同版本的Windows上運行良好。版本控制信息包含在WinRT元數據中,而且智能感知會根據應用程序的目標版本來公開功能,因此開發者無需查閱其他文檔就能知道,對于某個特定版本的Windows而言,到底有哪些類和方法是可用的。

  關于類型,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界面運行在一個不可重入的單線程之上,然而應用程序的其余部分可以從線程池中使用由運行時環境所自動提供的多線程。

  Windows運行時體驗團隊的Harry Pierson和公共語言運行時團隊的Jesse Kaplan在BUILD開發者大會的另一題為“在C#和Visual Basic中使用Windows運行時”的演講中,介紹了一些使用.NET語言對WinRT進行編程的細節。

  據Pierson透露,.NET對于WinRT的重大影響在于,許多設計準則被從.NET中借用過來。例如,通過使用基于.NET元數據格式更新版本的元數據增強了WinRT庫。就像Silverlight一樣,為了創建Metro風格應用程序,WinRT會使用XAML框架。由于在運行時與.NET之間存在直接映射:基本類型(primitives)、類(classes)、接口(interfaces)、屬性(properties)、方法(methods)等等,并且開發者無法看到那些存在的差異,因此使用WinRT的.NET應用程序將會有賓至如歸的感覺。

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

  在Windows 8、或是后續版本的Windows中將提供一種經典應用程序與新的觸摸友好的Metro風格應用程序共存的混合環境。基于Metro風格的未來的Windows應用程序將受益于Windows運行時所提供的公共基礎設施,開發者必須針對一套唯一的API進行編程,而對于不同語言會略有差異。在與過去保持兼容性的同時,又為未來提供新功能方面,這是微軟所做的最好嘗試。

  查看英文原文:Design Details of the Windows Runtime

2
0
 
標簽:Windows 8 WinRT
 
 

文章列表

arrow
arrow
    全站熱搜

    大師兄 發表在 痞客邦 留言(0) 人氣()