有關操作系統應用編程接口的信息以已知的格式被存儲在已知的位置。這個信息充分描述由操作系統顯露的API,并且被存儲在API元數據文件中。語言編譯器或解釋器使用這個API信息來用目標語言構建本機系統API的自然的和熟悉的表示。語言編譯器或解釋器可以在編譯時和/或運行時間讀取所述API信息。元數據被使用來允許應用引用API中的命名元素。構建了投射,所述投射使用元數據來把API中的命名元素映射到目標語言中的命名元素,以及定義包裝器,所述包裝器在目標表示與本機操作系統表示之間對那些元素的數據編組。
【技術實現步驟摘要】
將操作系統的本機應用編程接口投射到其他編程語言
技術介紹
操作系統典型地具有幾個應用編程接口,這些應用編程接口允許應用訪問由操作系統支持的功能性。這樣的API典型地由操作系統通過使用某種計算機編程語言中的命名文件或對象而被規定。例如,C編程語言使用可能具有諸如“interface.h”那樣的名字的首標文件。同樣地,在C#中,稱為“P/Invoke”簽名的機制被使用來訪問操作系統API。編寫將利用操作系統API的計算機程序的人典型地在程序中包括對命名的API文件或對象的引用,或使用由編程語言提供的另一種機制。該程序于是例如包括按照由該API使用的語法的、對由該API定義的函數的調用(calI)。以這種方式定義的API不能由與它們被編寫的語言不同的語言直接訪問。為了使 得用其他語言編寫的程序可訪問API,API被“包裝(wrap)”。這種包裝典型地必須按API和按語言來人工地完成,并需要深入理解目標語言和API以及操作系統。因此,許多操作系統API是無法使用的。
技術實現思路
本概要被提供來以簡化的形式介紹概念的選擇,這些概念在下面的詳細說明中被進一步描述。本概要既不打算確認所要求保護的主題的關鍵特征或必要特征,也不打算被使用來限制所要求保護的主題的范圍。當構建操作系統時,關于API的信息被生成并被以已知的格式存儲在操作系統內的已知位置。這個信息充分描述由操作系統所顯露的(expose)所有的API。這包括(但不限于)各種各樣類型的關于API的命名元素的信息,諸如基本類型、枚舉類型、結構、委托(delegate)、接口、類(class)、方法、屬性和事件。這個信息被存儲在API元數據文件中。語言編譯器或解釋器使用這個API信息來用目標語言構建本機(native)系統API的自然的和熟悉的表示。這個表示隨不同的語言而變化(因為所謂的自然的和熟悉的東西是隨不同的語言而變化的)。語言編譯器或解釋器可以在編譯時和/或運行時間讀取API信息,什么時間對所討論的語言最適當就在什么時間。例如,類似C++那樣的靜態編譯的語言將僅僅在編譯時消費(consume)元數據,而類似Python或JavaScript那樣的動態語言將僅僅在運行時間消費元數據。類似.NET或Java那樣的環境多半既在編譯又在運行時消費元數據。元數據被使用來允許應用引用在API中的命名的元素。構建了投射(projection),所述投射使用元數據來把API中的命名元素映射為在目標語言中的命名元素,以及定義包裝器,所述包裝器對在目標表示和本機操作系統表示之間的那些元素的數據進行編組(marshal)。因此,一方面,描述操作系統的應用編程接口的元數據被存儲在存儲器中。假設有引用了應用編程接口之一的元素的、在按照某個編程語言的程序中的命名元素的指示,該命名元素通過使用元數據被投射到該編程語言中。投射可以在程序的編譯或解釋期間出現。投射可包括產生創建該編程語言中的一個或多個元素的代碼,以及按照類型來對用于所創建的元素的數據編組。接口一一包括它們的方法、屬性和事件一一也可以被如此投射。投射還可以包括將異常(exception)從操作系統傳播到應用。操作系統API到其他語言的這樣的投射可以在計算機實施的過程中,在包括一個或多個計算機存儲媒體的制造品中,或在計算機器中被體現。在以下的說明中,參考了形成本說明的一部分的附圖,且在圖上,作為舉例說明,顯示了本技術的具體的示例性實現。應當理解,可以利用其它實施例以及可以做出結構的改變而不背離本公開內容的范圍。附圖說明圖I是包括API到其它編程語言的投射的系統的框圖。圖2是圖示開發工具的示例性操作的流程圖。圖3是圖示編譯器或解釋器的示例性操作的流程圖。 圖4是可以在其中實施這樣的系統的示例性計算設備的框圖。具體實施例方式下面的段落提供在其中可以實施本機系統API到其它語言的這樣的投射的示例性操作環境。參照圖1,運行的應用100在運行時間期間訪問操作系統104的本機系統API102。為了使這樣的應用具有這樣的功能性,典型地通過使用諸如編輯器那樣的開發工具112來編寫程序106。這樣的程序由語言的編譯器或解釋器108進行編譯或解釋,以便提供運行時應用100。開發工具112和編譯器或解釋器108訪問充分描述操作系統的API 102的元數據110。開發工具112幫助開發者編寫程序,但經由元數據把可用的本機系統API通知開發者,且允許通過使用開發者的編程語言訪問那些API。編譯器或解釋器通過使用元數據來具體化本機系統API到開發者的編程語言的投射。具體地,在API中的命名元素被映射到目標語言中的命名元素,以及在那些元素中的值在由目標語言與操作系統所使用的格式之間進行編組。構建這樣的系統是從構建具有用元數據描述的API的操作系統開始的。元數據以與編程語言無關的形式表示API描述的每個命名的元素。這個元數據提供接口的完整的描述。組合的系統元數據可以以ECMA-335 CLI格式被存儲在一系列元數據文件中,但具體的格式對于本專利技術是不重要的。在假設這個上下文后,將結合圖2-4更詳細地描述這樣的系統的示例性實現。在圖2上,現在將描述開發工具的操作的例子。當編寫計算機程序時,開發者通常使用諸如編輯器那樣的某種形式的開發工具。這個編輯器可以完成各種各樣的任務,諸如驗證語法和提出使開發者輸入的字符串填充完整的建議。在這種環境下,描述操作系統應用編程接口的元數據可以以各種各樣的方式被使用。具體地,它可被使用來允許開發者發現可用的API。開發工具接收200字符串輸入,諸如可以在API中被用作為標識符(諸如“鼠標”)或名字空間(諸如,操作系統的名稱)的關鍵字。元數據可以被搜索202,以便識別把接收的輸入作為標識符或名字空間的一部分的元素。用于該組匹配的元素的標識符可以被收集和返回204給開發工具。開發工具可以把這些元素呈現206給開發者以供選擇,并且使用來自元數據的信息,以適合于開發者正在使用的計算機語言的格式呈現這樣的元素?,F在參照圖3,現在將描述語言編譯器或解釋器的操作的例子。在處理計算機程序時,無論是編譯還是解釋它,均檢測300計算機程序的元素的序列。確定302計算機程序的元素是否是對操作系統的API的引用。例如,這可以通過在元數據中查找該元素而被確定。通過使用元數據,創建304投射元素,其允許在計算機程序與操作系統之間交換數據。具體地,編譯器或解釋器實施操作系統API中的命名元素到目標語言中的命名元素的投射。元數據允許創建對象,和在由程序使用的數據格式與由操作系統使用的格式之間對值編組。在運行時間,這個元素允許程序訪問306操作系統的API,和在應用與操作系統之間對數據編組。在目前描述了這樣的系統的總的操作后,現在將描述特定的例子。具體地,現在將描述在描述API的元數據與該API的元素的計算機語言特定的表示之間的示例性投射的更多細節。以下的描述僅僅是一個可能的實現,而并不被看作為是對本專利技術的限制。具體地,應當理解,下面僅僅是可以被實施的語言投射的例子,以及用于這種語言的其它實現是可能的,且到其他語言的其他投射是可能的。 在本例中,JavaScript是本機系統API通過使用元數據將被投射到的編程語言。在下面的例子中,給出如何把某些種類的元素投射本文檔來自技高網...
【技術保護點】
一種計算機實施的過程,包括:將描述操作系統(104)的應用編程接口(102)的元數據(110),接收進存儲器中;接收(300)引用所述應用編程接口之一的元素的、在按照編程語言的程序中的命名元素的指示;以及使用該元數據,投射(304)該應用編程接口的該命名元素。
【技術特征摘要】
...
【專利技術屬性】
技術研發人員:H皮爾森,B雷克托爾,M洛夫爾,M普拉克里亞,S羅維,T巴蘇,RA弗洛達茨科,EH奧米亞,J杜尼茨,A霍爾塞克,LW奧斯特曼,曾煒,N沃瓦,S索爾卡,M阿克西安金,
申請(專利權)人:微軟公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。