專利名稱:用于類型化程序設(shè)計(jì)語言的名稱綁定可擴(kuò)展性的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)程序設(shè)計(jì),尤其涉及用于類型化程序設(shè)計(jì)語言的名稱綁定可擴(kuò)展性。
背景技術(shù):
很多靜態(tài)類型化語言的特點(diǎn)是提供數(shù)據(jù)的靜態(tài)類型安全和動(dòng)態(tài)性質(zhì)之間的矛盾。 為了解決這一問題已經(jīng)進(jìn)行了很多嘗試,其中代碼生成器(設(shè)計(jì)時(shí)間和運(yùn)行時(shí))是最常見的方式。但是,代碼生成器唯一的問題是需要外部工具運(yùn)行來更新工件以便用戶的集成開發(fā)環(huán)境(IDE)體驗(yàn)變?yōu)椤爱?dāng)前的”。一般的問題是目前的很多編譯器和語言定義不允許內(nèi)部編譯器流水線的用戶化,這迫使代碼生成器成為替代方案。
發(fā)明內(nèi)容
以下提出簡(jiǎn)單的發(fā)明內(nèi)容以便提供對(duì)此處描述的一些新穎的實(shí)施例的基本理解。 本發(fā)明內(nèi)容不是大量的概述,并且不旨在標(biāo)識(shí)關(guān)鍵/決定性的元素或描繪其范圍。其唯一目的是以簡(jiǎn)化形式呈現(xiàn)某些概念作為之后呈現(xiàn)的更詳細(xì)描述的序言。所公開的體系結(jié)構(gòu)提供了插入(plug into)編譯器(例如F#)和相關(guān)聯(lián)的語言服務(wù)的方式。所述語言組件定義了允許任何組件連接入服務(wù)并且提供名稱綁定和類型解析服務(wù)的標(biāo)準(zhǔn)插件(Plug-in)機(jī)制。所述編譯器和語言服務(wù)利用了被定義為(例如以為了插入系統(tǒng)而必須實(shí)現(xiàn)的接口和類的形式)提供編譯時(shí)間和設(shè)計(jì)時(shí)間擴(kuò)展的協(xié)議。所述體系結(jié)構(gòu)提供了定義用戶化協(xié)議以與編譯器的名稱綁定機(jī)制交互的能力。這一協(xié)議的使用不僅使得編譯成功,并且還提供諸如針對(duì)快速信息的名稱查找和值查找這樣的豐富的IDE服務(wù)。此外,還支持提供靜態(tài)類型信息以滿足類型化程序設(shè)計(jì)語言的需求的能力。為了實(shí)現(xiàn)前述和相關(guān)目的,此處結(jié)合以下描述和附圖描述了某些說明性的方面。 這些方面僅指示可實(shí)現(xiàn)此處公開的原理的各種方式,且所有方面及其等價(jià)物均旨在包括在所要求保護(hù)的主題的范圍內(nèi)。當(dāng)結(jié)合附圖考慮以下詳細(xì)描述時(shí),其它優(yōu)點(diǎn)和新穎的特征將是顯而易見的。
圖1示出依照所公開的體系結(jié)構(gòu),用于與內(nèi)部編譯流水線接口的系統(tǒng)。圖2示出依照所公開的體系結(jié)構(gòu),與內(nèi)部編譯流水線交互的計(jì)算機(jī)實(shí)現(xiàn)的方法。圖3示出圖2中方法的進(jìn)一步的方面。圖4示出與內(nèi)部編譯流水線交互的另一種方法。圖5示出圖4中方法的進(jìn)一步的方面。圖6示出依照所公開的體系結(jié)構(gòu),執(zhí)行用于與各種類型的編譯流水線交互的可擴(kuò)展接口的計(jì)算系統(tǒng)的框圖。
具體實(shí)施例方式一般來說,編譯器(編譯組件)在編譯流水線中具有三個(gè)不同的階段(即過程) 語法分析(包括掃描和解析)、語義分析(包括程序驗(yàn)證、類型檢查等)、以及代碼生成。所述掃描和解析階段指的是前端過程,而所述代碼生成指的是后端過程。前端確定了程序的語法結(jié)構(gòu)并且將該結(jié)構(gòu)轉(zhuǎn)化為存儲(chǔ)器中的語法樹。然后前端執(zhí)行將語法樹轉(zhuǎn)化為注解的語義樹以及將該注解的語義樹轉(zhuǎn)化為可執(zhí)行程序(例如.exe文件、.dll文件等)的語義分析階段。所述代碼生成可以與目標(biāo)程序(例如.NET構(gòu)架、文字處理器、電子制表軟件等)緊
也袖口。掃描器為解析器的輸入標(biāo)記化傳入的程序設(shè)計(jì)語言文本,并且消除諸如注釋的未定義語法。解析器保證源程序與語言定義的一致性,處理錯(cuò)誤處理,創(chuàng)建程序語法的存儲(chǔ)器中表示供代碼生成器消耗,以及確定要使用的運(yùn)行時(shí)間類型。在所公開的體系結(jié)構(gòu)中,諸如在執(zhí)行名稱綁定的語義分析期間,提供允許用戶訪問一個(gè)或多個(gè)流水線服務(wù)的可擴(kuò)展接口(插件)。在該過程的第一階段,插入偽類型。編譯器從可擴(kuò)展接口使用的擴(kuò)展處接收生成的偽類型。然后像任何其它類型(例如從諸如匯編語言或用戶代碼的具體的源)流經(jīng)編譯器一樣,該生成的偽類型流經(jīng)類型檢查過程。由于偽類型不是真實(shí)的類型,體系結(jié)構(gòu)清理在偽類型處理中留下的過程殘余。例如,消除留在正在生成的程序中的調(diào)用和實(shí)例。可擴(kuò)展接口的另一部分是向編譯器內(nèi)回調(diào)并且確定哪些通過擴(kuò)展在編譯器中結(jié)束的偽類型應(yīng)該變成真實(shí)的類型。此外,對(duì)要被擴(kuò)展創(chuàng)建的真實(shí)方法和代碼替代的偽方法或其它代碼作出請(qǐng)求。然后在編譯過程中的合適階段插入這些替代,并且編譯器通過生成程序而結(jié)束。換句話說,可擴(kuò)展協(xié)議一般是為了通過可擴(kuò)展接口引入偽類型,使編譯器執(zhí)行其工作,并且接著消除在編譯器結(jié)構(gòu)中由偽類型剩下的殘余?,F(xiàn)在將參考附圖,其中使用相同的標(biāo)號(hào)來在全文中指示相同的元素。在以下描述中,出于解釋的目的,闡明了眾多具體細(xì)節(jié)以便提供對(duì)其徹底的理解。但是顯然,所述新穎的實(shí)施例能夠在沒有這些具體細(xì)節(jié)的情況下實(shí)現(xiàn)。在其它情況中,用框圖形式示出了熟知的結(jié)構(gòu)和設(shè)備以便于幫助對(duì)其的描述。目的旨在涵蓋落在所要求保護(hù)的主題的精神和范圍之內(nèi)的所有修改、等價(jià)物、以及替代物。圖1示出依照所公開的體系結(jié)構(gòu),用于與內(nèi)部編譯流水線接口的系統(tǒng)100。系統(tǒng) 100包括類型化程序設(shè)計(jì)語言的編譯組件102,該類型化的程序設(shè)計(jì)語言具有包括名稱綁定服務(wù)108在內(nèi)的服務(wù)106的內(nèi)部編譯流水線104 ;以及通過語言擴(kuò)展112便于訪問名稱綁定服務(wù)108以在編譯時(shí)間與類型交互的可擴(kuò)展接口組件110。接口組件110和擴(kuò)展組件112可以被使用作編輯器114的插件以作為集成開發(fā)環(huán)境(IDE)的一部分。編輯器114被設(shè)計(jì)為編輯諸如計(jì)算機(jī)程序等的源代碼。編輯器114可以是單獨(dú)的程序或被建立在IDE中。系統(tǒng)100還能夠使用語言服務(wù)116。編輯器114 一般包括被設(shè)計(jì)為簡(jiǎn)化和加速源代碼輸入的特征。這些特征包括,但不局限于,語法強(qiáng)調(diào)、自動(dòng)完成、括號(hào)匹配、參數(shù)幫助、函數(shù)列表、工具提示等。編輯器114還能夠在程序員鍵入時(shí)執(zhí)行語法檢查,立即檢測(cè)和向用戶通知語法問題。在語言服務(wù)116的支持下,編輯器114還能夠擔(dān)當(dāng)查找工具。例如,在一些已知的編輯器中,程序員可以鍵入函數(shù)名,并且響應(yīng)于“,”(逗號(hào))的輸入,為該函數(shù)顯示一列參數(shù)。但是應(yīng)當(dāng)理解,這一特征由語言服務(wù)提供,該語言服務(wù)與編譯器一起緊密地工作以提供這一信息。這一可用于成員、參數(shù)、函數(shù)、和其它程序元素的特征一般僅可用于靜態(tài)類型化的程序元素。依照所公開的體系結(jié)構(gòu)的各方面,這一查找特征還可用于在外部數(shù)據(jù)源中存儲(chǔ)的信息??蓴U(kuò)展接口組件110在編譯流水線104中啟用偽類型的靜態(tài)綁定??蓴U(kuò)展接口組件110還能夠編譯運(yùn)行時(shí)間中的某(些)點(diǎn)用真實(shí)類型取代偽類型??梢酝ㄟ^接口組件 110將這個(gè)(這些)點(diǎn)變成可訪問的,這可以被公開或被變成公開可見的以便于用戶插入擴(kuò)展點(diǎn)以通過受控的方式擴(kuò)展編譯器。編譯器擴(kuò)展可以被集成在整個(gè)流水線的各個(gè)地方,并且還可以影響由擴(kuò)展的編譯組件102生成的可執(zhí)行應(yīng)用程序的運(yùn)行時(shí)間行為。外部數(shù)據(jù)源可以是任何類型的靜態(tài)或動(dòng)態(tài)數(shù)據(jù)源。例如,外部數(shù)據(jù)源可以是包含有關(guān)具體域的數(shù)據(jù)的電子表格文件、包含有關(guān)具體域的數(shù)據(jù)的XML文件、SOL數(shù)據(jù)庫(kù)的實(shí)例、web服務(wù)、或任何動(dòng)態(tài)或靜態(tài)外部文件。擴(kuò)展點(diǎn)向編譯組件102提供信息。通過讀取這些外部數(shù)據(jù)源提取該信息。編譯組件102和語言服務(wù)116接收由擴(kuò)展點(diǎn)提供的信息,并且通過這一信息,編譯組件102和語言服務(wù)116可以為用戶提供豐富的IDE體驗(yàn),該IDE體驗(yàn)等同于在編程時(shí)為防止靜態(tài)類型而接收的IED體驗(yàn)。編譯組件102可以是任何靜態(tài)類型化的編譯器,包括,但不局限于,F(xiàn)#和/或C#編譯器??蓴U(kuò)展接口組件110還能夠消除在運(yùn)行時(shí)間中偽類型殘余,其中該偽類型殘余例如在偽類型的類型檢查期間被創(chuàng)建??蓴U(kuò)展接口組件110進(jìn)一步使語言服務(wù)116與編譯時(shí)間擴(kuò)展和設(shè)計(jì)時(shí)間擴(kuò)展接觸。編譯組件102的操作不妨礙與可擴(kuò)展接口組件110的合作。 可擴(kuò)展接口組件110還能夠通過語言擴(kuò)展112進(jìn)行名稱查找,以及能夠通過語言擴(kuò)展112 進(jìn)行值查找。語言擴(kuò)展112還提供適用于類型化的程序設(shè)計(jì)語言的靜態(tài)類型信息。更具體地,與可擴(kuò)展接口組件102相關(guān)聯(lián)的協(xié)議被定義為考慮到插件(可擴(kuò)展接口組件110)以抽象值和類型。該插件然后被用于實(shí)現(xiàn)能夠在名稱綁定階段期間為編譯器 (編譯組件10 解析類型和值的解析器方法。該類型和值被返回到編譯器,編譯器然后將這些類型和值映射到內(nèi)部編譯器數(shù)據(jù)結(jié)構(gòu),從而允許剩余的編譯階段正常執(zhí)行。該協(xié)議還允許用戶進(jìn)行部分名稱查找以提供全保真度的IDE體驗(yàn)。該協(xié)議定義了插件上的用于調(diào)用特定方法、性質(zhì)、或獲取值的方法。當(dāng)用戶已經(jīng)嵌入通過主機(jī)解析的代碼時(shí),編譯器釋放出調(diào)用插件運(yùn)行時(shí)間幫助器的代碼以通過性質(zhì)、方法或值檢索出特定值。該插件負(fù)責(zé)實(shí)現(xiàn)這一操作,并且解析這一值。例如,與電子數(shù)據(jù)表相關(guān)的插件解析電子數(shù)據(jù)表DOM (文件對(duì)象模型),與XML (可擴(kuò)展標(biāo)記語言)相關(guān)的插件可以通過讀取和解析XML來解析等。換句話說,由于此處公開的體系結(jié)構(gòu)是通用的并且允許實(shí)現(xiàn)針對(duì)任何域的具體數(shù)據(jù)的插件,因此任何第三方可以提供插件以擴(kuò)展編譯器。此處包括了一組代表用于執(zhí)行所公開的體系結(jié)構(gòu)的新穎方面的示例性方法的流程圖。為了解釋簡(jiǎn)明的目的,盡管此處所示的一種或多種方法例如通過流程圖的形式被顯示和表述為一系列的動(dòng)作,但是應(yīng)當(dāng)理解到所述方法不受到動(dòng)作的順序的限制,因?yàn)槟承﹦?dòng)作可以相應(yīng)地以不同的順序出現(xiàn)和/或與此處顯示和描述的動(dòng)作中的其它動(dòng)作一起同時(shí)出現(xiàn)。例如,那些本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解到方法可以替代地表示為諸如狀態(tài)圖的一系列互相關(guān)聯(lián)的狀態(tài)或事件。此外,新穎的實(shí)現(xiàn)并不需要方法所示的所有動(dòng)作。
圖2示出依照所公開的體系結(jié)構(gòu),與內(nèi)部編譯流水線交互的計(jì)算機(jī)實(shí)現(xiàn)的方法。 在200處,接收具有服務(wù)的內(nèi)部編譯流水線的類型化程序設(shè)計(jì)語言的編譯組件。在202處, 通過可擴(kuò)展接口提供內(nèi)部編譯流水線的接口。在204處,通過可擴(kuò)展接口訪問內(nèi)部編譯流水線的名稱綁定服務(wù)。在206處,在編譯時(shí)間通過名稱綁定服務(wù)與類型交互。圖3示出圖2中方法的進(jìn)一步的方面。在300處,通過可擴(kuò)展接口為內(nèi)部編譯流水線的類型檢查過程插入偽類型。在302處,偽類型在編譯時(shí)間中交互時(shí)由真實(shí)類型取代。 在304處,實(shí)現(xiàn)在內(nèi)部流水線的名稱綁定階段期間解析類型和值的解析器組件。在306處, 該類型和值被映射到內(nèi)部編譯數(shù)據(jù)結(jié)構(gòu)以允許編譯過程執(zhí)行。在308處,通過可擴(kuò)展接口啟用部分的名稱查找。圖4示出與內(nèi)部編譯流水線交互的另一種方法。在400處,接收具有服務(wù)的內(nèi)部編譯流水線的類型化程序設(shè)計(jì)語言的編譯組件。在402處,通過可擴(kuò)展接口提供內(nèi)部編譯流水線的接口。在404處,通過可擴(kuò)展接口訪問內(nèi)部編譯流水線的名稱綁定服務(wù)。在406 處,通過可擴(kuò)展接口將偽類型和值插入編譯流水線。在408處,偽類型在編譯時(shí)間由真實(shí)類型取代。圖5示出圖4中方法的進(jìn)一步的方面。在500處,在可擴(kuò)展接口中實(shí)現(xiàn)在內(nèi)部流水線的名稱綁定階段期間解析類型和值的解析器組件。在502處,該類型和值被映射到內(nèi)部編譯數(shù)據(jù)結(jié)構(gòu)以允許編譯過程執(zhí)行。在504處,通過可擴(kuò)展接口啟用部分的名稱查找和值查找。在506處,通過可擴(kuò)展接口定義調(diào)用具體方法、性質(zhì)中的至少一個(gè)或獲取值的方法。如在本申請(qǐng)中所使用的,術(shù)語“組件”和“系統(tǒng)”旨在表示計(jì)算機(jī)相關(guān)的實(shí)體,其可以是硬件、軟件和實(shí)體硬件的組合、軟件、或者執(zhí)行中的軟件。例如,組件可以是,但不限于是,諸如處理器、芯片存儲(chǔ)器、大容量存儲(chǔ)器設(shè)備(例如光盤驅(qū)動(dòng)器、固態(tài)驅(qū)動(dòng)器、和/或磁性存儲(chǔ)介質(zhì)驅(qū)動(dòng)器)、和計(jì)算機(jī)的實(shí)體組件,以及諸如在處理器上運(yùn)行的進(jìn)程、對(duì)象、可執(zhí)行碼、模塊、執(zhí)行的線程、和/或程序的軟件組件。作為說明,運(yùn)行在服務(wù)器上的應(yīng)用程序和服務(wù)器都可以是組件。一個(gè)或多個(gè)組件可以駐留在進(jìn)程和/或執(zhí)行的線程中,并且組件可以位于一個(gè)計(jì)算機(jī)內(nèi)和/或分布在兩個(gè)或更多的計(jì)算機(jī)之間。在此使用詞語“示例性”意指用作示例、實(shí)例或說明。在此被描述為“示例性”的任何方面或設(shè)計(jì)并不一定被解釋為比其他方面或設(shè)計(jì)更好或有利。現(xiàn)在參考圖6,圖6示出依照所公開的體系結(jié)構(gòu),執(zhí)行用于與各種類型編譯流水線交互的可擴(kuò)展接口的計(jì)算系統(tǒng)600的框圖。為了為相應(yīng)各方面提供額外的上下文,圖6以及以下描述旨在提供各方面可實(shí)現(xiàn)的合適計(jì)算系統(tǒng)600的簡(jiǎn)要、一般表述。盡管以上描述是在可以在一個(gè)或多個(gè)計(jì)算機(jī)上運(yùn)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中,但是那些本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)認(rèn)識(shí)到還可以以其他程序模塊的組合和/或作為硬件和軟件的組合實(shí)現(xiàn)新穎的實(shí)施例。用于實(shí)現(xiàn)各方面的計(jì)算系統(tǒng)600包括具有處理單元604、諸如系統(tǒng)存儲(chǔ)器606的計(jì)算機(jī)可讀存儲(chǔ)、以及系統(tǒng)總線608的計(jì)算機(jī)602。處理單元604可以是諸如單處理器、多處理器、單核單元、和多核單元等的各商用處理器中的任何一個(gè)。此外,那些本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解到可以和其它計(jì)算機(jī)系統(tǒng)配置一起實(shí)現(xiàn)所述新穎的方法,該計(jì)算機(jī)系統(tǒng)配置包括微型計(jì)算機(jī)、大型計(jì)算機(jī)、以及個(gè)人計(jì)算機(jī)(例如臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)等)、手提式計(jì)算設(shè)備、基于微處理器的或可編程的用戶電子設(shè)備等,其中每一個(gè)都可以在操作上和一個(gè)或多個(gè)相關(guān)設(shè)備耦合。系統(tǒng)存儲(chǔ)器606可以包括諸如易失性的(VOL)存儲(chǔ)器610 (例如隨機(jī)存取存儲(chǔ)器 (RAM))和非易失性的存儲(chǔ)器(NON-VOL)612(例如R0M、EPR0M、EEPR0M等)的計(jì)算機(jī)可讀存儲(chǔ)(物理存儲(chǔ)介質(zhì))。基本的輸入/輸出系統(tǒng)¢10 可以被存儲(chǔ)在非易失性的存儲(chǔ)器612 中,并且包括諸如在啟動(dòng)期間便于計(jì)算機(jī)602中組件之間的數(shù)據(jù)和信號(hào)通信的基本例程。 易失性的存儲(chǔ)器610還可以包括用于高速緩存數(shù)據(jù)的諸如靜態(tài)RAM的高速RAM。系統(tǒng)總線608為系統(tǒng)組件提供接口,該系統(tǒng)組件包括,但不局限于,系統(tǒng)存儲(chǔ)器 606到處理單元604。系統(tǒng)總線608可以是能夠進(jìn)一步互聯(lián)到存儲(chǔ)總線(具有或沒有存儲(chǔ)控制器)以及外圍總線(例如PCI、PCIe、AGP、LPC等)的若干類型總線結(jié)構(gòu)中的任何一種, 并且可以使用各種商用總線系統(tǒng)結(jié)構(gòu)中的任何一種。計(jì)算機(jī)602進(jìn)一步包括機(jī)器可讀存儲(chǔ)子系統(tǒng)614和存儲(chǔ)接口 616,以用于將存儲(chǔ)子系統(tǒng)614接口到系統(tǒng)總線608和其它期望的計(jì)算機(jī)組件。例如,存儲(chǔ)子系統(tǒng)614(物理存儲(chǔ)介質(zhì))可以包括硬盤驅(qū)動(dòng)器(HDD)、磁性軟盤驅(qū)動(dòng)器(FDD)、和/或光盤存儲(chǔ)驅(qū)動(dòng)器(例如⑶-ROM驅(qū)動(dòng)器、DVD驅(qū)動(dòng)器)中的一個(gè)或多個(gè)。例如,存儲(chǔ)接口 616可以包括諸如EIDE、 ATA、SATA、以及IEEE1394等的接口技術(shù)。一個(gè)或多個(gè)程序和數(shù)據(jù)可以被存儲(chǔ)在存儲(chǔ)器子系統(tǒng)606、機(jī)器可讀和可移動(dòng)存儲(chǔ)器子系統(tǒng)618 (例如快閃式存儲(chǔ)器形式因素的技術(shù))、和/或存儲(chǔ)子系統(tǒng)614 (例如光學(xué)的、 磁性的、固態(tài)的)中,該存儲(chǔ)子系統(tǒng)包括操作系統(tǒng)620、一個(gè)或多個(gè)應(yīng)用程序622、其它程序模塊624、以及程序數(shù)據(jù)626。例如,所述一個(gè)或多個(gè)應(yīng)用程序622、其它程序模塊624、以及程序數(shù)據(jù)6 可以包括圖1中系統(tǒng)100的實(shí)體和組件,以及由圖2-5的流程圖表示的方法。一般地,程序包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、方法、數(shù)據(jù)結(jié)構(gòu)、其它軟件組件等。例如,操作系統(tǒng)620、應(yīng)用程序622、模塊624、和/或數(shù)據(jù)6 的全部或部分可以被高速緩存在諸如易失性存儲(chǔ)器610的存儲(chǔ)器中。應(yīng)當(dāng)理解,所公開的體系結(jié)構(gòu)能夠用各種商用的操作系統(tǒng)或操作系統(tǒng)(例如作為虛擬機(jī)器)的組合來實(shí)現(xiàn)。存儲(chǔ)子系統(tǒng)614和存儲(chǔ)器子系統(tǒng)(606和618)當(dāng)作用于數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)、計(jì)算機(jī)可執(zhí)行指令等的易失性和非易失性存儲(chǔ)的計(jì)算機(jī)可讀介質(zhì)。這些指令在由計(jì)算機(jī)或其它機(jī)器執(zhí)行時(shí),能夠使得計(jì)算機(jī)或其它機(jī)器執(zhí)行方法的一個(gè)或多個(gè)動(dòng)作??梢詫?zhí)行動(dòng)作的指令存儲(chǔ)在一個(gè)介質(zhì)上,或者跨多個(gè)介質(zhì)存儲(chǔ)該指令,以便于指令在一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上共同地出現(xiàn),而不管所有指令是否在同一介質(zhì)上。計(jì)算機(jī)可讀介質(zhì)可以是能夠被計(jì)算機(jī)602訪問的任何可用介質(zhì),包括易失性的和非易失性的、內(nèi)部的和/或外部的、可移動(dòng)的或不可移動(dòng)的介質(zhì)。介質(zhì)以任何合適的數(shù)字形式為計(jì)算機(jī)602供應(yīng)數(shù)據(jù)的存儲(chǔ)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以使用諸如zip驅(qū)動(dòng)器、 磁帶、快閃式存儲(chǔ)器卡、閃存驅(qū)動(dòng)器、卡帶等的其它類型的計(jì)算機(jī)可讀介質(zhì),以用于存儲(chǔ)執(zhí)行所公開的體系結(jié)構(gòu)的新穎方法的計(jì)算機(jī)可執(zhí)行指令。用戶可以使用諸如鍵盤和鼠標(biāo)等的外部的用戶輸入設(shè)備628與計(jì)算機(jī)602、程序和數(shù)據(jù)交互。其它外部的用戶輸入設(shè)備擬8可以包括話筒、IR(紅外的)遙控器、控制桿、游戲控制器、照相機(jī)識(shí)別系統(tǒng)、手寫筆、觸摸屏、姿勢(shì)系統(tǒng)(例如眼睛的動(dòng)作、頭部的動(dòng)作等) 等等。用戶可以使用諸如觸摸板、話筒、鍵盤等的機(jī)載用戶輸入設(shè)備630與計(jì)算機(jī)602、程序和數(shù)據(jù)交互,例如其中計(jì)算機(jī)602是便攜式計(jì)算機(jī)。這些和其它的輸入設(shè)備通過輸入/ 輸出(I/O)設(shè)備接口 632經(jīng)由系統(tǒng)總線608被連接到處理單元604,也可以通過諸如并行端口、IEEE 1394串行端口、游戲端口、USB端口JR接口等其它接口被連接。I/O設(shè)備接口 632還便于使用諸如打印機(jī)、音頻設(shè)備、照相機(jī)設(shè)備等輸出外設(shè)634,諸如聲卡和/或機(jī)載音頻處理能力。一個(gè)或多個(gè)圖形接口 636(通常還被稱為圖形處理單元(GPU))在計(jì)算機(jī)602和外部顯示器638 (例如IXD、等離子體)和/或機(jī)載顯示器640 (例如便攜式計(jì)算機(jī))之間提供圖形和視頻信號(hào)。圖形接口 636還可以被制造成計(jì)算機(jī)系統(tǒng)板的一部分。計(jì)算機(jī)602可以通過使用經(jīng)由有線/無線通信子系統(tǒng)642到一個(gè)或多個(gè)網(wǎng)絡(luò)和/ 或其它計(jì)算機(jī)的邏輯連接,而在網(wǎng)絡(luò)環(huán)境(例如基于IP的)中操作。所述其它計(jì)算機(jī)可以包括工作站、服務(wù)器、路由器、個(gè)人計(jì)算機(jī)、基于微處理器的娛樂設(shè)備、對(duì)等設(shè)備、或其它通常的網(wǎng)絡(luò)節(jié)點(diǎn),并且一般包括相對(duì)于計(jì)算機(jī)602描述的元素的許多或全部。所述邏輯連接可以包括到局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、熱點(diǎn)等的有線/無線的連接性。LAN和WAN網(wǎng)絡(luò)環(huán)境在辦公室和公司里是常見的,并且便于諸如內(nèi)部網(wǎng)的企業(yè)范圍內(nèi)的計(jì)算機(jī)網(wǎng)絡(luò),而所有的內(nèi)部網(wǎng)絡(luò)可以連接到諸如因特網(wǎng)的全球通信網(wǎng)絡(luò)。當(dāng)在網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)602通過有線/無線通信子系統(tǒng)642 (例如網(wǎng)絡(luò)接口適配器、機(jī)載收發(fā)器等)連接至網(wǎng)絡(luò)以與有線/無線網(wǎng)絡(luò)、有線/無線打印機(jī)、有線/無線輸入設(shè)備644等通信。計(jì)算機(jī)602可以包括用于通過網(wǎng)絡(luò)建立通信的調(diào)制解調(diào)器或其它裝置。在網(wǎng)絡(luò)環(huán)境中,與計(jì)算機(jī)602相關(guān)的程序和數(shù)據(jù)可以被存儲(chǔ)在與分布式系統(tǒng)相關(guān)聯(lián)的遠(yuǎn)程存儲(chǔ)器/存儲(chǔ)設(shè)備中。應(yīng)當(dāng)理解,示出的網(wǎng)絡(luò)連接是示例性的,并且可以使用在計(jì)算機(jī)之間建立通信鏈路的其它手段。計(jì)算機(jī)602可以使用諸如IEEE 802. xx標(biāo)準(zhǔn)族的無線電技術(shù)與有線/無線設(shè)備或?qū)嶓w通信,諸如用例如打印機(jī)、掃描儀、臺(tái)式計(jì)算機(jī)和/或便攜式計(jì)算機(jī)、個(gè)人數(shù)字助理 (PDA)、通信衛(wèi)星、與無線可檢測(cè)標(biāo)簽相關(guān)聯(lián)的任何儀器或位置(例如公用電話亭、報(bào)攤、洗手間)以及電話有效地布置在無線通信(例如IEEE 802. 11無線電調(diào)制技術(shù))中的無線設(shè)備。這至少包括用于熱點(diǎn)、WiMax、以及Bluetooth 無線技術(shù)的Wi-Fi (即無線保真)。因此,通信可以是像常規(guī)網(wǎng)絡(luò)所用的預(yù)定義的結(jié)構(gòu)或者簡(jiǎn)單的是至少兩個(gè)設(shè)備之間的自組織通信。WiFi網(wǎng)絡(luò)使用名為IEEE 802. llx(a、b、g等)的無線電技術(shù)來提供安全、可靠、快速的無線連接性??梢允褂肳iFi網(wǎng)絡(luò)將計(jì)算機(jī)互相連接,連接至因特網(wǎng)、以及連接至有線網(wǎng)絡(luò)(使用與IEEE 802. 3-相關(guān)的介質(zhì)和功能)。上文所描述的包括所公開的體系結(jié)構(gòu)的示例。當(dāng)然,不可能描述組件和/或方法的每一可想象的組合,但是本領(lǐng)域的普通技術(shù)人員可以認(rèn)識(shí)到,許多另外的組合和置換是可能的。因此,所述新穎的體系結(jié)構(gòu)旨在包含落入所附權(quán)利要求書的精神和范圍中的所有這樣的改變、修改和變化。此外,就在說明書和權(quán)利要求書中使用術(shù)語“包括”而言,這一術(shù)語旨在以與術(shù)語“包含”用作權(quán)利要求書中的過渡詞語所解釋的類似的方式為包含性的。
8
權(quán)利要求
1.一種具有存儲(chǔ)由處理器執(zhí)行的可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)的計(jì)算機(jī)可實(shí)現(xiàn)系統(tǒng) (100),包括編譯組件(102),所述編譯組件具有包含名稱綁定服務(wù)在內(nèi)的服務(wù)的內(nèi)部編譯流水線的類型化程序設(shè)計(jì)語言;以及可擴(kuò)展接口組件(110),所述可擴(kuò)展接口組件便于通過語言擴(kuò)展訪問名稱綁定服務(wù)以便在編譯時(shí)間與類型交互。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述可擴(kuò)展接口組件能夠在編譯流水線中進(jìn)行偽類型的靜態(tài)綁定。
3.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述可擴(kuò)展接口組件能夠在運(yùn)行時(shí)間消除偽類型殘余,所述殘余在偽類型的類型檢查期間創(chuàng)建。
4.如權(quán)利要求3所述的系統(tǒng),其特征在于,所述可擴(kuò)展接口組件能夠在編譯運(yùn)行時(shí)間用真實(shí)類型取代偽類型。
5.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述可擴(kuò)展接口組件進(jìn)一步使語言服務(wù)與編譯時(shí)間擴(kuò)展和設(shè)計(jì)時(shí)間擴(kuò)展接觸。
6.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述編譯組件的操作不妨礙與可擴(kuò)展接口組件的合作。
7.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述可擴(kuò)展接口組件能夠通過語言擴(kuò)展進(jìn)行名稱查找。
8.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述可擴(kuò)展接口組件能夠通過語言擴(kuò)展進(jìn)行值查找。
9.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述語言擴(kuò)展提供適合于類型化的程序設(shè)計(jì)語言的靜態(tài)類型信息。
10.一種由處理器執(zhí)行的計(jì)算機(jī)可實(shí)現(xiàn)方法,包括接收具有服務(wù)的內(nèi)部編譯流水線的類型化程序設(shè)計(jì)語言的編譯組件O00);通過可擴(kuò)展接口連接到內(nèi)部編譯流水線O02);通過可擴(kuò)展接口訪問內(nèi)部編譯流水線的名稱綁定服務(wù)O04);以及在編譯時(shí)間通過名稱綁定服務(wù)與類型交互006)。
11.如權(quán)利要求10所述的方法,其特征在于,還包括通過可擴(kuò)展接口為內(nèi)部編譯流水線的類型檢查過程插入偽類型。
12.如權(quán)利要求10所述的方法,其特征在于,還包括在編譯時(shí)間的交互時(shí)用真實(shí)類型取代偽類型。
13.如權(quán)利要求10所述的方法,其特征在于,還包括在內(nèi)部流水線的名稱綁定階段期間實(shí)現(xiàn)解析類型和值的解析器組件。
14.如權(quán)利要求13所述的方法,其特征在于,還包括將類型和值映射到內(nèi)部編譯數(shù)據(jù)結(jié)構(gòu)以允許編譯過程執(zhí)行。
15.如權(quán)利要求10所述的方法,其特征在于,還包括通過可擴(kuò)展接口進(jìn)行部分的名稱查找。
全文摘要
本發(fā)明涉及用于類型化程序設(shè)計(jì)語言的名稱綁定可擴(kuò)展性。提供插入編譯器(例如F#)以及相關(guān)聯(lián)的語言服務(wù)的方法的體系結(jié)構(gòu)。所述語言組件定義允許任何組件插入服務(wù)的標(biāo)準(zhǔn)插件機(jī)制,并且提供名稱綁定和類型解析服務(wù)。所述編譯器和語言服務(wù)利用了被定義為(例如以為了插入系統(tǒng)必須實(shí)現(xiàn)的接口和類的形式)提供編譯時(shí)間和設(shè)計(jì)時(shí)間擴(kuò)展的協(xié)議。所述體系結(jié)構(gòu)提供了定義用戶化協(xié)議以與編譯器的名稱綁定機(jī)制交互的能力。這一協(xié)議的使用不僅使得編譯成功,并且還提供諸如用于快速信息的名稱查找和值查找等的豐富的IDE服務(wù)。此外,還支持提供靜態(tài)類型信息以滿足類型化的程序設(shè)計(jì)語言的需求的能力。
文檔編號(hào)G06F9/45GK102236573SQ20111012277
公開日2011年11月9日 申請(qǐng)日期2011年5月4日 優(yōu)先權(quán)日2010年5月5日
發(fā)明者D·西梅, J·A·費(fèi)雪, L·J·霍本, T·Y·T·額 申請(qǐng)人:微軟公司