|
Windows 8的開發(fā)平臺(tái)總體上分為兩部分:一是全新的WinRT,界面搭配Metro style,二是傳統(tǒng)的Win32、.NET(SL)、IE三大平臺(tái),界面為傳統(tǒng)窗體風(fēng)格。其中全新的WinRT被微軟視為開發(fā)者的未來(lái)。
WinRT平臺(tái)開發(fā)又細(xì)分為兩大方式:一是C/C++搭配XAML,或C#/VB搭配XAML,二是JavaScript搭配HTML/CSS。C、C++、C#、VB、Javascript全部可以直接調(diào)用WinRT APIs,這樣微軟將Native(本地)、Managed(托管)、Dynamic(動(dòng)態(tài))三大語(yǔ)言運(yùn)行機(jī)制統(tǒng)一了起來(lái)。可見(jiàn),WinRT是微軟將Win32、.NET(SL)、IE三大平臺(tái)進(jìn)行整合的產(chǎn)物。
回顧歷史,Win32是微軟最早推出、發(fā)展時(shí)間最久的一個(gè)開發(fā)平臺(tái)。C++搭配Windows SDK或C++搭配MFC等類庫(kù)或VB均是Win32平臺(tái)的開發(fā)方式。而COM技術(shù),也作為那個(gè)時(shí)代的組件模型,為微軟的發(fā)展建立了不可磨滅的功勛。2000年,微軟推出.NET戰(zhàn)略,.NET平臺(tái)開始走入主流。WinForm、WPF以及之后的Silverlight均是.NET時(shí)代的產(chǎn)物。而Assembly組件模型,也逐步地在很多領(lǐng)域替代COM技術(shù)。
Win32時(shí)代,我稱之為“PC時(shí)代”。那時(shí)的硬件性能普遍較低,所以Win32平臺(tái)具有非常高效的性能。但是開發(fā)效率低下,內(nèi)存管理復(fù)雜,COM技術(shù)晦澀難懂、沒(méi)有統(tǒng)一的數(shù)據(jù)傳遞模型等這些問(wèn)題,使Win32難以適應(yīng)網(wǎng)絡(luò)發(fā)展的需要。于是微軟推出.NET戰(zhàn)略,“網(wǎng)絡(luò)時(shí)代”來(lái)臨。.NET平臺(tái)從2000年開始,到現(xiàn)在,已經(jīng)發(fā)展了10年左右,微軟依次給我們帶來(lái)了.NET1.1、.NET2.0、.NET3.0、.NET3.5。
.NET4.0。.NET平臺(tái)解決了Win32平臺(tái)的問(wèn)題,設(shè)計(jì)了非常優(yōu)雅的開發(fā)接口和龐大類庫(kù),開發(fā)效率提升了,內(nèi)存管理引入了GC,Assembly組件模型非常簡(jiǎn)單,而且還解決了COM技術(shù)造成的DLL Hell問(wèn)題,也帶來(lái)了統(tǒng)一的數(shù)據(jù)傳遞模型XML。但是.NET平臺(tái)從一開始,就暴露了缺點(diǎn),由于.NET是建立在Win32基礎(chǔ)上的托管API接口,性能下降,系統(tǒng)資源消耗嚴(yán)重,而且和Win32平臺(tái)交互困難。隨著硬件的提升、.NET平臺(tái)的不斷發(fā)展優(yōu)化,性能得到部分提升,跨平臺(tái)調(diào)用方案也一定程度解決了Win32平臺(tái)的交互問(wèn)題。但是這些改變,沒(méi)有根本解決問(wèn)題,即便微軟后來(lái)又推出了“改良的.NET平臺(tái)”——Silverlight,但.NET平臺(tái)的缺點(diǎn)還是隨著“移動(dòng)時(shí)代”的來(lái)臨,再次暴露無(wú)疑。此時(shí)WinRT上場(chǎng)了!
那么,WinRT給我們帶來(lái)了什么呢?WinRT是“移動(dòng)時(shí)代”需求的產(chǎn)物,那肯定會(huì)充滿“移動(dòng)時(shí)代”的色彩。第一,WinRT給我們帶來(lái)了界面上的革命:Metro。新的Metro風(fēng)格界面更加適合觸摸屏操作,更加適合多尺寸的顯示屏,全屏的顯示方式突出了以內(nèi)容為中心的理念。第二,WinRT給我們帶來(lái)了全新的系統(tǒng)級(jí)Native API,WinRT APIs是Native的,而且直接建立在系統(tǒng)內(nèi)核之上,并且還自動(dòng)獲得硬件加速,包裝非常類似.NET,既高效又易用。第三,WinRT采用了MVC模式,做到了界面和邏輯的很好分離。XAML和HTML5作為兩大界面標(biāo)記語(yǔ)言同時(shí)被采用。第三,WinRT給我們帶來(lái)了新的組件模型:C++組件擴(kuò)展。該組件模型是COM和Assembly技術(shù)的結(jié)合體,可同時(shí)被Native、Managed和Dynamic三種類型的語(yǔ)言直接調(diào)用。WinRT APIs本身就是使用的C++組件擴(kuò)展技術(shù)實(shí)現(xiàn)的,所以做到了C、C++、C#、VB、Javascript的直接調(diào)用。WPF、SL、網(wǎng)頁(yè)應(yīng)用均可以較小代碼調(diào)整,即可在WinRT平臺(tái)運(yùn)行。第四,WinRT同時(shí)支持X86/64、ARM架構(gòu),即可在PC上運(yùn)行,又可在Pad上運(yùn)行。第五,WinRT全面采用了異步技術(shù)。在WinRT中,微軟一直遵循一個(gè)簡(jiǎn)單的規(guī)則:如果一個(gè)API預(yù)計(jì)耗時(shí)超過(guò)50毫秒,那么API就是異步的,這樣就能確保Metro UI上的操作體驗(yàn)是最好的。第六,WinRT程序在不顯示的時(shí)候,自動(dòng)轉(zhuǎn)換為掛起狀態(tài),不占用CPU,節(jié)省了電能消耗。
對(duì)于傳統(tǒng)平臺(tái)開發(fā),也稍微做下介紹。IE平臺(tái)更新到了IE10版本,.NET平臺(tái)更新到了.NET4.5版本。另外,專門提下,傳統(tǒng)的網(wǎng)頁(yè)插件技術(shù)已經(jīng)不能在Metro風(fēng)格的IE中獲得支持。而新的插件技術(shù)或者是否還提供插件技術(shù)尚不得而知。
開發(fā)工具對(duì)應(yīng)的是Visual Studio 11 和 Expression Blend 5。
WinRT是一個(gè)新的API 集合,具有以下特性:
- 它實(shí)現(xiàn)了Metro UI規(guī)范的UI庫(kù)
- 為Windows開發(fā)人員提供一個(gè)簡(jiǎn)單的UI編程模型,你不需要學(xué)習(xí)Win32API的那些復(fù)雜的API了
- 它使用XAML-base的UI系統(tǒng)
- API都設(shè)計(jì)成了異步的
- 它和.NET一樣是個(gè)沙箱的API,自成體系,用于創(chuàng)建AppStore上的應(yīng)用程序。
- API的元數(shù)據(jù)格式是ECMA335,和.NET一樣的標(biāo)準(zhǔn)。這是不是意味著以后Mono也可以在xUnit上去實(shí)現(xiàn)這樣的API呢?
WinRT包裝的新的用戶界面系統(tǒng),和Win32API一樣是Com的上層。
Windows運(yùn)行時(shí)(WinRT)是為了在Windows上給用戶提供一種流暢且安全的應(yīng)用體驗(yàn)。WinRT會(huì)受到.NET、C++、以及JavaScript三者的影響。WinRT不會(huì)取代CLR或Win32,而是為那些使用不同語(yǔ)言編寫的應(yīng)用程序提供統(tǒng)一支持,以便它們可使用新的Metro風(fēng)格用戶界面運(yùn)行于Windows之上。
WinRT不是為了取代.NET或Win32提供的所有功能,但是它是一個(gè)公共平臺(tái),以便那些使用不同語(yǔ)言編寫的應(yīng)用程序可使用新的Metro風(fēng)格界面來(lái)運(yùn)行。當(dāng)混合C#應(yīng)用程序基于WinRT創(chuàng)建Metro風(fēng)格用戶界面時(shí),程序中將仍能執(zhí)行LINQ查詢,對(duì)于存儲(chǔ)、網(wǎng)絡(luò)、新式應(yīng)用程序的安全性等方面同樣能執(zhí)行LINQ查詢。完整的運(yùn)行時(shí)架構(gòu)如下圖所示:
在類型上,WinRT必須提供語(yǔ)言無(wú)關(guān)的類型——integer(整數(shù))、enumerations(枚舉)、structures(結(jié)構(gòu))、arrays(數(shù)組)、interfaces(接口)、generic interfaces(泛型接口)、以及runtime classes(運(yùn)行時(shí)類)。引入了被稱之為HSTRING的新字符串類型,該類型允許在不進(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í)類會(huì)把這些接口集中公開出來(lái)。例如,一個(gè)FileInformation對(duì)象擁有由FileInformation類公開的IStorageItemInformation、IStorageItem、IStorageFile三個(gè)接口。
WinRT對(duì)象在編譯時(shí)被公開給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)提供的多線程。
開發(fā)者可以用C#語(yǔ)言創(chuàng)建可供C++或JavaScript的WinRT應(yīng)用程序使用的Windows運(yùn)行時(shí)組件,然而須要遵守一系列規(guī)則:“結(jié)構(gòu)體只能擁有公共數(shù)據(jù)字段;只允許對(duì)XAML控件使用繼承,其它類型都必須使用sealed關(guān)鍵字;只支持系統(tǒng)提供的泛型。”
NET技術(shù):Windows Runtime - 面向?qū)ο蠡腃++(并非意味著托管),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。