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