|
創(chuàng)建Windows運行時(WinRT)是為了在Windows上給用戶提供一種流暢且安全的應(yīng)用體驗。WinRT會受到.NET、C++、以及JavaScript三者的影響。WinRT不會取代CLR或Win32,而是為那些使用不同語言編寫的應(yīng)用程序提供統(tǒng)一支持,以便它們可使用新的Metro風(fēng)格用戶界面運行于Windows之上。
兩年前,微軟從一個愿望開始了Windows運行時(WinRT)的研發(fā)工作,此愿望是,建立一個更好的開發(fā)平臺,讓開發(fā)者在此平臺上使用具有豐富智能感知功能和優(yōu)秀調(diào)試功能的工具來創(chuàng)造快速、流暢、可靠的應(yīng)用程序,而且開發(fā)者可自由選擇所使用的語言和庫。最終結(jié)果是產(chǎn)生了一種架構(gòu)以及一組可以從.NET語言(C#、VB.NET、F#)、C++、以及HTML/JavaScript調(diào)用的API。所有這些語言都會對WinRT的設(shè)計產(chǎn)生影響。
WinRT不是為了取代.NET或Win32提供的所有功能,但是它是一個公共平臺,以便那些使用不同語言編寫的應(yīng)用程序可使用新的Metro風(fēng)格界面來運行。當(dāng)混合C#應(yīng)用程序基于WinRT創(chuàng)建Metro風(fēng)格用戶界面時,程序中將仍能執(zhí)行LINQ查詢,對于存儲、網(wǎng)絡(luò)、新式應(yīng)用程序的安全性等方面同樣能執(zhí)行LINQ查詢。完整的運行時架構(gòu)如下圖所示:
語言投射(Language Projection)表示對于每種已支持語言的WinRT API視圖。通過Visual Studio 11的智能感知,在“Windows”命名空間下可找到那些推薦的用于創(chuàng)建Metro風(fēng)格應(yīng)用程序的API。
在BUILD開發(fā)者大會上,Windows運行時開發(fā)經(jīng)理Martyn Lovell通過題為 “包圍Windows運行時”的演講介紹了WinRT背后的設(shè)計原則:
- 任何耗時超過50毫秒的事情都應(yīng)該通過使用了Async關(guān)鍵字的異步調(diào)用來完成,以確保流暢、快速的應(yīng)用體驗。由于即便當(dāng)異步調(diào)用的情況存在時,許多開發(fā)者仍傾向于使用同步API調(diào)用,因此在WinRT深處建立了使用Async關(guān)鍵字的異步方法從而迫使開發(fā)者進(jìn)行異步調(diào)用。
- 應(yīng)用程序彼此之間被更好地隔離開,從而使得一個應(yīng)用程序的性能不會影響到另一應(yīng)用程序,同時也是為了獲得更好的安全性。隸屬于某個應(yīng)用程序的運行時對象不能被暴露給另一應(yīng)用程序,除非通過借助標(biāo)準(zhǔn)的操作系統(tǒng)級的通訊信道Windows契約(Windows Contracts)來完成。
- 基于平臺的版本控制(Platform-based versioning)確保應(yīng)用程序在不同版本的Windows上運行良好。版本控制信息包含在WinRT元數(shù)據(jù)中,而且智能感知會根據(jù)應(yīng)用程序的目標(biāo)版本來公開功能,因此開發(fā)者無需查閱其他文檔就能知道,對于某個特定版本的Windows而言,到底有哪些類和方法是可用的。
關(guān)于類型,WinRT必須提供語言無關(guān)的類型——integer(整數(shù))、enumerations(枚舉)、structures(結(jié)構(gòu))、arrays(數(shù)組)、interfaces(接口)、generic interfaces(泛型接口)、以及runtime classes(運行時類)。引入了被稱之為HSTRING的新字符串類型,該類型允許在不進(jìn)行任何數(shù)據(jù)復(fù)制的情況下,在應(yīng)用程序與運行時環(huán)境之間傳輸字符串。
每個WinRT對象都會對應(yīng)一些接口,其中有兩個接口屬于每個對象:IUnknown接口,熟悉的COM接口;以及IInspectable接口,用于根據(jù)對象所包含的元數(shù)據(jù)來發(fā)現(xiàn)有關(guān)該對象的信息。一個對象可能通過接口提供其他功能,然而運行時類會把這些接口集中公開出來。例如,一個FileInformation對象擁有由FileInformation類公開的IStorageItemInformation、IStorageItem、IStorageFile三個接口。
WinRT對象在編譯時被公開給C++應(yīng)用程序,而對于C#或VB.NET應(yīng)用程序而言,對WinRT對象的綁定一部分是在編譯時完成的,另一部分則是在運行時完成的。HTML或JavaScript應(yīng)用程序只有在運行時可以看到WinRT對象,而且元數(shù)據(jù)是動態(tài)生成的。
Metro界面運行在一個不可重入的單線程之上,然而應(yīng)用程序的其余部分可以從線程池中使用由運行時環(huán)境所自動提供的多線程。
Windows運行時體驗團(tuán)隊的Harry Pierson和公共語言運行時團(tuán)隊的Jesse Kaplan在BUILD開發(fā)者大會的另一題為“在C#和Visual Basic中使用Windows運行時”的演講中,介紹了一些使用.NET語言對WinRT進(jìn)行編程的細(xì)節(jié)。
據(jù)Pierson透露,.NET對于WinRT的重大影響在于,許多設(shè)計準(zhǔn)則被從.NET中借用過來。例如,通過使用基于.NET元數(shù)據(jù)格式更新版本的元數(shù)據(jù)增強(qiáng)了WinRT庫。就像Silverlight一樣,為了創(chuàng)建Metro風(fēng)格應(yīng)用程序,WinRT會使用XAML框架。由于在運行時與.NET之間存在直接映射:基本類型(primitives)、類(classes)、接口(interfaces)、屬性(properties)、方法(methods)等等,并且開發(fā)者無法看到那些存在的差異,因此使用WinRT的.NET應(yīng)用程序?qū)匈e至如歸的感覺。
Pierson還表示,開發(fā)者可以用C#語言創(chuàng)建可供C++或JavaScript的WinRT應(yīng)用程序使用的Windows運行時組件,然而須要遵守一系列規(guī)則:“結(jié)構(gòu)體只能擁有公共數(shù)據(jù)字段;只允許對XAML控件使用繼承,其它類型都必須使用sealed關(guān)鍵字;只支持系統(tǒng)提供的泛型。”
在Windows 8、或是后續(xù)版本的Windows中將提供一種經(jīng)典應(yīng)用程序與新的觸摸友好的Metro風(fēng)格應(yīng)用程序共存的混合環(huán)境。基于Metro風(fēng)格的未來的Windows應(yīng)用程序?qū)⑹芤嬗赪indows運行時所提供的公共基礎(chǔ)設(shè)施,開發(fā)者必須針對一套唯一的API進(jìn)行編程,而對于不同語言會略有差異。在與過去保持兼容性的同時,又為未來提供新功能方面,這是微軟所做的最好嘗試。
查看英文原文:Design Details of the Windows Runtime
NET技術(shù):Windows 運行時(WinRT)的設(shè)計細(xì)節(jié),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。