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