[Windows 8][Metro Style Apps] Windows 8 開發/執行環境概觀

對於開發者來說,最關心的還是莫過於在平台上要進行開發時能使用的架構和技術,還有平台上原生提供的APIs。所以,這次就來跟大家分享一下在Windows 8中要進行應用程式開發所能使用的平台與技術。

 

前言

最近Windows 8相關的話題持續的從去年的Build Windows大會一直延燒到現在,微軟也在日前釋出了Windows 8的消費者預覽版,還沒開始嚐鮮的朋友們可以參考[Windows 8]Windows 8 Consumer Preview 現身!!一文,也親自下載安裝試玩看看,體驗一下Windows 8可能會帶來的衝擊和新的體驗。

對於開發者來說,最關心的還是莫過於在平台上要進行開發時能使用的架構和技術,還有平台上原生提供的APIs。所以,這次就來跟大家分享一下在Windows 8中要進行應用程式開發所能使用的平台與技術。

 

Windows 8的軟體開發/執行平台

簡單來說,Windows 8的開發平台可以用下圖來表示:

image

從上圖我們可以看出,Windows 8的軟體開發/執行平台分為兩類,一類是在之前的Windows平台上就存在的Desktop Apps,一樣可以使用我們原來就習慣的技術來進行開發,而舊有在Windows 7上可以運行的Desktop Apps,也可以在Windows 8(Windows 8 RT版除外)上面正常的工作。

至於另一類,就是Windows 8獨有的Metro Style Apps,不過Metro Style Apps和Desktop Apps有一個極為顯著的不同--Metro Style Apps目前只能在Windows 8上面進行開發和運行,而無法使用較舊版本的Windows(例如Windows 7、Windows Vista)及Windows Server上進行開發和運行。

從上圖我們也可以看出,要開發Metro Style Apps所能使用的技術分為兩大塊,一塊是使用HTML/CSS作為使用者介面描述語言,加上JavaScript來作為開發語言(接近常見的Web Based Apps開發平台);另一塊,則是使用XAML作為使用者介面描述語言,加上C/C++或是C#或是VB .Net來作為開發語言(有點類似WPF的變種,除了可以使用.Net Framework作為開發平台,也加入了C/C++的支援)。

 

Windows 8的版本

根據微軟官方部落格表示,Windows 8會推出四個版本,分別為Windows 8Windows 8 ProWindows RT以及Windows 8 Enterprise,比較特別的是Windows RT版是專門給ARM平台使用的版本,所以上面無法安裝或執行一般的x86/x64 Desktop Apps,只支援Metro Style Apps;而其他的版本則等於是Windows 7的強化版,可以安裝、執行x86/x64 Desktop Apps,也可以安裝、執行Metro Style Apps。

 

WinRT與語言映射機制

Metro Style Apps之所以只能在Windows 8上面開發和運作,其實和WinRT APIs有很大的關係(WinRT目前並不相容於較舊版本的Windows)。微軟這次為了解決我們在開發時還得花費很多時間在處理與作業系統之間互動的相關問題,特別以C++作為開發語言,實作出了WinRT APIs,供Metro Style Apps使用。不論我們使用哪一種語言來開發Metro Style Apps,我們能透過WinRT APIs中提供的方法,輕鬆的和作業系統或是硬體進行溝通與互動。

另外,值得一提的是WinRT APIs中提供的操作多為支援非同步的操作,這也剛好跟.Net Framework 4.5中的asyncawait兩個關鍵字互相呼應,當然,針對C/C++及JavaScript也有相對應的非同步呼叫方式喔!!

而我們之所以不管使用哪一種開發語言,都能和WinRT APIs進行溝通,是因為平台上實作了一個叫做「語言映射」(Language Projection)的機制,如下圖。

image

透過這個機制,我們也可以使用我們熟悉的語言,去開發出自己的WinRT物件和元件給其他的Metro Style Apps專案使用,就算該專案所使用的開發語言和我們開發該元件時所使用的語言不同,也可以透過映射機制自動轉換為我們使用的開發語言所看得懂的物件類別或是資料型別,以作到無縫而且無痛的串接,總之,可以想像成在Metro Style Apps的世界是一個語言無國界的美好世界。

說到這邊,您是不是也躍躍欲試了呢?心動不如馬上行動,一起加入Metro Style Apps開發的行列吧!!~