WinRT:Win32的面向對象替代品

作者: Jonathan Allen  來源: InfoQ  發布時間: 2011-09-20 10:17  閱讀: 3021 次  推薦: 1   原文鏈接   [收藏]  

  WinRT 不是另一個抽象層;它就像 Win32 API 一樣,直接駐留在內核之上。自從 1993 年 Win32 伴隨 Windows NT 被引入以來,這標志著對于 Windows 核心的首次重大突破。WinRT 與 Win32 截然不同,它代表了新的語義學應用程序執行環境。

  不像 Win32 是用C語言思想設計的,而 WinRT API 是用 C++ 編寫的,并且從一開始的設計就是面向對象的。一致性、易用性、以及性能都是新的運行時 API 的重要方面。WinRT API 中的每個對象都支持反射,以便甚至連諸如 JavaScript 等動態語言都可有效地使用它們。隨之而來還有統一對象模型,這對于基于庫的 C++ 而言是個稀罕物。

  附注:Win32 API 并未被移除,而且那些使用傳統應用程序執行環境的較早的應用程序將繼續按預期方式工作。

  C++開發

  在 C++ 中編寫用戶界面將首選 XAML。所有與 XAML 一起使用的庫都已被移植到C++,并且被編譯為本地 x86 版本。使用 XAML 和 C++ 編寫的 Metro 風格應用程序并不運行在 .NET 之上,它們就像其他任何 Visual C++ 應用程序一樣,被直接編譯為 x86 版本。

  調用 UI 控件的方法就像在 C++ 中調用任何其他對象的方法一樣。在機器碼級別上,某個指令將 this 指針推送到堆棧上,然后通過虛函數表(v-table)調用相應函數。這使得即使在低功耗設備上也能達到最優的性能。

  支持一些現代的 C++ 應用程序所用的庫,例如 Boost。

  重疊窗口不復存在

  對話框是來自上一版 Windows 的核心概念,而在 WinRT 中它將不復存在。對于微軟而言,性能成本和可用性問題已不再是理所當然的。希望使用這種模式的應用程序將要開發其他的方式來傳遞信息,例如消息框的方式。

  另一并未納入 WinRT 的庫是 GDI。如果某個應用程序要使用 Metro 風格界面,那么它需要按自上而下的方式來做,將 Metro 風格與經典用戶界面相混合的情況是不可能出現的。

  PlayTo 契約

  另一被公開的契約是 PlayTo(由……發揮)。這使得應用程序可發送如音頻及視頻等媒體文件到某個 charm[1]。然后那個 charm 將允許用戶選擇某個他們想用的應用程序來查看該文件。據推測,媒體文件不僅限于物理文件,而是任何可表示為數據流的媒體形式。

  C#/VB:平臺調用(P/Invoke)之終結

  從 .NET 中調用本地函數通常涉及建立結構和操縱指針。而在 WinRT 環境下,所有的 API 被公開為許多可通過 C# 及 VB 直接使用的對象。這把 .NET 開發者置于與 C++ 開發者平等的層面上。

  應用程序的響應速度對于微軟而言是非常重要的。所有耗時超過 50 毫秒的操作系統級別的 API 調用將被公開為異步操作,正是為了向開發者傳遞這種價值觀。

  JavaScript

  對于 Windows 8 而言,第四大語言就是 JavaScript。盡管它不使用 XAML,但它就像本地及 .NET 應用程序一樣,擁有對底層 WinRT API 的直接訪問權。這不僅是個像 PhoneGap 一樣的容器,JavaScript 開發者還可獲得與其他開發者所使用的同樣豐富的 API。

  由于是 JavaScript,因此所選擇的 UI 工具包是 HTML 和 CSS 而非 XAML。IE 10 及 Metro 風格的 JavaScript 應用程序使用的是同一渲染引擎,盡管那些應用程序實際并不運行在瀏覽器中。JavaScript 應用程序看起來就像任何其他 Metro 風格應用程序一樣。

  JavaScript 中的用戶控件幾乎與 C++ 及 .NET 中的控件不相上下。有些控件對于 HTML 渲染引擎而言是固有的,而另外一些控件則是用 JavaScript 編寫的。這些基于 JavaScript 的控件都是基于 div 的,非常像那些使用 jQuery 創建的控件。

  應用程序容器和應用程序權限

  Metro 風格應用程序運行在被稱為“應用程序容器”(app container)的環境中。這似乎取代了由基于 Win32 應用程序所使用的窗體環境。

  大多數 API 調用被直接發送給底層內核。然而,有些調用將被通過系統代理(system broker)路由。系統代理確保應用程序只能訪問那些經用戶已批準的功能。例如,當某個應用程序首次嘗試訪問攝像頭時,服務代理(service broker)將提示用戶以獲取他們的批準。應用程序必須包括一份清單,其中注明該應用程序可能需要的所有限制服務。這種模式對于移動設備開發者而言將是非常熟悉的。

  所有 Metro 風格應用程序都會運行在 WinRT 的應用程序容器中,而且會受到系統代理的監控,甚至連那些用 C++ 編寫的應用程序也不例外。該思想是為了限制應用程序破壞系統的能力。雖然也許并不是不可能的,但是在 WinRT 下創建惡意軟件與在 Win32 中相比將會難得多。

  所有 Metro 風格應用程序必須進行數字簽名

  不允許匿名應用程序。應用程序為了測試可進行自簽名,但是當它們出現在應用商店里時,它們就必須使用真實證書進行簽名。

  譯注

  [1] charm,微軟已將“CHARM”注冊為計算機、軟件產品、電氣和科學產品類商標。微軟將 CHARM 描述為計算機程序、圖形用戶界面軟件和操作系統程序。在觸摸版 Windows 8 中,charms 在屏幕右側;在傳統版(使用鼠標和鍵盤)Windows 8 中,charms 出現在屏幕左側。charms 包括:Search(搜索)、Share(分享)、Start(開始)、Devices(設備)、Settings(設置)。詳見微軟申請 Windows 8 功能 charm 注冊商標(圖)。

  作者:Jonathan Allen 譯者:高翌翔

  查看英文原文:WinRT: An Object Orientated Replacement for Win32 

  相關博客文章:Windows Runtime(WinRT) 揭秘

1
0
 
標簽:WinRT
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()