欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

從代碼使用中創(chuàng)建所推斷的符號的制作方法

文檔序號:6351777閱讀:195來源:國知局
專利名稱:從代碼使用中創(chuàng)建所推斷的符號的制作方法
從代碼使用中創(chuàng)建所推斷的符號背景動態(tài)編程語言在運(yùn)行時(shí)執(zhí)行其他(動態(tài)編程)語言如果執(zhí)行的話通常在編譯期間執(zhí)行的行為。在運(yùn)行時(shí)由動態(tài)語言執(zhí)行的行為包括通過在程序執(zhí)行期間添加新代碼、創(chuàng)建對象和定義、修改類型系統(tǒng)等等來對程序進(jìn)行擴(kuò)展。動態(tài)編程語言通常是動態(tài)地類型化的,這意味著,類型檢查是在運(yùn)行時(shí)執(zhí)行的。在動態(tài)類型化時(shí),類型與從程序的執(zhí)行中得到的值相關(guān)聯(lián)。動態(tài)類型化語言包括Clojure、Groovy> JavaScript、Lisp、Objective-C、PHP> Prolog、Python> Ruby、Smalltalk、VisualBasic中的后期綁定、IronPython和IronRuby。動態(tài)類型化沒有靜態(tài)類型化那么嚴(yán)格,但可以導(dǎo)致較大可能性的執(zhí)行錯(cuò)誤(例如由于變量的值具有不允許的類型而引起的出錯(cuò)結(jié)果)。動態(tài)類型化的語言系統(tǒng)通常使得對源代碼的編譯時(shí)檢查較少。運(yùn)行時(shí)檢查可能是更復(fù)雜的,因?yàn)槌嗽诰幾g期間存在過并且在運(yùn)行時(shí)仍可用的信息之外,它們還可以使用動態(tài)(運(yùn) 行時(shí))信息。運(yùn)行時(shí)檢查斷言條件在程序的特定執(zhí)行中成立并且對程序的每次執(zhí)行重復(fù)。綁定選擇在源代碼中時(shí)應(yīng)用句法操作時(shí)使用哪個(gè)實(shí)際操作。綁定可以要么發(fā)生在編譯時(shí)(在該情況下被稱為“靜態(tài)綁定”)、要么動態(tài)地發(fā)生在運(yùn)行時(shí)(這被稱為“動態(tài)綁定”)。動態(tài)綁定推遲對未定義的變量的解析直到程序運(yùn)行。動態(tài)綁定與靜態(tài)綁定是不同的,因?yàn)槠浣Y(jié)果——例如被分配給操作的含義——取決于其所操作的實(shí)際值的運(yùn)行時(shí)類型,而不是源代碼中的變量的編譯時(shí)類型。通常,靜態(tài)類型化的編程語言執(zhí)行靜態(tài)綁定,而動態(tài)類型化的編程語言執(zhí)行動態(tài)綁定。然而,當(dāng)靜態(tài)語言包含動態(tài)綁定(比如具有動態(tài)語言特性的C#4. 0)或者相反時(shí),可能具有二者的混合。測試驅(qū)動的開發(fā)是指一種迭代軟件開發(fā)技術(shù),其中開發(fā)者首先編寫確認(rèn)所期望的改進(jìn)或新功能的測試情況,然后開發(fā)者產(chǎn)生致使測試通過的代碼,然后是重構(gòu)代碼庫以考慮到任何新的系統(tǒng)要求。例如,包括操縱對象的邏輯的代碼可以在編寫定義所述對象的代碼以前編寫。換言之消費(fèi)(消費(fèi)性)代碼是在編寫被消費(fèi)對象以前編寫的。概述動態(tài)編程技術(shù)和測試驅(qū)動的開發(fā)具有至少一個(gè)相互挑戰(zhàn)。在兩種情況下,由于底層被消費(fèi)代碼還未被創(chuàng)建,因此依靠可用底層代碼的工具不能例如通過在用戶將代碼鍵入到源代碼編輯器中時(shí)為了自動完成而顯示可能的選擇來輔助開發(fā)過程。根據(jù)在此公開的主題的各方面,基于符號在整個(gè)代碼內(nèi)的使用(或可能的使用)來創(chuàng)建諸如包括所推斷的節(jié)點(diǎn)的句法樹或語義樹和/或包括所推斷的符號的符號表之類的數(shù)據(jù)結(jié)構(gòu)。所推斷的節(jié)點(diǎn)和/或所推斷的符號可以通過學(xué)習(xí)算法來生成。工具可以使用這樣創(chuàng)建的句法樹等等來提供關(guān)于還未被創(chuàng)建或還未被綁定的符號的信息以供用在動態(tài)編程和測試驅(qū)動的開發(fā)中。表示源代碼的數(shù)據(jù)結(jié)構(gòu)可以由后臺編譯器在交互式程序開發(fā)期間生成??梢曰谳斎氲皆创a編輯器中的源代碼將一個(gè)或多個(gè)符號添加到數(shù)據(jù)結(jié)構(gòu),其中所述符號是在沒有所述符號的在先定義的情況下基于所述符號的使用從源代碼中推斷出的??梢曰趯⒁唤M規(guī)則應(yīng)用到未定義的符號來創(chuàng)建所推斷的符號。響應(yīng)于從用戶接收到這樣做的指示,可以將所推斷的符號轉(zhuǎn)換成實(shí)符號。所推斷的符號到實(shí)符號的轉(zhuǎn)換可以由開發(fā)者的動作觸發(fā)以基于所推斷的符號自動生成源代碼。自動添加的源代碼將包括未定義的符號的定義。與所推斷的符號相關(guān)聯(lián)的信息可以響應(yīng)于編程環(huán)境中的進(jìn)入“建議模式”的選項(xiàng)的激活而顯示在軟件開發(fā)工具中。提供本概述以便以簡化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一些概念。本概述并不旨在標(biāo)識所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限制所要求保護(hù)的主題的范圍。附圖
簡述在附圖中圖Ia示出了根據(jù)在此公開的主題的各方面的用于從代碼使用中創(chuàng)建所推斷的符號的系統(tǒng)100的不例;圖Ib示出了現(xiàn)有技術(shù)中已知的樹10的示例; 圖Ic示出了根據(jù)此處所公開的主題的各方面的樹12的示例;圖2是根據(jù)此處所公開的主題的各方面的用于從代碼使用中創(chuàng)建所推斷的符號的方法200的示例的流程圖;圖3是示出了其中可以實(shí)現(xiàn)此處所公開的主題的各方面的計(jì)算環(huán)境的示例的框圖;以及圖4是根據(jù)此處所公開的主題的各方面的集成開發(fā)環(huán)境的示例的框圖。詳細(xì)描述概覽測試驅(qū)動的開發(fā)實(shí)踐的流行度日益增加。編程語言中的動態(tài)語言影響變得更加突出。因此,可能有利的是,當(dāng)代碼模型還不存在或者還未已知但是仍然被消費(fèi)時(shí),軟件開發(fā)工具能夠提供關(guān)于可能的代碼的信息。在此所述的主題使得為首先消費(fèi)(consume-first)編程風(fēng)格創(chuàng)建在符號存在或符號被綁定以前提供相關(guān)信息的工具成為可能。在此公開的主題尤其是適用于編寫具有首先消費(fèi)或首先測試(test-first)開發(fā)風(fēng)格的代碼、以及編寫動態(tài)(后期綁定)代碼,但是能夠理解,所公開的主題適用于任何風(fēng)格的計(jì)算機(jī)程序開發(fā)。在編寫代碼時(shí),可以創(chuàng)建表示源代碼、基于源代碼或者與源代碼相關(guān)聯(lián)的句法樹、語義樹或符號表。對于在全局符號表中還未綁定或定義的符號,可以創(chuàng)建可能的或“所推斷的”節(jié)點(diǎn)或符號并可將其添加到由編譯器創(chuàng)建的句法樹、語義樹或符號表。符號類型的多個(gè)候選對于所推斷的符號而言可能都是可能的(例如該符號可以表示類或者可以表示結(jié)構(gòu)體,該符號可以表示方法或者可以表示屬性)。所有候選都可以在樹/表中被表示成可能的符號,或者可替代地,可以提供服務(wù)或軟件模塊來檢索候選組。隨著用戶繼續(xù)編寫代碼,代碼模型可以基于學(xué)習(xí)模型(例如使用現(xiàn)有技術(shù)中已知的機(jī)器學(xué)習(xí)技術(shù))被更新以表示附加的信息。例如,如果關(guān)于特定的所推斷的符號表示什么存在不清楚,則隨著開發(fā)者繼續(xù)編寫代碼,該不清楚可以解決或者在選擇集合中的特定選擇可以變?yōu)楦涌赡堋T谶@種情況下,句法樹、語義樹或符號表中的所推斷的符號可以被更新以表示當(dāng)前的知識狀態(tài)。所推斷的符號可以由包括、但不限于下列各項(xiàng)的軟件開發(fā)工具來使用完成列表、調(diào)用分層結(jié)構(gòu)、引用列表(reference list)、對象瀏覽器、類視圖、尋找引用、導(dǎo)航工具等等以為還未創(chuàng)建或還未綁定的符號提供開發(fā)者工具。根據(jù)所公開主題的一些方面,可以通過諸如顏色、突出顯示之類的區(qū)別、通過伴隨特定圖標(biāo)等等來在視覺上區(qū)分所推斷的符號。所推斷的符號可以通過激活特定的模式(例如通過激活“建議模式”選項(xiàng))而被包括在傳統(tǒng)集成開發(fā)環(huán)境內(nèi)或者在該環(huán)境內(nèi)變?yōu)榭梢姟;谒茢嗟姆枺删幾g器發(fā)現(xiàn)的錯(cuò)誤條件可以觸發(fā)附加源代碼的自動生成以校正該錯(cuò)誤條件。所推斷的符號可以例如通過激活“使其成真(make it real)”或“從使用生成(generate from usage)”選項(xiàng)被轉(zhuǎn)換成實(shí)際符號。例如,所推斷的節(jié)點(diǎn)可以通過激活這樣的選項(xiàng)被轉(zhuǎn)換成句法樹或語義樹中的具體節(jié)點(diǎn)。類似地,符號表中的所推斷的符號可以通過為符號表激活這樣的選項(xiàng)被轉(zhuǎn)換成具體符號。從代碼使用中創(chuàng)建所推斷的符號圖Ia示出了根據(jù)在此公開的主題的各方面的用于從代碼使用中創(chuàng)建所推斷的符號的系統(tǒng)100的示例。系統(tǒng)100的全部或某些部分可以駐留在諸如下面參考圖3所描述的計(jì)算機(jī)之類的一臺或多臺計(jì)算機(jī)上。系統(tǒng)100的全部或某些部分可以駐留在諸如下面參考圖4所描述的計(jì)算機(jī)之類的一臺或多臺軟件開發(fā)計(jì)算機(jī)(例如,計(jì)算機(jī)102)上。系統(tǒng)100或其一些部分可以包括諸如下面參考圖4所描述的和所示出的那些集成開發(fā)環(huán)境(例如,IDE 104)的一部分。替代地,系統(tǒng)100或其一些部分可以作為獨(dú)立系統(tǒng)或作為插件或加入件來提供。系統(tǒng)100可以包括以下中的一個(gè)或多個(gè)處理器(比如處理器142)、諸如存儲器144之類的存儲器、以及用于從代碼使用中創(chuàng)建所推斷的符號的模塊106。也可以包括本領(lǐng)域已知的其他組件,但此處未示出。能夠理解,用于從代碼使用中創(chuàng)建所推斷的符號的模塊可以被加載到存儲器144中以致使諸如處理器142之類的一個(gè)或多個(gè)處理器執(zhí)行以歸因于用于從代碼使用中創(chuàng)建所推斷的符號的模塊106的動作。由后臺編譯器基于所輸入的源代碼創(chuàng)建或生成的數(shù)據(jù)結(jié)構(gòu)可以被用于從代碼使用中創(chuàng)建所推斷的符號的模塊106修改為包括由用于從代碼使用中創(chuàng)建所推斷的符號的模塊106創(chuàng)建的所推斷的符號。所推斷的符號可以表示被消費(fèi)代碼,其中當(dāng)被消費(fèi)代碼未存在于源代碼中時(shí),消費(fèi)代碼存在于該源代碼中。根據(jù)在此公開主題的各方面,用于從代碼使用中創(chuàng)建所推斷的符號的模塊106可以基于輸入到編輯器110中的消費(fèi)代碼創(chuàng)建一個(gè)或多個(gè)所推斷的符號108。編輯器110可以表示與后臺編譯器116相關(guān)聯(lián)的源代碼編輯器,其中后臺編譯器116在用戶輸入源代碼時(shí)生成實(shí)符號的句法樹、語義樹或符號表。根據(jù)在此公開主題的各方面,用于從代碼使用中創(chuàng)建所推斷的符號的模塊106可以基于輸入到編輯器110中的代碼向由編譯器116所創(chuàng)建的實(shí)符號的句法樹、語義樹或符號表添加或修改一個(gè)或多個(gè)所推斷的符號108。此外,用于從代碼使用中創(chuàng)建所推斷的符號的模塊106可以基于所推斷的符號生成源代碼,如將在下面予以更充分描述。對實(shí)符號114進(jìn)行操作的工具112可以被設(shè)置為附加地或替代地對所推斷的符號108進(jìn)行操作。用于從代碼使用中創(chuàng)建所推斷的符號的模塊106可以包括或并入下列各項(xiàng)中的一個(gè)或多個(gè)編譯器,比如后臺編譯器、并行編譯器或增量編譯器;解析器,比如后臺解析器、并行解析器或增量解析器;或者插件、預(yù)處理器、或附件;或者對IDE、解析器、編譯器或預(yù)處理器的擴(kuò)展。用于從代碼使用中創(chuàng)建所推斷的符號的模塊106可以與下列各項(xiàng)分開或相關(guān)聯(lián)編譯器,比如后臺編譯器、并行編譯器或增量編譯器;解析器,比如后臺解析器、并行解析器或增量解析器;或者插件、預(yù)處理器、或附件;或者對IDE、解析器、編譯器或預(yù)處理器的擴(kuò)展。用于從代碼使用中創(chuàng)建所推斷的符號的模塊106可以與程序開發(fā)工具相關(guān)聯(lián)、并入程序開發(fā)工具或者與程序開發(fā)工具分開,所述程序開發(fā)工具包括、但不限于完成列表、調(diào)用分層結(jié)構(gòu)、引用列表、對象瀏覽器、類視圖、尋找引用和/或?qū)Ш焦ぞ?。用于從代碼使用中創(chuàng)建所推斷的符號的模塊106可以將一個(gè)或多個(gè)所推斷的符號轉(zhuǎn)換成符號表、句法樹或語義樹中的實(shí)符號。編輯器110可以是后臺編譯器所支持的源代碼編輯器,其中后臺編譯器在開發(fā)者
或用戶編寫源代碼時(shí)生成語義和/或句法樹。例如,假定用戶編寫下列內(nèi)容
權(quán)利要求
1.一種系統(tǒng),包括 處理器和存儲器,所述存儲器包括被配置為致使所述處理器執(zhí)行下列動作的模塊 在程序開發(fā)期間創(chuàng)建數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)包括由所述模塊生成的至少ー個(gè)所推斷的符號,其中所述至少ー個(gè)所推斷的符號是基于存在于輸入到源代碼編輯器中的源代碼中的消費(fèi)代碼而創(chuàng)建的,所述至少ー個(gè)所推斷的符號表示被所述消費(fèi)代碼消費(fèi)的代碼,其中被消費(fèi)代碼未存在于所述源代碼中。
2.如權(quán)利要求I所述的系統(tǒng),其特征在于,所述至少ー個(gè)所推斷的符號是在測試驅(qū)動的開發(fā)環(huán)境中或者在動態(tài)編程環(huán)境中基于將ー組規(guī)則應(yīng)用到未定義的符號而創(chuàng)建的。
3.如權(quán)利要求I所述的系統(tǒng),其特征在于,所述至少ー個(gè)所推斷的符號被轉(zhuǎn)換成所述數(shù)據(jù)結(jié)構(gòu)中的實(shí)際符號。
4.如權(quán)利要求I所述的系統(tǒng),其特征在干,將所述至少ー個(gè)所推斷的符號轉(zhuǎn)換成實(shí)符號觸發(fā)了自動的、編譯器生成的對定義所述至少ー個(gè)所推斷的符號的源代碼的添加,其中定義所述至少ー個(gè)所推斷的符號的源代碼在所述源代碼編輯器中被添加到所述源代碼。
5.如權(quán)利要求I所述的系統(tǒng),其特征在于,所述編程環(huán)境中的軟件開發(fā)工具在程序開發(fā)期間響應(yīng)于顯示與所述至少ー個(gè)所推斷的符號相關(guān)聯(lián)的信息的選項(xiàng)的用戶選擇而顯示與所述至少ー個(gè)所推斷的符號相關(guān)聯(lián)的開發(fā)者幫助信息。
6.ー種方法,包括 創(chuàng)建表示源代碼的實(shí)符號的數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)由后臺編譯器在交互式程序開發(fā)期間生成,其中在軟件開發(fā)計(jì)算機(jī)上執(zhí)行的模塊將至少ー個(gè)所推斷的符號添加到所述數(shù)據(jù)結(jié)構(gòu),其中所述至少ー個(gè)所推斷的符號基于輸入到源代碼編輯器中的源代碼,其中所述至少ー個(gè)所推斷的符號是基于未定義的符號在所述源代碼中的使用從所述源代碼中推斷的。
7.如權(quán)利要求6所述的方法,其特征在于,所述數(shù)據(jù)結(jié)構(gòu)是句法樹、語義樹或符號表。
8.如權(quán)利要求6所述的方法,其特征在于,還包括 響應(yīng)于編程環(huán)境中的選項(xiàng)的激活,在所述編程環(huán)境中的軟件開發(fā)工具中顯示與所述至少ー個(gè)所推斷的符號相關(guān)聯(lián)的信息,其中所述編程環(huán)境包括測試驅(qū)動的開發(fā)環(huán)境或者動態(tài)編程開發(fā)環(huán)境。
9.如權(quán)利要求6所述的方法,其特征在干, 編譯器生成的代碼被添加到定義所述未定義的符號的源代碼中。
10.如權(quán)利要求6所述的方法,其特征在于,還包括 響應(yīng)于從用戶接收到將所述至少ー個(gè)所推斷的符號轉(zhuǎn)換成實(shí)符號的指示,將所述至少ー個(gè)所推斷的符號轉(zhuǎn)換成實(shí)符號。
11.ー種包括當(dāng)執(zhí)行時(shí)使至少ー個(gè)處理器執(zhí)行下列操作的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀存儲介質(zhì) 創(chuàng)建表示源代碼的數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)由后臺編譯器生成,其中至少ー個(gè)所推斷的符號基于輸入到源代碼編輯器中的源代碼被添加到所述數(shù)據(jù)結(jié)構(gòu),其中所述至少ー個(gè)所推斷的符號是在沒有所述符號的在先定義的情況下基于符號的使用從所述源代碼中推斷的。
12.如權(quán)利要求11所述的計(jì)算機(jī)可讀存儲介質(zhì),其特征在干,進(jìn)ー步包括當(dāng)執(zhí)行時(shí)使所述至少一個(gè)處理器執(zhí)行下列操作的計(jì)算機(jī)可執(zhí)行指令響應(yīng)于從用戶接收到將所述至少ー個(gè)所推斷的符號轉(zhuǎn)換成實(shí)符號的指示,將所述至少ー個(gè)所推斷的符號轉(zhuǎn)換成實(shí)符號。
13.如權(quán)利要求11所述的計(jì)算機(jī)可讀存儲介質(zhì),其特征在干,進(jìn)ー步包括當(dāng)執(zhí)行時(shí)使所述至少一個(gè)處理器執(zhí)行下列操作的計(jì)算機(jī)可執(zhí)行指令 基于所述至少ー個(gè)所推斷的符號將定義所述至少ー個(gè)所推斷的符號的、編譯器生成的代碼自動添加到所述源代碼。
14.如權(quán)利要求11所述的計(jì)算機(jī)可讀存儲介質(zhì),其特征在干,進(jìn)ー步包括當(dāng)執(zhí)行時(shí)使所述至少一個(gè)處理器執(zhí)行下列操作的計(jì)算機(jī)可執(zhí)行指令 響應(yīng)于編程環(huán)境中的選項(xiàng)的激活,在軟件開發(fā)工具中顯示與所述至少ー個(gè)所推斷的符號相關(guān)聯(lián)的信息。
15.如權(quán)利要求11所述的計(jì)算機(jī)可讀存儲介質(zhì),其特征在干,進(jìn)ー步包括當(dāng)執(zhí)行時(shí)使所述至少一個(gè)處理器執(zhí)行下列操作的計(jì)算機(jī)可執(zhí)行指令 創(chuàng)建包括語義或句法樹的數(shù)據(jù)結(jié)構(gòu),所述語義或句法樹包括至少ー個(gè)所推斷的節(jié)點(diǎn);或者創(chuàng)建包括符號表的數(shù)據(jù)結(jié)構(gòu),所述符號表包括至少ー個(gè)所推斷的符號。
全文摘要
在編寫代碼時(shí),基于未定義的符號的使用創(chuàng)建包括所推斷的符號的數(shù)據(jù)結(jié)構(gòu)。隨著用戶繼續(xù)編寫代碼,可以基于學(xué)習(xí)模型更新代碼模型以表示經(jīng)更新的信息。包括所推斷的符號的數(shù)據(jù)結(jié)構(gòu)可以被軟件開發(fā)工具用于為還未創(chuàng)建或還未綁定的符號提供開發(fā)者幫助。可以視覺上區(qū)分所推斷的符號,從而使所推斷的符號信息的外觀不同于實(shí)際符號信息?;谒茢嗟姆柕男畔⒌耐庥^可以通過激活編程環(huán)境中的特定模式而包括在工具內(nèi)。將所推斷的符號轉(zhuǎn)換成實(shí)符號可以觸發(fā)后臺編譯器進(jìn)行的附加源代碼的自動編譯器生成。所推斷的符號可以通過激活使所推斷的符號成為實(shí)符號的選項(xiàng)被轉(zhuǎn)換成實(shí)際符號。
文檔編號G06F9/30GK102696012SQ201080060704
公開日2012年9月26日 申請日期2010年12月31日 優(yōu)先權(quán)日2010年1月6日
發(fā)明者K·皮爾希-比森, 劉凱玲 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
福建省| 内黄县| 都兰县| 锡林郭勒盟| 宁津县| 塔河县| 韶山市| 工布江达县| 长顺县| 涿州市| 安仁县| 兴国县| 枣阳市| 黑龙江省| 六枝特区| 东至县| 秦安县| 靖安县| 东莞市| 柳林县| 彭水| 冷水江市| 南部县| 西贡区| 朔州市| 汤原县| 民县| 延川县| 曲水县| 泸定县| 武夷山市| 福建省| 邵阳县| 哈密市| 高要市| 亚东县| 大冶市| 方山县| 县级市| 崇州市| 贵州省|