国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      動(dòng)態(tài)類型化的編程語(yǔ)言中的屬性訪問(wèn)的制作方法

      文檔序號(hào):10475872閱讀:329來(lái)源:國(guó)知局
      動(dòng)態(tài)類型化的編程語(yǔ)言中的屬性訪問(wèn)的制作方法
      【專利摘要】代碼生成器可發(fā)出用于在動(dòng)態(tài)類型化的編程語(yǔ)言中促進(jìn)類型安全性的情況下訪問(wèn)對(duì)象的屬性的直接訪問(wèn)代碼。直接訪問(wèn)代碼使用被硬編碼到對(duì)象的存儲(chǔ)器區(qū)域內(nèi)的偏移來(lái)訪問(wèn)屬性的值。在一些情況下,直接訪問(wèn)代碼在防護(hù)包括至少一個(gè)在先序列成員在內(nèi)的屬性訪問(wèn)序列的單個(gè)類型檢查后訪問(wèn)該值。在一些情況下,類型檢查代碼將對(duì)象的類型與等同類型高速緩存的指定的防護(hù)類型進(jìn)行比較。可通過(guò)使用與等同類型高速緩存相關(guān)聯(lián)的屬性等同性記錄來(lái)檢查對(duì)象類型與等同類型高速緩存中的類型的因?qū)傩远惖脑L問(wèn)等同性。當(dāng)類型關(guān)于一屬性不是訪問(wèn)等同的時(shí),通過(guò)發(fā)出用于訪問(wèn)該屬性的非直接訪問(wèn)代碼來(lái)保持類型安全性。
      【專利說(shuō)明】動(dòng)態(tài)類型化的編程語(yǔ)言中的屬性訪問(wèn)
      [000。 背景
      [0002] 計(jì)算硬件通常不基于位(一和零)旨在對(duì)人們的含義來(lái)在位之間進(jìn)行區(qū)分。在計(jì)算 系統(tǒng)中,通常出現(xiàn)的是,在字符串、整數(shù)值、列表、表、層級(jí)、數(shù)據(jù)結(jié)構(gòu)片段、代碼序列和其他 數(shù)據(jù)要被移動(dòng)或W其它方式被操縱時(shí),運(yùn)些操縱中的每個(gè)使用相同的基礎(chǔ)低級(jí)硬件來(lái)完 成,而不管數(shù)據(jù)所預(yù)期的含義。即使在要被處理器執(zhí)行的位與不要被處理器執(zhí)行的位之間 的區(qū)別是由人和人的工具創(chuàng)建的區(qū)別的情況下。位的含義W及位移動(dòng)和位操縱的實(shí)際影響 最終都取決于人類解釋。分配位在智能電話、平板、膝上型電腦、網(wǎng)絡(luò)和其他系統(tǒng)中的最終 含義的是開(kāi)發(fā)者和其他人員。
      [0003] 開(kāi)發(fā)者將含義分配到位的一種方式是使用編程語(yǔ)言來(lái)定義軟件內(nèi)容和行為。編程 語(yǔ)言的幫助在軟件中文檔化并實(shí)現(xiàn)特定含義的一個(gè)方面一般被知曉為"類型化"。類型化也 被稱為使用短語(yǔ)"類型系統(tǒng)"和"數(shù)據(jù)類型"等。通過(guò)將數(shù)據(jù)類型與變量、常量、例程、接口 W 及程序中的其他構(gòu)造或人工產(chǎn)物相關(guān)聯(lián),軟件開(kāi)發(fā)者將含義添加到底層的位。在沒(méi)有添加 的含義的情況下,程序位僅僅是一和零的序列。
      [0004] 概述
      [0005] -些實(shí)施例或示例在在動(dòng)態(tài)類型化的編程語(yǔ)言中促進(jìn)類型安全性的指定條件下 發(fā)出針對(duì)屬性訪問(wèn)的直接訪問(wèn)代碼來(lái)訪問(wèn)對(duì)象的屬性。在一些情況下,直接訪問(wèn)代碼在執(zhí) 行之際訪問(wèn)被定位在對(duì)象的存儲(chǔ)器區(qū)域中被硬編碼的偏移處的屬性的值。在一些情況下, 直接訪問(wèn)代碼在執(zhí)行之際在防護(hù)屬性訪問(wèn)序列的單個(gè)類型檢查之后訪問(wèn)該值。在一些情況 下,類型檢查代碼將對(duì)象類型與等同類型高速緩存的指定的防護(hù)類型進(jìn)行比較。在一些情 況下,代碼通過(guò)使用與等同類型高速緩存相關(guān)聯(lián)的屬性等同性記錄來(lái)確定對(duì)象類型是否針 對(duì)所訪問(wèn)的屬性與等同類型高速緩存中的類型等同。
      [0006] 所給出的示例只是說(shuō)明性的。本
      【發(fā)明內(nèi)容】
      并不旨在標(biāo)識(shí)所要求保護(hù)主題的關(guān)鍵特 征或必要特征,也不旨在用于限制所要求保護(hù)主題的范圍。相反地,提供本
      【發(fā)明內(nèi)容】
      是為了 W簡(jiǎn)化的形式介紹將在W下【具體實(shí)施方式】中進(jìn)一步描述的一些技術(shù)概念。本發(fā)明由權(quán)利要 求書(shū)限定,在本
      【發(fā)明內(nèi)容】
      與權(quán)利要求書(shū)有沖突的情況下,應(yīng)該W權(quán)利要求書(shū)為準(zhǔn)。
      [0007] 附圖簡(jiǎn)述
      [000引將參考附圖給出更具體的描述。運(yùn)些附圖只示出了選定的方面,且因此不完全確 定任一示例的覆蓋或范圍。
      [0009] 圖1是示出包括至少一個(gè)處理器W及至少一個(gè)存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)W及示出操作 環(huán)境中可擴(kuò)展超過(guò)多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)的項(xiàng)并還示出一些經(jīng)配置的存儲(chǔ)介質(zhì)的各方面的框圖,其 中至少一個(gè)處理器和至少一個(gè)存儲(chǔ)器在用于構(gòu)建應(yīng)用的可執(zhí)行版本的軟件的控制下和/或 在可執(zhí)行應(yīng)用軟件的控制下相互交互;
      [0010] 圖2是進(jìn)一步示出對(duì)象屬性訪問(wèn)代碼生成的各方面W及一些體系結(jié)構(gòu)中的對(duì)象實(shí) 現(xiàn)的各方面的框圖;
      [0011] 圖3是示出在屬性訪問(wèn)的生成和/或執(zhí)行中的一些過(guò)程的各步驟和一些經(jīng)配置的 存儲(chǔ)介質(zhì)的流程圖;
      [0012] 圖4是示出用于實(shí)現(xiàn)對(duì)對(duì)象字段(也稱為對(duì)象屬性)的訪問(wèn)的靜態(tài)編譯的各方面的 圖;
      [0013] 圖5是示出單形態(tài)例程調(diào)用站的各方面的圖;
      [0014] 圖6是示出多形態(tài)內(nèi)聯(lián)高速緩存(也稱為PIC)的各方面的圖;
      [0015] 圖7是示出多形態(tài)例程調(diào)用站的各方面的圖;
      [0016] 圖8是示出對(duì)象、對(duì)象類型W及對(duì)象類型布局和對(duì)象屬性訪問(wèn)等同性或缺乏對(duì)象 屬性訪問(wèn)等同性的各方面的圖;
      [0017] 圖9是示出針對(duì)對(duì)象屬性訪問(wèn)優(yōu)化的體系結(jié)構(gòu)的各方面的數(shù)據(jù)流圖;
      [0018] 圖10是示出等同類型高速緩存(也稱為ETC)的各方面的圖;
      [0019]圖11是示出屬性等同性記錄(也稱為陽(yáng)R)的各方面的圖;
      [0020] 圖12是示出使用等同類型高速緩存來(lái)幫助優(yōu)化對(duì)象屬性訪問(wèn)的所發(fā)出的可執(zhí)行 代碼的行為和結(jié)構(gòu)方面的數(shù)據(jù)流圖;
      [0021] 圖13是示出使用經(jīng)高速緩存的單形態(tài)屬性訪問(wèn)簡(jiǎn)檔數(shù)據(jù)來(lái)幫助優(yōu)化屬性訪問(wèn)的 可執(zhí)行代碼生成的行為和結(jié)構(gòu)方面的數(shù)據(jù)流圖;
      [0022] 圖14是示出多形態(tài)屬性訪問(wèn)簡(jiǎn)檔數(shù)據(jù)收集和使用的行為和結(jié)構(gòu)方面的數(shù)據(jù)流圖; W及
      [0023] 圖15是示出具有對(duì)等同類型高速緩存W及多形態(tài)屬性訪問(wèn)簡(jiǎn)檔數(shù)據(jù)的訪問(wèn)W提 供更加優(yōu)化的屬性訪問(wèn)的可執(zhí)行代碼生成過(guò)程的行為和結(jié)構(gòu)方面的數(shù)據(jù)流圖。
      [0024] 詳細(xì)描述
      [00巧]首字母縮略詞
      [0026] -些首字母縮略詞在W下被定義,但是其他首字母縮略詞可在本文中的其他地方 定義或不要求被本領(lǐng)域技術(shù)人員理解的定義。
      [0027] ALU:算術(shù)與邏輯單元
      [002引 A0T:提前
      [0029] API:應(yīng)用程序接口
      [0030] CD:壓縮光盤
      [00川 CPU:中央處理單元
      [0032] DVD:數(shù)字多用盤或數(shù)字視頻光盤
      [0033] ECMA:歐洲計(jì)算機(jī)制造商協(xié)會(huì),現(xiàn)在是國(guó)際Ecma
      [0034] ETC:等同類型高速緩存
      [0035] FPGA:現(xiàn)場(chǎng)可編程口陣列
      [0036] FPU:浮點(diǎn)處理單元
      [0037] GPU:圖形處理單元
      [0038] GUI:圖形用戶界面
      [0039] IDE:集成開(kāi)發(fā)環(huán)境,有時(shí)也稱為"交互式開(kāi)發(fā)環(huán)境"
      [0040] ΙοΤ:物聯(lián)網(wǎng)
      [0041 ] IS0/IEC:國(guó)際標(biāo)準(zhǔn)化組織/國(guó)際電工委員會(huì)
      [0042] JIT:即時(shí)
      [00創(chuàng)陽(yáng)R:屬性等同性記錄
      [0044] PIC:多形態(tài)內(nèi)聯(lián)高速緩存
      [0045] RAM:隨機(jī)存取存儲(chǔ)器
      [0046] ROM:只讀存儲(chǔ)器
      [0047] 概覽
      [0048] 在本文中描述的某些情況下,代碼生成器可減少被生成來(lái)訪問(wèn)動(dòng)態(tài)類型化的編程 語(yǔ)言中某一對(duì)象的屬性的指令的數(shù)量。運(yùn)種減少具有相應(yīng)的效果,諸如針對(duì)所生成的代碼 的降低的執(zhí)行時(shí)間W及更小的所生成的代碼,其進(jìn)而減少處理器負(fù)載、功率使用W及代碼 存儲(chǔ)要求。動(dòng)態(tài)類型化的編程語(yǔ)言的示例有許多并且一般對(duì)本領(lǐng)域技術(shù)人員而言是熟悉 的。也許當(dāng)今最廣泛使用的示例是被用在web瀏覽器和其他地方中的化vaScript語(yǔ)言;其是 在ECMA-262規(guī)范和IS0/IEC 16262中被標(biāo)準(zhǔn)化的ECMAScript化CMA腳本)語(yǔ)言的一個(gè)實(shí)現(xiàn)。
      [0049] 本領(lǐng)域的技術(shù)人員意識(shí)到在有效地訪問(wèn)(加載和存儲(chǔ))用動(dòng)態(tài)類型化的語(yǔ)言撰寫(xiě) 的程序中的屬性方面存在挑戰(zhàn)。JavaScript的執(zhí)行性能受到重視,例如作為web瀏覽器供應(yīng) 商之間競(jìng)爭(zhēng)的一部分。
      [0050] 產(chǎn)生在生成高效屬性訪問(wèn)代碼方面的挑戰(zhàn),因?yàn)閯?dòng)態(tài)類型化的程序中的對(duì)象缺乏 靜態(tài)(在編譯時(shí))已知的結(jié)構(gòu)(布局)。靜態(tài)布局允許編譯器發(fā)出簡(jiǎn)明的處理器指令來(lái)用于從 對(duì)象的存儲(chǔ)器中加載屬性值偏移/將屬性值偏移存儲(chǔ)到對(duì)象的存儲(chǔ)器中。如圖4中示出的, 針對(duì)一些程序的元數(shù)據(jù)402包括針對(duì)靜態(tài)已知結(jié)構(gòu)的類型布局信息,并且具體而言包括字 段偏移406,字段偏移406的值在程序運(yùn)行之前在編譯時(shí)是固定的Γ字段"和"屬性"在本文 中互換地使用)。在運(yùn)些情況下,編譯器可生成直接將偏移作為特定常量數(shù)值來(lái)包括的代碼 408,而非生成指令來(lái)在之后在所生成的程序代碼運(yùn)行的同時(shí)計(jì)算偏移。在編譯時(shí)作為常量 被內(nèi)嵌在所生成的代碼中的偏移和其他值被稱為"硬編碼"。
      [0051] 當(dāng)偏移不是被硬編碼時(shí),屬性的值在對(duì)象的存儲(chǔ)器中的位置必須在每次該值將被 訪問(wèn)時(shí)在運(yùn)行時(shí)被確定。運(yùn)種屬性訪問(wèn)的稚拙實(shí)現(xiàn)導(dǎo)致不可接受的開(kāi)銷,例如在基準(zhǔn)測(cè)試 或消費(fèi)者產(chǎn)品中的執(zhí)行速度跌倒競(jìng)爭(zhēng)者水平之下。因此,已經(jīng)采用了各種技術(shù)來(lái)加速屬性 訪問(wèn)。運(yùn)些技術(shù)在本文中一般稱為"優(yōu)化",應(yīng)當(dāng)理解,優(yōu)化不必是最佳的可能方式一其而是 改進(jìn)某個(gè)可測(cè)量技術(shù)特征的方式,例如,優(yōu)化是降低執(zhí)行時(shí)間、減少代碼大小、提高可靠性、 改進(jìn)安全性和/或?qū)δ硞€(gè)其他有益技術(shù)效果進(jìn)行貢獻(xiàn)的方式。
      [0052] 如果給定函數(shù)每次僅對(duì)一個(gè)且相同的對(duì)象進(jìn)行操作,則該對(duì)象中屬性的值的位置 (偏移)可在第一次訪問(wèn)時(shí)被高速緩存。在后續(xù)訪問(wèn)上,對(duì)屬性的位置的計(jì)算可通過(guò)從高速 緩存中取得偏移來(lái)使用簡(jiǎn)單查找(其使得代碼更快速)。運(yùn)種方式可被擴(kuò)展到共享相同布局 的多個(gè)對(duì)象。如果所有對(duì)象都標(biāo)記有它們的布局ID(類型),則該類型可在第一訪問(wèn)上被存 儲(chǔ)在高速緩存中,并且在后續(xù)訪問(wèn)上,經(jīng)高速緩存的偏移可被使用。只要當(dāng)前對(duì)象的類型匹 配被存儲(chǔ)在高速緩存中的類型,運(yùn)種方式就是安全的;運(yùn)稱為"單形態(tài)屬性訪問(wèn)"。在運(yùn)個(gè)上 下文中,"安全"意味著由針對(duì)屬性訪問(wèn)的可執(zhí)行代碼訪問(wèn)的位將是可預(yù)測(cè)的并且將實(shí)際上 是開(kāi)發(fā)者想要訪問(wèn)的位。換言之,如果執(zhí)行產(chǎn)生與本領(lǐng)域的技術(shù)人員通過(guò)正確地手動(dòng)模擬 源代碼的執(zhí)行所獲得(盡管要慢的多且麻煩的多)的計(jì)算結(jié)果相同的計(jì)算結(jié)果,則從程序源 代碼中生成的可執(zhí)行代碼在運(yùn)個(gè)方面是"安全的"。
      [0053] 圖5示出其中被訪問(wèn)的屬性在例程502中的特殊情況。類型防護(hù)504在運(yùn)行時(shí)檢查 對(duì)象的類型W確定該對(duì)象的類型是否與先前經(jīng)高速緩存的類型相同。如果類型不匹配,貝U 執(zhí)行相對(duì)昂貴的查找計(jì)算來(lái)找到正確例程主體的偏移。但是,如果當(dāng)前對(duì)象的類型匹配先 前經(jīng)高速緩存的類型,則控制傳遞到例程的主體506,即被調(diào)用的屬性的主體。
      [0054] 當(dāng)所設(shè)及的對(duì)象不共享單個(gè)布局時(shí),單形態(tài)訪問(wèn)方式不是安全的。有時(shí)多形態(tài)方 式是可行的。圖7示出用于例程調(diào)用的多形態(tài)方式。多形態(tài)存根702針對(duì)已知(先前遇到的) 類型的短列表來(lái)測(cè)試當(dāng)前對(duì)象的類型,并在找到匹配時(shí),將控制傳輸?shù)綄?duì)應(yīng)的位置,或在沒(méi) 有找到匹配的情況下將控制傳輸?shù)讲檎矣?jì)算。關(guān)于對(duì)象屬性訪問(wèn),高速緩存可被使用來(lái)存 儲(chǔ)類型集和對(duì)應(yīng)的偏移,其中正在考慮的屬性的值被存儲(chǔ)在所遇到的每個(gè)類型布局的對(duì)象 上。運(yùn)樣的高速緩存實(shí)現(xiàn)針對(duì)相對(duì)小數(shù)量的布局的多形態(tài)屬性訪問(wèn),因?yàn)楦咚倬彺娴拇_添 加了程序存儲(chǔ)要求。通過(guò)例如使用兩個(gè)、四個(gè)或八個(gè)條目的高速緩存,可產(chǎn)生可接受的執(zhí)行 加速,而也不增加可接受限制之外的存儲(chǔ)器占用??山邮苄匀Q于開(kāi)發(fā)者和環(huán)境,但是在許 多開(kāi)發(fā)環(huán)境中,可能組合的數(shù)量足夠小來(lái)使得它們相應(yīng)的技術(shù)影響的比較成為可能。
      [0055] 多形態(tài)或單形態(tài)高速緩存可實(shí)質(zhì)上加速屬性訪問(wèn),但是高速緩存依然帶來(lái)了針對(duì) 每個(gè)個(gè)別屬性訪問(wèn)來(lái)針對(duì)存儲(chǔ)在高速緩存中的類型檢查對(duì)象的類型的開(kāi)銷。
      [0056] 現(xiàn)在考慮樣本源代碼,諸如W下:
      [0化7]
      [005引在運(yùn)個(gè)示例源代碼中,如在某些其他源代碼片段中,函數(shù)中的屬性訪問(wèn)序列設(shè)及 相同對(duì)象。該對(duì)象可W是例如局部變量或輸入?yún)?shù)。在運(yùn)樣的情況下,屬性訪問(wèn)代碼可通過(guò) 將類型檢查的數(shù)量減少到在該序列的開(kāi)始處執(zhí)行的單個(gè)檢查來(lái)被進(jìn)一步優(yōu)化。如果編譯器 可確定在編譯期間所訪問(wèn)的對(duì)象的類型在訪問(wèn)的序列期間不能改變,則該優(yōu)化將是安全 的。如果所有屬性訪問(wèn)設(shè)及只有一個(gè)布局(類型)的對(duì)象(即,訪問(wèn)是單形態(tài)的),則將被找到 的序列中每個(gè)屬性所處的偏移可在JIT編譯時(shí)已知(例如,從內(nèi)聯(lián)高速緩存),并且編譯器可 出于速度的目的使用內(nèi)嵌的偏移常量來(lái)向?qū)?yīng)的地址發(fā)出直接存儲(chǔ)器加載或存儲(chǔ)指令來(lái) 代替非直接屬性訪問(wèn)代碼,該非直接屬性訪問(wèn)代碼可包括在對(duì)象類型屬性圖中定位屬性的 索引并且對(duì)于發(fā)出和執(zhí)行而言更加昂貴。此外,針對(duì)屬性訪問(wèn)序列的單個(gè)運(yùn)行時(shí)檢查的開(kāi) 銷可被遍布在潛在大量的屬性訪問(wèn)上,從而使得它們中的每一個(gè)平均上更快。運(yùn)種優(yōu)化可 被成為"對(duì)象類型??诨?。
      [0059] 然而,如果該序列中的屬性訪問(wèn)設(shè)及不同布局的對(duì)象,則到不同布局的對(duì)象上被 相同命名的屬性的偏移可W是不同的。在運(yùn)些多形態(tài)情況中,正確的屬性偏移在JIT編譯期 間一般不是已知的,因?yàn)轭愋捅粍?dòng)態(tài)地選擇并且不同的類型具有不同的布局。由此,偏移不 能被直接內(nèi)嵌在被JIT編譯的代碼中,即使對(duì)象的類型在該序列的開(kāi)始處被驗(yàn)證。運(yùn)導(dǎo)致對(duì) 于一般多形態(tài)屬性訪問(wèn)序列而言對(duì)象類型專口化是不實(shí)際的。
      [0060] 然而,如本文中教導(dǎo)的,針對(duì)運(yùn)種序列的子集,依然可實(shí)現(xiàn)優(yōu)化。即使不同的類型 具有不同的布局,但是在一些情況下,根據(jù)一個(gè)類型的給定屬性的偏移將匹配另一類型的 被對(duì)應(yīng)命名的屬性的偏移。即,即使多個(gè)對(duì)象不共享相同的布局,但是它們可共享該布局的 一部分,使得一些屬性可在兩個(gè)對(duì)象上的對(duì)應(yīng)偏移處被找到,即使運(yùn)不是對(duì)于所有屬性都 是真的。例如,對(duì)象〇a= {a,b,c,d,e,f,g}和對(duì)象ob={x,b,c,d,f,g}具有不同的類型,但是 它們的屬性b、c和d可在相同的槽上被找到(分別是槽1、2和3),而屬性a、e、f、g和X則不能。 注意,運(yùn)個(gè)示例中的屬性的公共子集不是對(duì)象上的第一屬性;運(yùn)些布局不具有共享的前綴。 由此,對(duì)象oa的類型ta和對(duì)象ob的類型tb針對(duì)屬性b、c和d是偏移等同的,而是不針對(duì)所有 列出的其他屬性偏移等同。偏移等同性是訪問(wèn)等同性的一種形式,區(qū)別在于訪問(wèn)等同性不 僅僅考慮偏移,還考慮屬性存儲(chǔ)的其他方面,諸如屬性是否是可寫(xiě)的W及它們是否具有相 同的對(duì)象原型。換言之,被相同命名的屬性可在兩個(gè)類型中具有相同的偏移,該兩個(gè)類型在 至少一個(gè)其他屬性方面相互不同。特殊情況是,當(dāng)在相同偏移處的兩個(gè)被相同命名的屬性 不是具有任一類型的第一屬性時(shí)。圖8顯示另一示例,其中等同屬性在注釋中使用屬性名稱 之間的"=="被調(diào)出,而非等同屬性在該注釋中使用屬性名稱之間的"<〉"被調(diào)出。注意,在 一些情況下,所設(shè)及的對(duì)象不具有多個(gè)屬性,但是優(yōu)化依然可應(yīng)用的并且可產(chǎn)生性能益處。
      [0061] 通過(guò)確定訪問(wèn)等同性何時(shí)存在一W及還確定訪問(wèn)等同性何時(shí)不存在一編譯器或 其他代碼生成引擎可跨屬性的在兩個(gè)或更多個(gè)不同類型中被相同命名的實(shí)例來(lái)優(yōu)化對(duì)該 屬性的訪問(wèn)??蓛?yōu)化各種情況。優(yōu)化可針對(duì)其類型布局具有共享前綴的對(duì)象來(lái)作出,但是共 享前綴不在每個(gè)情況下都需要。例如,在圖8中沒(méi)有共享前綴,因?yàn)椴季枝肠处宝┎?屬性A不等 同于布局TYP2槽0屬性P,即使A和P具有相同的偏移,運(yùn)是因?yàn)锳和P不是相同的屬性。除了偏 移之外,本文中的一些示例還通過(guò)確定屬性是否是局部的、屬性是否是可寫(xiě)的、屬性是否被 存儲(chǔ)在輔助槽中和/或?qū)傩允欠窬哂邢嗤膶?duì)象原型W針對(duì)等同性來(lái)檢查訪問(wèn)的其他方 面。運(yùn)些確定W及本文中相關(guān)的技術(shù)可統(tǒng)一地、個(gè)別地或在子集中被成為等同對(duì)象類型專 口化。
      [0062] 在等同對(duì)象類型專口化的一些示例中,編譯器發(fā)出用于在在動(dòng)態(tài)類型化的編程語(yǔ) 言中促進(jìn)類型安全性的情況下訪問(wèn)對(duì)象的屬性的直接訪問(wèn)代碼。直接訪問(wèn)代碼使用被硬編 碼到對(duì)象的存儲(chǔ)器區(qū)域內(nèi)的偏移來(lái)訪問(wèn)屬性的值。在一些情況下,直接訪問(wèn)代碼在防護(hù)包 括至少一個(gè)在先訪問(wèn)在內(nèi)的屬性訪問(wèn)序列的單個(gè)類型檢查后訪問(wèn)該值。在一些情況下,類 型檢查代碼將對(duì)象的類型與等同類型高速緩存的指定的防護(hù)類型進(jìn)行比較??赏ㄟ^(guò)使用與 等同類型高速緩存相關(guān)聯(lián)的屬性等同性記錄來(lái)檢查對(duì)象類型與等同類型高速緩存中的類 型的因?qū)傩远惖脑L問(wèn)等同性。當(dāng)類型關(guān)于一屬性不是訪問(wèn)等同的時(shí),通過(guò)發(fā)出用于訪問(wèn) 該屬性的非直接訪問(wèn)代碼來(lái)保持類型安全性。等同對(duì)象類型??诨稍试S針對(duì)其類型關(guān)于 被用在序列中的屬性訪問(wèn)等同的對(duì)象集,多形態(tài)屬性序列與單形態(tài)屬性序列一樣高效地被 執(zhí)行。
      [0063] 示例的性質(zhì)
      [0064] 此處描述的某些示例可W在較寬泛的上下文中查看。例如,諸如高速緩存、編譯、 動(dòng)態(tài)類型化、硬編碼、對(duì)象屬性、偏移、多形態(tài)、序列、類型檢查w及類型布局之類的概念可 與具體實(shí)施例相關(guān)。然而,并不能從寬泛上下文的可用性中得出此處對(duì)抽象概念尋求專有 權(quán);它們并不是專有的。相反,本發(fā)明聚焦于提供適當(dāng)具體的實(shí)施例,其技術(shù)效果完全或部 分地解決特定技術(shù)問(wèn)題并改進(jìn)計(jì)算機(jī)系統(tǒng)的功能。設(shè)及高速緩存、編譯、動(dòng)態(tài)類型化、硬編 碼、對(duì)象屬性、偏移、多形態(tài)、序列、類型檢查和/或類型布局的其他介質(zhì)、系統(tǒng)和方法在本范 圍之外。因此,在對(duì)本發(fā)明的正確理解下,也避免了模糊性、抽象性、缺少技術(shù)性和附帶的證 據(jù)問(wèn)題。
      [0065] 本文描述的實(shí)施例的技術(shù)特征對(duì)于本領(lǐng)域技術(shù)人員而言將顯而易見(jiàn),并且對(duì)于各 種關(guān)注的讀者而言也W各種方式顯而易見(jiàn)。第一,一些實(shí)施例解決技術(shù)問(wèn)題,諸如對(duì)類型檢 查動(dòng)態(tài)選擇的類型的執(zhí)行性能花費(fèi)、代碼優(yōu)化、類型等同性確定、單形態(tài)屬性訪問(wèn)機(jī)制的缺 點(diǎn)W及無(wú)論類型布局的改變而保存類型安全性和性能兩者。第二,一些實(shí)施例包括諸如計(jì) 算硬件等技術(shù)組件,運(yùn)些技術(shù)組件W除了通用計(jì)算機(jī)中的典型交互之外的方式與軟件交 互。例如,除了諸如一般的存儲(chǔ)器分配、一般的存儲(chǔ)器讀寫(xiě)、一般的指令執(zhí)行和某種I/O排序 等普通交互之外,本文描述的一些實(shí)施例還用單個(gè)初始類型檢查來(lái)防護(hù)對(duì)象屬性訪問(wèn)序 列。第Ξ,一些實(shí)施例所提供的技術(shù)效果包括在類型檢查數(shù)量方面的減少而沒(méi)有在類型安 全性方面的對(duì)應(yīng)減少、減少的可執(zhí)行代碼指令分段大小和/或增加的ECMAScript兼容語(yǔ)言 的執(zhí)行速度。第四,一些實(shí)施例包括技術(shù)適應(yīng),諸如等同類型高速緩存、屬性等同性記錄W 及使用屬性訪問(wèn)簡(jiǎn)檔數(shù)據(jù)來(lái)在直接和非直接訪問(wèn)代碼發(fā)出之間進(jìn)行選擇的代碼生成器。
      [0066] 此外,一些實(shí)施例設(shè)及提供對(duì)動(dòng)態(tài)類型化的編程語(yǔ)言中的對(duì)象的屬性的快速且類 型安全的訪問(wèn)的技術(shù)問(wèn)題。一些實(shí)施例設(shè)及標(biāo)識(shí)在整體具有不同布局的對(duì)象類型內(nèi)訪問(wèn)等 同的各個(gè)屬性的技術(shù)問(wèn)題。一些實(shí)施例設(shè)及跟蹤屬性訪問(wèn)序列的技術(shù)問(wèn)題,屬性訪問(wèn)序列 可通過(guò)減少類型檢查的同時(shí)沒(méi)有從而錯(cuò)認(rèn)哪個(gè)數(shù)據(jù)類型旨在針對(duì)被訪問(wèn)的位而被優(yōu)化。本 公開(kāi)的各示例中所設(shè)及的其他技術(shù)問(wèn)題對(duì)于本領(lǐng)域的技術(shù)人員而言也將是明顯的。
      [0067] 一些術(shù)語(yǔ)
      [0068] 現(xiàn)在將參考諸如附圖中所示出的那些示例性實(shí)施例,并使用特定語(yǔ)言來(lái)對(duì)其進(jìn)行 描述。但是,相關(guān)技術(shù)領(lǐng)域的且擁有本公開(kāi)內(nèi)容的技術(shù)人員將想到的對(duì)此處所示出的特征 的更改和進(jìn)一步的修改W及對(duì)此處的特定實(shí)施例所示的抽象原理的其他技術(shù)應(yīng)用,都應(yīng)該 被視為在權(quán)利要求的范圍內(nèi)。
      [0069] 在本公開(kāi)中闡明了各術(shù)語(yǔ)的含義,因此應(yīng)該在仔細(xì)關(guān)注運(yùn)些闡明的情況下閱讀權(quán) 利要求書(shū)。給出了具體示例,但是相關(guān)領(lǐng)域的技術(shù)人員將理解其他示例也可落在所使用的 術(shù)語(yǔ)的含義范圍內(nèi)W及落在一個(gè)或多個(gè)權(quán)利要求的范圍內(nèi)。各術(shù)語(yǔ)不一定需要具有與它們 在一般使用中(尤其在非技術(shù)使用中)或在特定行業(yè)使用中、或在特定字典或一組字典的使 用中所具有的意義相同的意義。附圖標(biāo)記可W與各種措詞一起使用,W幫助示出術(shù)語(yǔ)的廣 度。從給定文本片段中省略附圖標(biāo)記不一定意味著沒(méi)有通過(guò)文本討論附圖的內(nèi)容。
      【發(fā)明人】 維護(hù)和行使對(duì)于他們自己的辭典編纂的權(quán)利,包括將語(yǔ)言從本文中的其他位置復(fù)制到權(quán)利 要求書(shū)中的權(quán)利。所引用的術(shù)語(yǔ)被顯式定義,但在隱式定義術(shù)語(yǔ)時(shí)不使用引用標(biāo)記。運(yùn)里可 在【具體實(shí)施方式】中和/或在申請(qǐng)文件的別處顯式地或隱式地定義術(shù)語(yǔ)。
      [0070] 如此處所使用的,"計(jì)算機(jī)系統(tǒng)"可包括例如一個(gè)或多個(gè)服務(wù)器、主板、處理節(jié)點(diǎn)、 個(gè)人計(jì)算機(jī)(便攜式或非便攜式)、個(gè)人數(shù)字助理、智能電話、蜂窩或移動(dòng)電話、至少具有處 理器和存儲(chǔ)器的其他移動(dòng)設(shè)備、和/或提供至少部分地由指令來(lái)控制的一個(gè)或多個(gè)處理器 的其他設(shè)備。指令可W采用存儲(chǔ)器中的固件或其他軟件和/或?qū)S秒娐返男问?。具體而言, 雖然可發(fā)生許多實(shí)施例在工作站或膝上型計(jì)算機(jī)上運(yùn)行,但是其他實(shí)施例也可W在其他計(jì) 算設(shè)備上運(yùn)行,并且任何一個(gè)或多個(gè)運(yùn)樣的設(shè)備都可W是給定實(shí)施例的一部分。
      [0071] "多線程化"計(jì)算機(jī)系統(tǒng)是支持多個(gè)執(zhí)行線程的計(jì)算機(jī)系統(tǒng)。術(shù)語(yǔ)"線程"應(yīng)被理解 為包括能夠或經(jīng)歷調(diào)度及可能同步)的任何代碼,并且也可W另一名稱來(lái)為人所知,如 "任務(wù)"、"進(jìn)程"或"協(xié)同例程"等。線程可W并行地、按順序、或W并行執(zhí)行(例如,多處理)和 順序執(zhí)行(例如,時(shí)間分片)的組合來(lái)運(yùn)行。在各種配置中都已設(shè)計(jì)了多線程化環(huán)境。執(zhí)行線 程可W并行地運(yùn)行,或者線程可W被組織為并行執(zhí)行,但是實(shí)際上輪流按順序執(zhí)行。例如, 多線程化可W通過(guò)在多處理環(huán)境中在不同核上運(yùn)行不同線程、通過(guò)對(duì)單個(gè)處理器核上的不 同線程進(jìn)行時(shí)間分片、或者通過(guò)時(shí)間分片和多處理器線程化的某種組合來(lái)實(shí)現(xiàn)。線程上下 文切換可W例如由內(nèi)核的線程調(diào)度器、由用戶空間信號(hào)、或由用戶空間和內(nèi)核操作的組合 來(lái)發(fā)起。線程可W輪流對(duì)共享數(shù)據(jù)進(jìn)行操作,或者例如每一線程都可W對(duì)其自己的數(shù)據(jù)進(jìn) 行操作。
      [0072] "邏輯處理器"或"處理器"是單個(gè)獨(dú)立硬件線程處理單元,如同時(shí)多線程實(shí)現(xiàn)中的 核。作為另一示例,每核運(yùn)行兩個(gè)線程的超線程四核忍片具有8個(gè)邏輯處理器。邏輯處理器 包括硬件。術(shù)語(yǔ)"邏輯"被用來(lái)防止給定忍片具有至多一個(gè)處理器的錯(cuò)誤結(jié)論;"邏輯處理 器"和"處理器"在此可互換地使用。處理器可W是通用的,或者它們可被定制用于特定用 途,例如圖形處理、信號(hào)處理、浮點(diǎn)算術(shù)處理、加密、I/O處理等等。
      [0073] "多處理器"計(jì)算機(jī)系統(tǒng)是具有多個(gè)邏輯處理器的計(jì)算機(jī)系統(tǒng)。多處理器環(huán)境存在 于各種配置中。在一給定配置中,所有處理器可在功能上相同,而在另一配置中,由于具有 不同的硬件能力、不同的軟件分配或兩者,某些處理器可與其他處理器不同。取決于配置, 處理器可在單個(gè)總線上緊密地彼此禪合,或它們可松散地禪合。在某些配置中,處理器共享 一中央存儲(chǔ)器,在某些配置中,它們各自具有自己的本地存儲(chǔ)器,在某些配置中,存在共享 和本地存儲(chǔ)器兩者。
      [0074] "內(nèi)核"包括操作系統(tǒng)、系統(tǒng)管理程序、虛擬機(jī)、BIOS代碼、W及類似的硬件接口軟 件。
      [0075] "代碼"指的是處理器指令、數(shù)據(jù)(包括常量、變量、W及數(shù)據(jù)結(jié)構(gòu))、或指令和數(shù)據(jù) 兩者。
      [0076] "程序"在本文中被廣泛地使用W包括應(yīng)用、內(nèi)核、驅(qū)動(dòng)程序、中斷處理程序、庫(kù)、W 及程序員(也被成為開(kāi)發(fā)者)編寫(xiě)的其他代碼。
      [0077] "i〇r或"物聯(lián)網(wǎng)"指可尋址的內(nèi)嵌的計(jì)算節(jié)點(diǎn)的任意聯(lián)網(wǎng)集合。運(yùn)樣的節(jié)點(diǎn)是如 本文中定義的計(jì)算機(jī)系統(tǒng)的示例,但是它們還具有W下特征中的至少兩個(gè):(a)沒(méi)有本地人 類可讀顯示;(2)沒(méi)有本地鍵盤;(C)輸入的主要源是跟蹤非語(yǔ)言數(shù)據(jù)的源的傳感器;(d)沒(méi) 有本地轉(zhuǎn)動(dòng)盤存儲(chǔ)一RAM片或ROM片僅提供本地存儲(chǔ)器;(e)沒(méi)有CD或DVD驅(qū)動(dòng)器;(f)內(nèi)嵌在 家用電器中;(g)內(nèi)嵌在植入式醫(yī)療設(shè)備中;化)內(nèi)嵌在車輛中;(i)內(nèi)嵌在過(guò)程自動(dòng)化控制 系統(tǒng)中;或(j)聚焦于W下之一的設(shè)計(jì):環(huán)境監(jiān)視、市政基礎(chǔ)設(shè)施監(jiān)視、工業(yè)設(shè)備監(jiān)視、能源 使用監(jiān)視、人類或動(dòng)物健康監(jiān)視或物流運(yùn)輸監(jiān)視。
      [0078] 如此處所使用的"包括"允許附加元素(即,包括意味著包含),除非另外指明。 "由...構(gòu)服'意味著基本上由...構(gòu)成或完全由...構(gòu)成。當(dāng)X中的非Υ部分(如果有的話)可 W被自由更改、移除和/或添加而不在考慮所述權(quán)利要求時(shí)更改所要求保護(hù)的實(shí)施例的功 能時(shí),X基本上由Y構(gòu)成。
      [0079] "進(jìn)程"在此有時(shí)被用作計(jì)算科學(xué)領(lǐng)域的術(shù)語(yǔ),并且在該技術(shù)意義上涵蓋資源使用 者,即例如協(xié)同例程、線程、任務(wù)、中斷處理程序、應(yīng)用進(jìn)程、內(nèi)科進(jìn)程、過(guò)程和對(duì)象方法。"進(jìn) 程"在此還可被用作本領(lǐng)域的專利法術(shù)語(yǔ),例如,在描述與系統(tǒng)權(quán)利要求或制品(經(jīng)配置的 存儲(chǔ)介質(zhì)權(quán)利要求)相對(duì)的過(guò)程權(quán)利要求時(shí)。類似地,"方法"在此有時(shí)被用作計(jì)算科學(xué)領(lǐng)域 內(nèi)的技術(shù)術(shù)語(yǔ)(一種"例程")并且還被用作本領(lǐng)域的專利法術(shù)語(yǔ)Γ過(guò)程")。技術(shù)人員將理解 在特定實(shí)例中旨在是什么含義,并且還將理解給定所要求保護(hù)的過(guò)程或方法(在專利法的 意義上)有時(shí)可使用一個(gè)或多個(gè)過(guò)程或方法(在計(jì)算科學(xué)意義上)來(lái)實(shí)現(xiàn)。
      [0080] "自動(dòng)地"指的是使用自動(dòng)化(例如,由用于運(yùn)里所討論的特定操作和技術(shù)效果的 軟件配置的通用計(jì)算硬件),與沒(méi)有自動(dòng)化相對(duì)。具體而言,"自動(dòng)"執(zhí)行的步驟在理論上或 在一個(gè)人的意識(shí)中不是用手執(zhí)行的,但運(yùn)些步驟可由人類來(lái)啟動(dòng)或由人類來(lái)交互式地引 導(dǎo)。自動(dòng)化步驟使用機(jī)器執(zhí)行的W獲得在沒(méi)有由此提供的技術(shù)交互的情況下將不會(huì)實(shí)現(xiàn)的 一個(gè)或多個(gè)技術(shù)效果。
      [0081] 技術(shù)人員理解技術(shù)效果是技術(shù)實(shí)施例的假定目標(biāo)。僅僅是在一實(shí)施例中設(shè)及計(jì)算 并且運(yùn)些計(jì)算也可W在沒(méi)有技術(shù)組件(例如,通過(guò)紙和筆或甚至作為腦力步驟)的情況下執(zhí) 行的事實(shí)不會(huì)移除技術(shù)效果的存在或更改該實(shí)施例的具體且技術(shù)的特性。本領(lǐng)域的技術(shù)人 員會(huì)意識(shí)到,在一些情況下,計(jì)算就是不能通過(guò)腦力步驟或通過(guò)紙和筆被足夠快速且足夠 可靠地執(zhí)行來(lái)提供一實(shí)施例的技術(shù)效果。
      [0082] "在計(jì)算上"同樣指的是使用計(jì)算設(shè)備(至少是處理器加上存儲(chǔ)器),且排除了僅通 過(guò)人類思考或僅通過(guò)單獨(dú)的人類動(dòng)作而獲得結(jié)果。例如,用紙和筆作算術(shù)不是如本文所理 解的在計(jì)算上作算術(shù)。計(jì)算結(jié)果更快、更寬泛、更深、更準(zhǔn)確、更一致、更全面和/或W其他方 式提供超出單獨(dú)的人類表現(xiàn)范圍的技術(shù)效果。"計(jì)算步驟"是通過(guò)計(jì)算執(zhí)行的步驟。然而, "自動(dòng)地"和巧計(jì)算上"都不一定意味著"立即"。巧計(jì)算上"和"自動(dòng)冊(cè)'在此可互換地使 用。
      [0083] "搶先式"意味著沒(méi)有來(lái)自用戶的直接請(qǐng)求。的確,用戶甚至可能直到已經(jīng)向該用 戶呈現(xiàn)一實(shí)施例中的搶先式步驟的結(jié)果才意識(shí)到該步驟是可能的。除非另外指明,否則此 處描述的任何計(jì)算和/或自動(dòng)化步驟都可W被搶先完成。
      [0084] "語(yǔ)言上"表示,通過(guò)使用自然語(yǔ)言或通常在面對(duì)面人類對(duì)人類通信中采用的另一 種形式的通信。語(yǔ)言上通信包括例如,說(shuō)出、鍵入、或用一個(gè)人的手指、手部、面部和/或身體 來(lái)作出姿勢(shì)。
      [0085] 貫穿本文,對(duì)任選復(fù)數(shù)"(諸Γ的使用意味著一個(gè)或多個(gè)所指示的特征存在。例如, "(諸)處理器"意味著"一個(gè)或多個(gè)處理器"或等效于"至少一個(gè)處理器"。
      [0086] 貫穿本文,除非另外明確表明,否則對(duì)過(guò)程中的某一步驟的任何引用都假定該步 驟可直接由所關(guān)注的一方執(zhí)行和/或由該方通過(guò)介入機(jī)制和/或介入實(shí)體而間接地執(zhí)行,且 仍然在該步驟的范圍內(nèi)。也就是說(shuō),除非直接執(zhí)行是被明確表明的要求,否則并不要求由關(guān) 注方對(duì)步驟的直接執(zhí)行。例如,設(shè)及由所討論的一方執(zhí)行的諸如相對(duì)于一目的地或其他主 體的訪問(wèn)、避免、檢查、比較、創(chuàng)建、確定、發(fā)出、執(zhí)行、生成、防護(hù)、加載、定位、運(yùn)行、存儲(chǔ)、更 新、使用(w及訪問(wèn)、被訪問(wèn)的等)等動(dòng)作的步驟可設(shè)及中間動(dòng)作,如由某一其他方執(zhí)行的轉(zhuǎn) 發(fā)、復(fù)制、上傳、下載、編碼、解碼、壓縮、解壓、加密、加密、認(rèn)證、調(diào)用等,但仍然被理解為是 由該所討論的一方直接執(zhí)行的。
      [0087] 在參考數(shù)據(jù)或指令時(shí),要理解運(yùn)些項(xiàng)配置了計(jì)算機(jī)可讀存儲(chǔ)器和/或計(jì)算機(jī)可讀 存儲(chǔ)介質(zhì),從而將其變換為特定物品,而非簡(jiǎn)單地存在于紙張上、人的頭腦中、或僅僅作為 例如傳播的信號(hào)。除非在權(quán)利要求中另外指明,否則權(quán)利要求不涵蓋信號(hào)本身。出于美國(guó)專 利審查的目的,存儲(chǔ)器、計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)和任意其他計(jì)算機(jī)可讀介質(zhì)不是美國(guó)專利商 標(biāo)局化SPT0)對(duì)In re Nui jten案例的解釋下的可授予專利的主題的范圍之外的傳播信號(hào) 或載波。
      [0088] 此外,盡管與本文中的其他地方明顯相反,但將理解一方面的(a)計(jì)算機(jī)可讀存儲(chǔ) 介質(zhì)、計(jì)算機(jī)可讀介質(zhì)和計(jì)算機(jī)可讀存儲(chǔ)器,和另一方面的(b)也被稱為信號(hào)介質(zhì)或傳播的 信號(hào)的傳輸介質(zhì)之間的清楚區(qū)別。傳輸介質(zhì)是傳播信號(hào)或載波介質(zhì)。相反,計(jì)算機(jī)可讀介 質(zhì)、計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)和計(jì)算機(jī)可讀存儲(chǔ)器不是傳播信號(hào)或載波介質(zhì)。除非另外聲明,否 則"計(jì)算機(jī)可讀介質(zhì)"意味著計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),而不是傳播信號(hào)本身。
      [0089] 本文中的一"實(shí)施例"是一示例。術(shù)語(yǔ)"實(shí)施例"與"本發(fā)邸'不是可互換的;它們中 沒(méi)有一個(gè)是術(shù)語(yǔ)"示例"。各實(shí)施例可自由地共享或借用各方面來(lái)創(chuàng)建其他實(shí)施例(產(chǎn)生的 結(jié)果是可操作的),即使所產(chǎn)生的方面組合本身在本文中沒(méi)有被明確描述。要求每個(gè)W及每 次許可的組合被顯式地描述對(duì)于本領(lǐng)域的技術(shù)人員而言不是不要的,并且將會(huì)與表明到專 利說(shuō)明書(shū)是針對(duì)本領(lǐng)域的技術(shù)人員而寫(xiě)的策略相反。關(guān)于從即使少量的可組合特征中得出 的可能組合的數(shù)量的正規(guī)組合性計(jì)算和非正規(guī)通用直覺(jué)也將指示針對(duì)本文描述的各方面 存在大量的方面組合。因此,要求對(duì)每個(gè)W及每次組合的顯式詳述將與要求專利說(shuō)明書(shū)簡(jiǎn) 潔且要求讀者具有本技術(shù)領(lǐng)域的知識(shí)的策略相反。
      [0090] 操作環(huán)境
      [0091] 參考圖1,用于一個(gè)實(shí)施例的操作環(huán)境100可包括計(jì)算機(jī)系統(tǒng)102。計(jì)算機(jī)系統(tǒng)102 可W是多處理器計(jì)算機(jī)系統(tǒng),或者也可W不是。操作環(huán)境可包括給定計(jì)算機(jī)系統(tǒng)中的一個(gè) 或多個(gè)機(jī)器,它們可W群集的、客戶機(jī)-服務(wù)器聯(lián)網(wǎng)的、和/或?qū)Φ嚷?lián)網(wǎng)的。個(gè)體機(jī)器是一計(jì) 算機(jī)系統(tǒng),且一組協(xié)同操作的機(jī)器也是計(jì)算機(jī)系統(tǒng)。給定計(jì)算機(jī)系統(tǒng)102可W例如用應(yīng)用被 配置用于最終用戶、用于管理員、作為服務(wù)器、作為分布式處理節(jié)點(diǎn)、作為ΙοΤ節(jié)點(diǎn)和/或W 其他方式配置。
      [0092] 人類用戶104可W經(jīng)由鍵入的文本、觸摸、語(yǔ)音、移動(dòng)、計(jì)算機(jī)視覺(jué)、姿勢(shì)和/或其它 形式的1/0,通過(guò)使用顯示器、鍵盤和其它外圍設(shè)備106來(lái)與計(jì)算機(jī)系統(tǒng)102交互。用戶界面 可支持實(shí)施例和一個(gè)或多個(gè)人類用戶之間的交互。用戶界面可包括命令行界面、圖形用戶 界面(GUI)、自然用戶界面(NUI)、語(yǔ)音命令界面和/或其它界面呈現(xiàn)。用戶界面可W在本地 臺(tái)式計(jì)算機(jī)或例如智能電話上生成,或者它可W從web服務(wù)器生成并被發(fā)送到客戶機(jī)。用戶 界面可被生成為服務(wù)的一部分并且它可W與諸如社交網(wǎng)絡(luò)服務(wù)等其它服務(wù)集成。給定操作 環(huán)境包括支持運(yùn)些不同的用戶界面生成選項(xiàng)和使用的設(shè)備和基礎(chǔ)結(jié)構(gòu)。
      [0093] 例如,自然用戶界面(NUI)操作可使用例如語(yǔ)音識(shí)別、觸摸和指示筆識(shí)別、屏幕上 和屏幕附近的姿勢(shì)識(shí)別、空中姿勢(shì)、頭部和眼睛跟蹤、話音和語(yǔ)音、視覺(jué)、觸摸、姿勢(shì)、和/或 機(jī)器智能的那些方法。NUI技術(shù)的一些示例包括觸敏顯示、話音和語(yǔ)音識(shí)別、意圖和目的理 解、使用深度相機(jī)(如立體相機(jī)系統(tǒng)、紅外相機(jī)系統(tǒng)、RGB相機(jī)系統(tǒng)、W及運(yùn)些的組合)的運(yùn)動(dòng) 姿勢(shì)檢測(cè)、使用加速度計(jì)/巧螺儀的運(yùn)動(dòng)姿勢(shì)檢測(cè)、面部識(shí)別、3D顯示、頭部、眼睛和注視跟 蹤、浸入式增強(qiáng)現(xiàn)實(shí)和虛擬現(xiàn)實(shí)系統(tǒng),所有運(yùn)些都提供更自然的接口,W及用于使用電場(chǎng)傳 感電極(腦電儀和相關(guān)工具)的傳感大腦活動(dòng)的技術(shù)。
      [0094] 作為另一示例,游戲可W駐留在Microsoft XBOXLive? (微軟公司的商標(biāo))服務(wù)器 或其他游戲服務(wù)器上。游戲可從控制臺(tái)購(gòu)買或者整體或部分在服務(wù)器上、在控制臺(tái)上、或在 兩者上執(zhí)行。多個(gè)用戶可W使用標(biāo)準(zhǔn)控制器、空中姿勢(shì)、語(yǔ)音或使用諸如智能電話或平板等 附隨設(shè)備來(lái)與該游戲交互。給定操作環(huán)境包括支持運(yùn)些不同的使用場(chǎng)景的設(shè)備和基礎(chǔ)結(jié) 構(gòu)。
      [00M]系統(tǒng)管理員、開(kāi)發(fā)人員、工程技術(shù)人員、W及最終用戶各自都是特定類型的用戶 104。代表一個(gè)或多個(gè)人操作的自動(dòng)化代理、腳本、回放軟件等也可W是用戶104。在某些實(shí) 施例中,存儲(chǔ)設(shè)備和/或聯(lián)網(wǎng)設(shè)備可W被認(rèn)為是外圍設(shè)備。圖1中未示出的其他計(jì)算機(jī)系統(tǒng) 可W按各技術(shù)方式與計(jì)算機(jī)系統(tǒng)102進(jìn)行交互,或者例如通過(guò)網(wǎng)絡(luò)接口設(shè)備使用到網(wǎng)絡(luò)108 的一個(gè)或多個(gè)連接與另一系統(tǒng)實(shí)施例進(jìn)行交互。
      [0096] 計(jì)算機(jī)系統(tǒng)102包括至少一個(gè)邏輯處理器110。計(jì)算機(jī)系統(tǒng)102與其他合適的系統(tǒng) 一樣,還包括一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)112。介質(zhì)112可W是不同的物理類型。介質(zhì) 112可W是易失性存儲(chǔ)器、非易失性存儲(chǔ)器、被安裝就位的介質(zhì)、可移動(dòng)介質(zhì)、磁介質(zhì)、光學(xué) 介質(zhì)、固態(tài)介質(zhì)和/或其他類型的物理可持續(xù)介質(zhì)(而不僅僅是傳播信號(hào))。具體而言,諸如 便攜式(即外置)硬盤驅(qū)動(dòng)器、CD、DVD、記憶棒、或其他可移動(dòng)非易失性存儲(chǔ)器介質(zhì)之類的經(jīng) 配置的介質(zhì)114在被插入或W其他方式安裝時(shí)可W在功能上變?yōu)橛?jì)算機(jī)系統(tǒng)的技術(shù)部分, 從而使其內(nèi)容可被訪問(wèn)W供與處理器110交互并由處理器110使用??梢苿?dòng)的經(jīng)配置的介質(zhì) 114是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)112的示例。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)112的某些其他示例包括內(nèi)置 RAM、R0M、硬盤、W及其他不能被用戶104輕松地移走的存儲(chǔ)器存儲(chǔ)設(shè)備。為了符合當(dāng)前美國(guó) 專利要求,計(jì)算機(jī)可讀介質(zhì)、計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)和而計(jì)算機(jī)可讀存儲(chǔ)器都不是信號(hào)本身。
      [0097] 介質(zhì)114用可由處理器110執(zhí)行的指令116來(lái)配置;"可執(zhí)行"在此W寬泛的意義被 使用W包括機(jī)器代碼、可解釋代碼、字節(jié)碼和/或在例如虛擬機(jī)上運(yùn)行的代碼。介質(zhì)114還被 配置有數(shù)據(jù)118,該數(shù)據(jù)通過(guò)指令116的執(zhí)行被創(chuàng)建、修改、引用和/或W別的方式用于技術(shù) 效果。指令116和數(shù)據(jù)118配置它們所駐留的存儲(chǔ)器或其它存儲(chǔ)介質(zhì)114;當(dāng)該存儲(chǔ)器或其它 計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)是給定計(jì)算機(jī)系統(tǒng)的功能部分時(shí),指令116和數(shù)據(jù)118還配置該計(jì)算機(jī) 系統(tǒng)。在某些實(shí)施例中,數(shù)據(jù)118的一部分代表了諸如產(chǎn)品特征、清單、物理測(cè)量值、設(shè)定、圖 像、讀數(shù)、目標(biāo)、卷等等之類的現(xiàn)實(shí)世界的項(xiàng)。運(yùn)一數(shù)據(jù)還通過(guò)備份、還原、提交、中止、重新 格式化和/或其它技術(shù)操作來(lái)變換。
      [0098] 盡管一實(shí)施例可被描述為被實(shí)現(xiàn)為由計(jì)算設(shè)備(例如通用計(jì)算機(jī)、蜂窩電話、或游 戲控制臺(tái))中的一個(gè)或多個(gè)處理器執(zhí)行的軟件指令,但運(yùn)一描述并非意味著窮盡所有可能 的實(shí)施例。技術(shù)人員將會(huì)理解還可經(jīng)常整體地或部分地直接用硬件邏輯來(lái)實(shí)現(xiàn)相同或相似 功能,W提供相同或相似的技術(shù)效果。作為對(duì)軟件實(shí)現(xiàn)的替換或補(bǔ)充,本文描述的技術(shù)功能 可W至少部分地由一個(gè)或多個(gè)硬件邏輯組件來(lái)執(zhí)行。作為示例并且不排除其它實(shí)現(xiàn),一實(shí) 施例可包括硬件邏輯組件,諸如現(xiàn)場(chǎng)可編程口陣列(FPGA)、專用集成電路(ASIC)、專用標(biāo)準(zhǔn) 產(chǎn)品(ASSP)、片上系統(tǒng)組件(S0C)、復(fù)雜可編程邏輯器件(C化D)和類似組件。一實(shí)施例的組 件可基于它們的輸入、輸出和/或它們的技術(shù)效果來(lái)被分組成各個(gè)交互功能模塊。
      [0099] 在示出的環(huán)境100中,一個(gè)或多個(gè)應(yīng)用120具有代碼(諸如源代碼122和可執(zhí)行代碼 124),其包括對(duì)象126、例程128W及其他構(gòu)造(有時(shí)成為"人工產(chǎn)物")。源122用一個(gè)或多個(gè) 編程語(yǔ)言130來(lái)撰寫(xiě)。從具有給定編程語(yǔ)言130的源中創(chuàng)建的可執(zhí)行代碼有時(shí)被稱為具有該 語(yǔ)言130,但是可執(zhí)行代碼被理解為包括機(jī)器代碼。如本文中使用的,"機(jī)器代碼"表示低層 代碼或針對(duì)特定硬件體系結(jié)構(gòu)定制的或針對(duì)特定虛擬機(jī)體系結(jié)構(gòu)定制的計(jì)算機(jī)代碼。一些 機(jī)器代碼的熟悉示例包括經(jīng)編譯的代碼、微代碼、固件代碼、二進(jìn)制代碼、本機(jī)代碼、對(duì)象代 碼、匯編語(yǔ)言代碼、P-代碼、字節(jié)代碼、動(dòng)態(tài)鏈接庫(kù)代碼W及常見(jiàn)的中間語(yǔ)言代碼。
      [0100] 如指示的,一些環(huán)境100包括通過(guò)產(chǎn)生和/或轉(zhuǎn)換代碼122、124來(lái)協(xié)助軟件開(kāi)發(fā)的 軟件開(kāi)發(fā)工具132,諸如編譯器134、解釋器136W及調(diào)試器137。代碼122、124、工具121、W及 圖中和本文中討論的其他項(xiàng)可各自部分或全部駐留于一個(gè)或多個(gè)硬件介質(zhì)112中,由此配 置那些介質(zhì)W實(shí)現(xiàn)所有硬件-軟件合作操作中固有的"正常"(即,最小公分母)交互的技術(shù) 效果。除了處理器11〇(〔?1]、4〇]少?1]和/或0?1])、存儲(chǔ)器/存儲(chǔ)介質(zhì)112、顯示器138和電池之 外,操作環(huán)境還可包括其它硬件,諸如總線、電源、有線和無(wú)線網(wǎng)絡(luò)接口卡和加速度計(jì),運(yùn)些 硬件的各自操作在此被描述為并非已經(jīng)對(duì)技術(shù)人員顯而易見(jiàn)。
      [0101] 給定操作環(huán)境100可包括向開(kāi)發(fā)者提供一組協(xié)調(diào)的軟件開(kāi)發(fā)工具132(諸如A0T編 譯器、J 口編譯器、源代碼編輯器、剖析器、調(diào)試器等)的集成開(kāi)發(fā)環(huán)境(IDE)140,。具體而言, 對(duì)于一些實(shí)施例,合適的操作環(huán)境中的一些包括或幫助創(chuàng)建被配置成支持程序開(kāi)發(fā)的 Microsof昨Visual Studio?開(kāi)發(fā)環(huán)境(微軟公司的商標(biāo))。一些合適的操作環(huán)境包括 Java?環(huán)境(Oracle America有限公司的商標(biāo)),并且一些操作環(huán)境包括利用諸如C++或C# rC-Sharp")等語(yǔ)言的環(huán)境,但本文的教導(dǎo)適用于各種各樣的程序設(shè)計(jì)語(yǔ)言、程序設(shè)計(jì)模 型、W及程序,W及本質(zhì)上適用于軟件開(kāi)發(fā)領(lǐng)域之外的使用內(nèi)聯(lián)的技術(shù)努力。
      [0102] 在附圖中W輪廓形式示出了一個(gè)或多個(gè)項(xiàng)來(lái)強(qiáng)調(diào)它們不一定是所示操作環(huán)境或 所有實(shí)施例的一部分,但是可W與此處討論的操作環(huán)境或一些實(shí)施例中的各項(xiàng)互操作。未 采用輪廓形式的項(xiàng)在任何附圖或任何實(shí)施例中也不一定是必需的。具體而言,圖1是為了方 便而提供的;在圖1中包括一項(xiàng)目不暗示該項(xiàng)目或?qū)υ擁?xiàng)目的描述使用在本發(fā)明之前是已 知的。
      [0103] 技術(shù)人員將認(rèn)識(shí)到此處在"操作環(huán)境"下呈現(xiàn)的上述各方面和其它方面還可形成 給定實(shí)施例的一部分。本文的標(biāo)題不旨在提供將特征嚴(yán)格地歸類成實(shí)施例和非實(shí)施例特征 類別。
      [0104] 系統(tǒng)
      [0105] 圖9示出一些系統(tǒng)102的一個(gè)整體視圖???02表示代碼執(zhí)行和簡(jiǎn)檔收集。執(zhí)行可包 括例如,運(yùn)行二進(jìn)制代碼、解釋字節(jié)代碼和執(zhí)行經(jīng)JIT編譯的代碼。簡(jiǎn)檔收集包括收集關(guān)于 在對(duì)象屬性204加載和存儲(chǔ)期間遇到的類型的信息W及將該信息聚集到多形態(tài)內(nèi)聯(lián)高速緩 存246和/或其他多形態(tài)屬性訪問(wèn)簡(jiǎn)檔232內(nèi)。屬性訪問(wèn)可作為單形態(tài)訪問(wèn)開(kāi)始,其中每個(gè)訪 問(wèn)包括類型檢查、加載偏移W及接著加載或存儲(chǔ)在該偏移處的值。根據(jù)框904,優(yōu)化可移除 一些類型檢查和/或移除一些偏移加載,而不減少類型安全性。優(yōu)化可利用等同類型高速緩 存238和其他結(jié)構(gòu)來(lái)產(chǎn)生經(jīng)優(yōu)化的代碼124,該經(jīng)優(yōu)化的代碼124包括例如直接屬性訪問(wèn)代 碼224來(lái)代替非直接代碼228。根據(jù)框906,經(jīng)優(yōu)化的代碼作為應(yīng)用120的一部分來(lái)執(zhí)行。Web 瀏覽器w及由它們作為插件或w其他方式運(yùn)行的腳本或其他代碼是應(yīng)用的示例。
      [0106] 圖2示出了適合與一些實(shí)施例一起使用的體系結(jié)構(gòu)的各方面。代碼生成器202通常 位于編譯器134內(nèi)。編譯器可在一個(gè)機(jī)器上,而代碼生成器的輸出形成不同機(jī)器上的應(yīng)用 120的一部分。代碼生成器202輸出尤其包括用于訪問(wèn)對(duì)象屬性204的可執(zhí)行代碼124的片 段,稱為屬性訪問(wèn)206。屬性訪問(wèn)206可被執(zhí)行其他操作的代碼122、124加括號(hào),或?qū)傩栽L問(wèn) 206可在屬性訪問(wèn)206序列208中。任一給定屬性訪問(wèn)在存儲(chǔ)器112區(qū)域216中讀或?qū)憣傩灾?210。值210可被讀取來(lái)用在計(jì)算(諸如加法)或字符串打印中,或者它們可作為調(diào)用屬性(其 是對(duì)象方法)的一部分來(lái)被讀取。讀取值的訪問(wèn)206有時(shí)被稱為"加載",而將值寫(xiě)入到對(duì)象 屬性內(nèi)的那些訪問(wèn)有時(shí)被稱為"存儲(chǔ)"。
      [0107] 在一些示例中,對(duì)象126具有定義的類型212,其定義對(duì)該對(duì)象所許可的操作。類型 212還隱式地或顯式地定義布局214,其在一給定實(shí)現(xiàn)中指定存儲(chǔ)器112中對(duì)象屬性的次序、 大小和相互關(guān)系。布局214可指定一些屬性值被存儲(chǔ)在屬性頭部218中,而其他屬性值被存 儲(chǔ)在例如由頭部條目指向的位置處,或者值可被存儲(chǔ)在輔助陣列244中。在一給定實(shí)現(xiàn)中, 每個(gè)屬性204被分派存儲(chǔ)器112中的特定數(shù)量的位或字節(jié),并且不同的屬性可被分派不同量 的存儲(chǔ)器。當(dāng)一給定屬性所占據(jù)的存儲(chǔ)器的實(shí)際大小不是討論的重點(diǎn)時(shí),被分派到該給定 屬性的存儲(chǔ)器有時(shí)被稱為該屬性的槽220。槽通常W0開(kāi)始編號(hào),但是一些開(kāi)發(fā)者開(kāi)始對(duì) 它們進(jìn)行編號(hào)。對(duì)象布局214也可從對(duì)象原型222繼承或被對(duì)象原型222影響。
      [0108] 在一些示例中,代碼生成器202輸出包括用于訪問(wèn)對(duì)象屬性204的具有被硬編碼的 偏移226的直接訪問(wèn)代碼224,并且在一些情況下,代碼生成器202輸出包括用于訪問(wèn)對(duì)象屬 性204的非直接代碼228。直接訪問(wèn)代碼224比非直接訪問(wèn)代碼228更快(有時(shí)一個(gè)數(shù)量級(jí)或 更快)。直接訪問(wèn)代碼224假設(shè)先前被硬編碼的偏移226依然是正確的,而非直接訪問(wèn)代碼 228計(jì)算當(dāng)前偏移。
      [0109] 在一些示例中,代碼生成器202在發(fā)出直接訪問(wèn)代碼224和發(fā)出非直接訪問(wèn)代碼 228之間進(jìn)行選擇來(lái)實(shí)現(xiàn)正被編譯的給定屬性訪問(wèn)206。如本文中詳細(xì)解釋的,在一些情況 下,在直接和非直接屬性訪問(wèn)代碼之間的選擇基于W下中的一個(gè)或多個(gè),或使用W下中的 一個(gè)或多個(gè)來(lái)實(shí)現(xiàn)所選的代碼:可尤其被實(shí)現(xiàn)為一種多形態(tài)內(nèi)聯(lián)高速緩存246(又稱PIC 246)的多形態(tài)屬性訪問(wèn)簡(jiǎn)檔232中的類型212集230、屬性索引234、等同類型高速緩存238的 條目236、屬性等同性記錄240的條目236、編譯器值表242中的類型212集230。
      [0110] -些實(shí)施例向計(jì)算機(jī)系統(tǒng)102提供由電路系統(tǒng)、固件和/軟件配置的用于提供諸如 本文中描述的使用直接訪問(wèn)代碼224來(lái)代替非直接代碼228的技術(shù)效果的邏輯處理器110和 存儲(chǔ)器介質(zhì)112。在一個(gè)示例中,被配置用于生成和執(zhí)行針對(duì)動(dòng)態(tài)類型化的編程語(yǔ)言中的屬 性訪問(wèn)的機(jī)器代碼的系統(tǒng)102包括至少一個(gè)處理器now及與處理器可操作上通信的存儲(chǔ) 器112。系統(tǒng)102還包括W下各項(xiàng)中的至少一者:直接訪問(wèn)代碼生成器202、所生成的直接訪 問(wèn)代碼224或?qū)傩缘韧杂涗?40。一些系統(tǒng)既包括直接訪問(wèn)代碼生成器202也包括所生成 的直接訪問(wèn)代碼224。一些系統(tǒng)包括直接訪問(wèn)代碼生成器202、所生成的直接訪問(wèn)代碼224W 及屬性等同性記錄240。
      [0111] 在一些示例中,直接訪問(wèn)代碼生成器202發(fā)出針對(duì)屬性訪問(wèn)206的直接訪問(wèn)代碼 224 W訪問(wèn)對(duì)象126的屬性204。對(duì)象126具有類型212。直接訪問(wèn)代碼224在W下條件被滿足 時(shí)被發(fā)出:在對(duì)應(yīng)于該屬性訪問(wèn)的多形態(tài)內(nèi)聯(lián)高速緩存246中標(biāo)識(shí)的類型212是等同的,W 及從多形態(tài)內(nèi)量高速緩存中檢索的類型集230和與編譯器134值表242中的對(duì)象的類型相關(guān) 聯(lián)的類型集230相匹配。熟悉的機(jī)制可被用于從編譯器的元數(shù)據(jù)集合中檢索類型集230。
      [0112] 圖6示出多形態(tài)內(nèi)聯(lián)高速緩存246的示例,伴隨有類型212被實(shí)現(xiàn)為指向布局結(jié)構(gòu) (參見(jiàn)例如圖8中的布局結(jié)構(gòu)TYP1和TYP2)的存儲(chǔ)器地址W及伴隨有進(jìn)入到屬性位置圖內(nèi)的 屬性索引234。多形態(tài)內(nèi)聯(lián)高速緩存246與給定屬性訪問(wèn)206相關(guān)聯(lián)。在條目0,例如,如果對(duì) 象a來(lái)自具有類型typO的示例源代碼,則針對(duì)a的布局結(jié)構(gòu)在地址0X1FFA0240處并且對(duì)象a 的屬性X位于槽2中。在一些實(shí)現(xiàn)中,PIC 246具有可變大小,諸如具有4到32個(gè)條目236,并且 在一些實(shí)現(xiàn)中,PIC條目的數(shù)量由編譯器基于在應(yīng)用120的執(zhí)行期間遇到的對(duì)象類型的數(shù)量 和分布來(lái)調(diào)整。多形態(tài)內(nèi)聯(lián)高速緩存246是多形態(tài)訪問(wèn)簡(jiǎn)檔232的陣列實(shí)現(xiàn)的示例。出于公 開(kāi)范圍的目的,本文中的任何描述可被認(rèn)為已經(jīng)用替代于"多形態(tài)內(nèi)聯(lián)高速緩存"的"多形 態(tài)訪問(wèn)簡(jiǎn)檔"或其等價(jià)體"多形態(tài)屬性訪問(wèn)簡(jiǎn)檔"來(lái)重復(fù),并且附圖標(biāo)記相應(yīng)地從246改到 232,或反之亦然。
      [0113] 在一些示例中,多形態(tài)內(nèi)聯(lián)高速緩存246條目236包括屬性索引234。在操作中,與 給定屬性訪問(wèn)206相關(guān)聯(lián)的多形態(tài)內(nèi)聯(lián)高速緩存中的類型212僅在確定該多形態(tài)內(nèi)聯(lián)高速 緩存的所有條目都包括與該多形態(tài)內(nèi)聯(lián)高速緩存的第一個(gè)條目相同的屬性索引之后才被 確定為等同的。在一些示例中,與給定屬性訪問(wèn)206相關(guān)聯(lián)的多形態(tài)內(nèi)聯(lián)高速緩存中的類型 212僅在確定W下條件之一被確切地滿足之后才被確定為等同的:該多形態(tài)內(nèi)聯(lián)高速緩存 中的所有類型都描述包括該給定屬性的對(duì)象126,或該多形態(tài)內(nèi)聯(lián)高速緩存中的所有類型 描述共享原型222的對(duì)象126并且該原型包括該給定屬性204。在一些示例中,與給定屬性訪 問(wèn)206相關(guān)聯(lián)的多形態(tài)內(nèi)聯(lián)高速緩存中的類型212僅在確定W下條件之一被確切地滿足之 后才被確定為等同的:該多形態(tài)內(nèi)聯(lián)高速緩存中的所有類型都描述在對(duì)象的頭部218上的 槽220中具有該給定屬性的值的對(duì)象126,或該多形態(tài)內(nèi)聯(lián)高速緩存中的所有類型都描述在 對(duì)象的輔助槽陣列244上的槽中具有該給定屬性的值的對(duì)象。
      [0114] 在一些示例中,系統(tǒng)102包括針對(duì)屬性訪問(wèn)的用于訪問(wèn)對(duì)象126的屬性的所生成的 直接訪問(wèn)代碼224,并且屬性訪問(wèn)206是屬于屬性訪問(wèn)序列208的非直接訪問(wèn)。對(duì)象具有類型 212W及所分派的存儲(chǔ)器區(qū)域216。直接訪問(wèn)代碼224在被處理器110執(zhí)行之際訪問(wèn)位于對(duì)象 的存儲(chǔ)器區(qū)域216中被硬編碼的偏移226處的屬性204的值210。直接訪問(wèn)代碼224在W下方 面被優(yōu)化:其在比較類型檢查確定對(duì)象的類型212匹配與屬性訪問(wèn)序列208相關(guān)聯(lián)的等同類 型高速緩存238化TC 238)中的條目236之后訪問(wèn)該值,而不需要進(jìn)一步的類型檢查。
      [0115] 圖10示出具有固定大小陣列形式的ETC 238的一示例實(shí)現(xiàn),該固定大小陣列具有 針對(duì)8個(gè)條目的空間,8個(gè)條目中的每一個(gè)是類型標(biāo)識(shí)符(即類型布局214的存儲(chǔ)器地址)的 大小。在其他實(shí)現(xiàn)中,不同數(shù)量的條目236被用在ETC 238中,例如4個(gè)條目、12個(gè)條目、16個(gè) 條目或另一數(shù)量。ETC 238在編譯期間被創(chuàng)建但在執(zhí)行期間被使用。在一些實(shí)施例中,其不 被存儲(chǔ)在機(jī)器代碼可執(zhí)行文件中,而是被維護(hù)在運(yùn)行時(shí)系統(tǒng)數(shù)據(jù)結(jié)構(gòu)中。ETC 238的第一個(gè) 條目236被用作防護(hù)類型,而其他條目具有附加經(jīng)高速緩存的類型212。
      [0116] 在一些示例中,所生成的直接訪問(wèn)代碼224包括動(dòng)態(tài)類型屬性訪問(wèn)206序列208,所 有動(dòng)態(tài)類型屬性訪問(wèn)206由使用例如圖10的ETC 238防護(hù)類型1002的單個(gè)類型檢查來(lái)防護(hù)。 W上具有函數(shù)fooO的示例源代碼是具有動(dòng)態(tài)類型屬性訪問(wèn)206序列206的多個(gè)可能源代碼 122之一。針對(duì)運(yùn)樣的代碼的簡(jiǎn)檔232數(shù)據(jù)收集可使用熟悉的機(jī)制來(lái)實(shí)現(xiàn)。示出的簡(jiǎn)檔訪問(wèn) 在對(duì)象a具有在運(yùn)行時(shí)被分配的不同類型的意義上、在對(duì)象b具有在運(yùn)行時(shí)被分配的不同類 型的意義上和/或在對(duì)象a的類型在布局上與對(duì)象b的類型不同的意義上可W是多形態(tài)的。 訪問(wèn)206中的每一個(gè)具有其自己的相關(guān)聯(lián)的PIC 246;訪問(wèn)206在源中被a. X.、b. X、a. y和b. y 來(lái)表示。
      [0117] 在一些示例中,所生成的直接訪問(wèn)代碼224包括不同類型212的對(duì)象的所訪問(wèn)的屬 性的屬性訪問(wèn)206序列,并且運(yùn)些類型212在布局2 214方面與所訪問(wèn)的屬性是等同的。運(yùn)可 例如在W下條件之一被確切地滿足時(shí)發(fā)生:所有所訪問(wèn)的屬性204是局部屬性,或每個(gè)所訪 問(wèn)的屬性204來(lái)自原型222并且所有所訪問(wèn)的屬性來(lái)自該相同原型。在一些示例中,所生成 的直接訪問(wèn)代碼224包括不同類型212的對(duì)象126的所訪問(wèn)的屬性的屬性訪問(wèn)序列,并且屬 性訪問(wèn)206全部?jī)?nèi)聯(lián)(例如,在頭部中218或可不需要通過(guò)指針的間接來(lái)訪問(wèn))或者它們?nèi)?在輔助槽陣列244中。
      [0118] 在一些示例中,系統(tǒng)102包括屬性等同性記錄240,其針對(duì)被單個(gè)類型檢查防護(hù)的 屬性訪問(wèn)序列208中的每個(gè)屬性訪問(wèn)206具有一個(gè)條目236。圖11示出屬性等同性記錄240的 一個(gè)示例實(shí)現(xiàn),其可適合于其中對(duì)象屬性204可被指定為可寫(xiě)或不可寫(xiě)W及其中對(duì)象屬性 可被內(nèi)聯(lián)地存儲(chǔ)或存儲(chǔ)在輔助陣列244中的環(huán)境100。在其他示例中,如果所有屬性都是可 寫(xiě)的,則用于跟蹤屬性是否是可寫(xiě)的列可被移除。類似地,在其他示例中,如果所有屬性被 內(nèi)聯(lián)地存儲(chǔ),則用于跟蹤屬性值是否被存儲(chǔ)在輔助陣列244的槽中的列可被移除。
      [0119] 在一些實(shí)現(xiàn)中,每個(gè)屬性訪問(wèn)206都具有一個(gè)屬性等同性記錄240,其中顯式類型 檢查被用于該訪問(wèn)W確保類型安全性。屬性等同性記錄240針對(duì)被單個(gè)類型檢查所防護(hù)的 給定訪問(wèn)序列中的每個(gè)屬性訪問(wèn)具有一個(gè)條目。由此,在初始訪問(wèn)206后,屬性等同性記錄 240幫助保護(hù)對(duì)該序列中相同對(duì)象的后續(xù)訪問(wèn)。例如,在樣本源代碼中,如果a. X和a. y訪問(wèn) 對(duì)象a的相同類型的屬性,則一個(gè)優(yōu)化避免(忽略、跳過(guò))在檢查已經(jīng)對(duì)訪問(wèn)a.X作出之后對(duì) 訪問(wèn)a.y的類型檢查。
      [0120] 在某些實(shí)施例中,諸如人類用戶I/O設(shè)備(屏幕、鍵盤、鼠標(biāo)、圖形輸入板、話筒、揚(yáng) 聲器、運(yùn)動(dòng)傳感器等等)之類的外圍設(shè)備106將可W在操作上與一個(gè)或多個(gè)處理器110和存 儲(chǔ)器進(jìn)行通信。然而,一實(shí)施例也可W深嵌入在諸如物聯(lián)網(wǎng)的一部分等的技術(shù)系統(tǒng)中,W便 沒(méi)有人類用戶104直接地且與語(yǔ)言上該實(shí)施例進(jìn)行交互。軟件進(jìn)程可W是用戶104。
      [0121] 在某些實(shí)施例中,該系統(tǒng)包括通過(guò)網(wǎng)絡(luò)連接的多個(gè)計(jì)算機(jī)或其他設(shè)備102。網(wǎng)絡(luò)接 口設(shè)備可W使用例如諸如分組交換網(wǎng)絡(luò)接口卡、無(wú)線收發(fā)機(jī)或電話網(wǎng)絡(luò)接口之類的組件提 供對(duì)網(wǎng)絡(luò)108的接入,并可存在于給定計(jì)算機(jī)系統(tǒng)中。然而,一實(shí)施例也可W通過(guò)直接存儲(chǔ) 器存取、可移動(dòng)非易失性介質(zhì)、或其他信息存儲(chǔ)-檢索和/或傳輸方法來(lái)傳遞技術(shù)數(shù)據(jù)和/或 技術(shù)指令,或者,計(jì)算機(jī)系統(tǒng)中的一實(shí)施例可W在不與其他計(jì)算機(jī)系統(tǒng)進(jìn)行通信的情況下 操作。
      [0122] 某些實(shí)施例在"云"計(jì)算環(huán)境和/或"云"存儲(chǔ)環(huán)境中操作,其中計(jì)算服務(wù)不是自有 的,而是按需提供的。例如,代碼生成器202可在聯(lián)網(wǎng)云中的一個(gè)設(shè)備/系統(tǒng)102上發(fā)出代碼 224、228,并且包括該代碼的應(yīng)用120的副本可被存儲(chǔ)在該云內(nèi)的其他設(shè)備上。
      [0123] 過(guò)程
      [0124] 圖3用流程圖300示出了某些過(guò)程實(shí)施例。各附圖中示出或W其他方式公開(kāi)的技術(shù) 過(guò)程可W在某些實(shí)施例中(例如通過(guò)編譯器代碼生成器202)自動(dòng)執(zhí)行,例如在腳本的控制 下或w其他方式需要極少或不需要同時(shí)的實(shí)況用戶輸入。除非另外指明,否則過(guò)程也可w 部分自動(dòng)地且部分手動(dòng)地執(zhí)行。在一給定實(shí)施例中,可W重復(fù)過(guò)程的零個(gè)或更多個(gè)所示出 的步驟,有可能利用不同的參數(shù)或數(shù)據(jù)來(lái)操作。一實(shí)施例中的步驟也可W按照與圖3中展示 的自頂向下次序不同的次序來(lái)執(zhí)行。步驟可W串行地、W部分重疊的方式、或完全并行地執(zhí) 行。遍歷流程圖300W指出在過(guò)程中執(zhí)行的步驟的次序可W在過(guò)程的一次執(zhí)行與該過(guò)程的 另一次執(zhí)行之間不同。流程圖遍歷次序也可W在一個(gè)過(guò)程實(shí)施例與另一過(guò)程實(shí)施例之間不 同。各步驟還可W被省略、組合、重命名、重組、或W其他方式偏離所示出的流程,只要所執(zhí) 行的過(guò)程是可操作的,并符合至少一個(gè)權(quán)利要求。
      [0125] 此處提供了幫助示出該技術(shù)的各方面的示例,但是在本文內(nèi)給出的示例并未描述 所有可能的實(shí)施例。實(shí)施例不僅限于此處所提供的具體實(shí)現(xiàn)、布置、顯示、特征、方法或情 形。給定實(shí)施例可包括例如附加的或不同的技術(shù)特征、機(jī)制、和/或數(shù)據(jù)結(jié)構(gòu),并可別的 方式偏離此處所提供的示例。
      [0126] 在一些示例中,提供用于使用等同對(duì)象類型??诨瘉?lái)執(zhí)行動(dòng)態(tài)類型化的編程語(yǔ)言 中的屬性訪問(wèn)序列的算法過(guò)程。例如,該過(guò)程可執(zhí)行至少兩個(gè)全部被單個(gè)檢查類型所防護(hù) 的動(dòng)態(tài)類型屬性訪問(wèn)的序列。
      [0127] 在一些情況下,過(guò)程運(yùn)行304代碼,該代碼使用314 ETC 238通過(guò)將對(duì)象類型212與 等同類型高速緩存238的指定的防護(hù)類型1002進(jìn)行比較來(lái)進(jìn)行類型檢查。當(dāng)對(duì)象類型等于 指定的防護(hù)類型時(shí),接著無(wú)需運(yùn)行進(jìn)一步的類型檢查代碼320(從而避免%2類型檢查開(kāi) 銷),過(guò)程執(zhí)行代碼224,該代碼224訪問(wèn)324被硬編碼到對(duì)象的存儲(chǔ)器112、216內(nèi)的偏移226 處的屬性的值。當(dāng)對(duì)象類型不等于指定的防護(hù)類型時(shí),過(guò)程運(yùn)行318類型檢查比較代碼320, 其將對(duì)象類型212與等同類型高速緩存238的至少一個(gè)次級(jí)(非初始)條目236進(jìn)行比較。當(dāng) 類型檢查比較代碼320確定330對(duì)象類型匹配等同類型高速緩存中的任一條目時(shí),接著無(wú)需 運(yùn)行進(jìn)一步的類型檢查代碼(從而避免342開(kāi)銷),過(guò)程執(zhí)行針對(duì)屬性訪問(wèn)序列208的代碼, 其中每個(gè)屬性訪問(wèn)加載屬性值或存儲(chǔ)屬性值,并且其中每個(gè)非初始屬性訪問(wèn)訪問(wèn)被硬編碼 到對(duì)象的存儲(chǔ)器內(nèi)的偏移處的位置。當(dāng)類型檢查比較代碼確定330對(duì)象類型不與等同類型 高速緩存中的任意條目匹配時(shí),過(guò)程執(zhí)行代碼,該代碼確定328對(duì)象類型是否等同于關(guān)于所 訪問(wèn)的屬性的等同類型高速緩存中的類型。該確定328使用340與等同類型高速緩存相關(guān)聯(lián) 的屬性等同性記錄來(lái)進(jìn)行。
      [0128] 在一些示例中,過(guò)程通過(guò)插入在類型檢查比較代碼320的執(zhí)行期間沒(méi)有被初始地 發(fā)現(xiàn)在等同類型高速緩存的任意條目中的對(duì)象類型212來(lái)更新346等同類型高速緩存。
      [0129] 在一些示例中,過(guò)程將多個(gè)屬性訪問(wèn)206執(zhí)行到不同類型的對(duì)象126中,但是所有 對(duì)象針對(duì)所訪問(wèn)的屬性是等同的。不同的類型具有不同的布局214,并且布局不必在相同的 偏移處具有被相同命名的屬性的任意共享的前綴。在一些情況下,所訪問(wèn)324的屬性204全 部是局部的或它們?nèi)縼?lái)自相同的原型。在一些情況中,所訪問(wèn)的屬性全部?jī)?nèi)聯(lián)在對(duì)象的 頭部218中,或所訪問(wèn)的屬性全部在對(duì)象的輔助槽陣列244中。
      [0130] 經(jīng)配置的介質(zhì)
      [0131] -些實(shí)施例包括經(jīng)配置的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)112。介質(zhì)112可包括盤(磁盤、光 盤,或其他)、RAM、邸PROM或其他ROM、和/或其他可配置存儲(chǔ)器,特別包括計(jì)算機(jī)可讀介質(zhì) (而不僅僅是傳播信號(hào))。經(jīng)配置的存儲(chǔ)介質(zhì)可W特別地是諸如CD、DVD或閃存之類的可移動(dòng) 存儲(chǔ)介質(zhì)114。可W是可移動(dòng)的或不可移動(dòng)的且可W是易失性的或非易失性的通用存儲(chǔ)器 可被配置到使用諸如經(jīng)優(yōu)化的代碼生成器202、ETC 238、和陽(yáng)R 240等項(xiàng)目的實(shí)施例中來(lái)形 成配置的介質(zhì),運(yùn)些項(xiàng)目采用從可移動(dòng)介質(zhì)114和/或諸如網(wǎng)絡(luò)連接等另一源讀取的數(shù)據(jù) 118和指令116的形式。
      [0132] 經(jīng)配置的介質(zhì)112能夠使計(jì)算機(jī)系統(tǒng)執(zhí)行本文所述的用于屬性訪問(wèn)代碼優(yōu)化的技 術(shù)過(guò)程步驟。由此,附圖1、2、6、8和9-11幫助示出了經(jīng)配置的存儲(chǔ)介質(zhì)實(shí)施例和過(guò)程實(shí)施 例,W及系統(tǒng)和過(guò)程實(shí)施例。具體而言,圖3、9和/或圖12-15中示出的各過(guò)程步驟中的任一 步驟或本文W其他方式教導(dǎo)的任一步驟可被用來(lái)幫助配置存儲(chǔ)介質(zhì)來(lái)形成經(jīng)配置的介質(zhì) 實(shí)施例。出于公開(kāi)范圍的目的,在運(yùn)個(gè)"經(jīng)配置的介質(zhì)"標(biāo)題下的討論被視為在"過(guò)程"標(biāo)題 下重復(fù),并且在"過(guò)程"標(biāo)題下的討論被視為在運(yùn)個(gè)"經(jīng)配置的介質(zhì)"標(biāo)題下重復(fù)。此外,過(guò)程 也在本公開(kāi)的其他地方處被討論,而不在W上任何標(biāo)題下。標(biāo)題僅僅是為了方便;它們不對(duì) 本文中教導(dǎo)的范圍或內(nèi)容進(jìn)行限制。
      [0133] 在一些示例中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)112被配置有數(shù)據(jù)118和指令116,該指令116 在被至少一個(gè)處理器110執(zhí)行時(shí)使得該處理器執(zhí)行用于使用等同對(duì)象類型??诨瘉?lái)生成針 對(duì)動(dòng)態(tài)類型化的編程語(yǔ)言130中的屬性訪問(wèn)206序列208的機(jī)器代碼124的算法過(guò)程。W下描 述一些代碼生成302示例。如之前提到的,出于公開(kāi)范圍的目的,對(duì)多形態(tài)內(nèi)聯(lián)高速緩存246 的引用可由對(duì)多形態(tài)屬性訪問(wèn)簡(jiǎn)檔232的引用來(lái)被替換。
      [0134] 在一些示例中,代碼生成302過(guò)程包括W下。當(dāng)對(duì)象126的多形態(tài)內(nèi)聯(lián)高速緩存246 中的類型212不是等同的時(shí),經(jīng)優(yōu)化的代碼生成器202發(fā)出308非直接屬性訪問(wèn)代碼228。非 直接代碼228是包括用于針對(duì)沒(méi)有開(kāi)始屬性訪問(wèn)序列的至少一個(gè)屬性訪問(wèn)使用多形態(tài)內(nèi)聯(lián) 高速緩存的指令116的代碼124。當(dāng)對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中的類型被確定328是等同 的,但是從編譯器值表242中沒(méi)有可用的類型集230要與從對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中計(jì) 算的經(jīng)高速緩存的類型集進(jìn)行比較時(shí),經(jīng)優(yōu)化的代碼生成器202創(chuàng)建等同類型高速緩存238 并發(fā)出316針對(duì)開(kāi)始屬性訪問(wèn)序列的屬性訪問(wèn)206的類型檢查代碼320。當(dāng)對(duì)象的多形態(tài)內(nèi) 聯(lián)高速緩存中的類型是等同的并且從編譯器值表242中檢索322到類型集W供使用323,但 是對(duì)象的多形態(tài)內(nèi)聯(lián)經(jīng)高速緩存的類型集不匹配從編譯器值表中檢索到的類型集時(shí),經(jīng)優(yōu) 化的代碼生成器202發(fā)出308非直接屬性訪問(wèn)代碼。然而,當(dāng)對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中 的類型被確定328是等同的并且對(duì)象的多形態(tài)內(nèi)聯(lián)經(jīng)高速緩存的類型集匹配從編譯器值表 中檢索322到的類型集時(shí),經(jīng)優(yōu)化的代碼生成器202發(fā)出306直接屬性訪問(wèn)代碼224,其在執(zhí) 行之際直接地訪問(wèn)324在屬性的對(duì)象的存儲(chǔ)器區(qū)域216中被硬編碼的偏移226處的屬性值。
      [0135] 在一些示例中,發(fā)出30巧自直接屬性訪問(wèn)代碼228包括在對(duì)象類型屬性圖中定義 326屬性的索引234,其相比于直接訪問(wèn)代碼224在發(fā)出和執(zhí)行方面更加昂貴(更慢,更多用 于處理的指令)。非直接訪問(wèn)代碼訪問(wèn)被屬性的索引指示的存儲(chǔ)器112位置處的屬性值。
      [0136] 在一些示例中,僅在確定對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存246中的所有條目236都具有 與該高速緩存的第一個(gè)條目相同的值之后,對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存246或所使用310的 其他屬性訪問(wèn)簡(jiǎn)檔232中的類型212才被確定328是等同的。圖13示出用于針對(duì)給定屬性訪 問(wèn)來(lái)確定類型集是否是等同的一個(gè)過(guò)程。即,圖13描繪了確定多形態(tài)內(nèi)聯(lián)高速緩存中的所 有類型針對(duì)所訪問(wèn)的屬性是否等同的算法。預(yù)期的索引變量被分配1302第一個(gè)高速緩存 246條目236的值。循環(huán)發(fā)生W走查通過(guò)各條目,進(jìn)而將每個(gè)條目視為當(dāng)前條目。當(dāng)前條目與 預(yù)期的索引進(jìn)行比較1304。如果它們是相等的并且當(dāng)前條目是最后一個(gè)條目,則高速緩存 被標(biāo)記1306為僅具有等同類型212并且等同性確定完成。如果當(dāng)前條目與預(yù)期的索引是相 等的,但是當(dāng)前條目不是高速緩存246中的最后一個(gè)條目,則下一條目變成1308當(dāng)前條目并 且控制如顯示的循環(huán)。如果當(dāng)前條目與預(yù)期的條目從來(lái)不等同,則高速緩存被標(biāo)記1310為 缺乏等同類型212(即,被標(biāo)記為具有至少兩個(gè)相互不等同的類型),并且等同性確定完成。
      [0137] 在一些示例中,只有在確定332序列中的屬性訪問(wèn)全部將是局部的或者全部將針 對(duì)相同的原型來(lái)作出之后,對(duì)象的等同類型高速緩存238中的類型才被確定為是等同的。在 一些示例中,只有在確定334序列中的所有屬性存儲(chǔ)將對(duì)可寫(xiě)屬性來(lái)作出之后,對(duì)象的等同 類型高速緩存238中的類型才被確定為是等同的。在一些示例中,只有在確定336訪問(wèn)序列 中要被訪問(wèn)的屬性全部都是內(nèi)聯(lián)的或全部都將通過(guò)輔助槽來(lái)訪問(wèn)之后,對(duì)象的等同類型高 速緩存中的類型才被確定為是等同的。
      [0138] 在一些示例中,對(duì)等同類型高速緩存238的使用在ETC 238的編譯器創(chuàng)建312之前。 創(chuàng)建等同類型高速緩存238可至少部分通過(guò)創(chuàng)建包括指定的防護(hù)類型條目1002 W保持指定 的防護(hù)類型的高速緩存來(lái)完成。指定的防護(hù)類型條目可在固定大小的陣列中,該陣列具有 針對(duì)多個(gè)次級(jí)條目W保持附加類型的空間。
      [0139] 一些示例包括創(chuàng)建338屬性等同性記錄240dPER 240具有針對(duì)被單個(gè)類型檢查所 防護(hù)的屬性訪問(wèn)序列中的每一個(gè)屬性訪問(wèn)206的條目。圖11示出PER 240的一個(gè)實(shí)現(xiàn),其針 對(duì)具有不可寫(xiě)屬性和輔助槽陣列的環(huán)境來(lái)定制。
      [0140] 圖12、14和15進(jìn)一步示出在一些實(shí)施例中對(duì)PIC 246(或其他屬性訪問(wèn)簡(jiǎn)檔232) 和/或ETC 238的創(chuàng)建、填充和使用。在圖9示出的上下文中,圖14示出主要在根據(jù)框902的執(zhí) 行和簡(jiǎn)檔收集期間發(fā)生的活動(dòng),圖15示出主要在根據(jù)框904的經(jīng)優(yōu)化的代碼的生成期間發(fā) 生的活動(dòng),并且圖12示出主要在根據(jù)框906的經(jīng)優(yōu)化的代碼的執(zhí)行期間發(fā)生的活動(dòng)。然而, 本領(lǐng)域的技術(shù)人員將意識(shí)到,每個(gè)附圖還幫助示出在其他時(shí)間發(fā)生的活動(dòng),因?yàn)榻Y(jié)構(gòu)(諸如 PIC和ETC)在各個(gè)時(shí)間被創(chuàng)建和/或使用。
      [0141] 圖14示出用于針對(duì)多形態(tài)屬性訪問(wèn)的簡(jiǎn)檔收集的一些過(guò)程,包括針對(duì)更快屬性訪 問(wèn)的PIC填充和使用。示出的過(guò)程圖包括在所收集的簡(jiǎn)檔信息中定位1402多形態(tài)屬性訪問(wèn) 數(shù)據(jù),加載1404對(duì)象類型212,尋找1406簡(jiǎn)檔條目W及將對(duì)象類型與簡(jiǎn)檔條目236進(jìn)行比較 1408。如果對(duì)象類型匹配簡(jiǎn)檔條目,則過(guò)程從簡(jiǎn)檔條目中加載屬性的索引234并基于該屬性 索引來(lái)移動(dòng)1412屬性值。如果對(duì)象類型不匹配簡(jiǎn)檔條目,則過(guò)程從屬性圖中加載1414屬性 的索引234,基于該屬性索引來(lái)移動(dòng)1412屬性值,并更新1416屬性訪問(wèn)簡(jiǎn)檔,使得找到匹配 的機(jī)會(huì)在下一比較1408上被提升。
      [0142] 作為具體示例,考慮在W上示例源代碼中的屬性訪問(wèn)a.X。該訪問(wèn)206具有相關(guān)聯(lián) 的PIC 246,此處被表示為PIC1,其可例如被實(shí)現(xiàn)為進(jìn)入PIC 246陣列的索引。一個(gè)符合圖14 的過(guò)程加載PIC1,從對(duì)象a中加載1404對(duì)象a的對(duì)象類型(參考例如圖8,其中對(duì)象類型被表 示為ΤΥΡΙ和TYP2),并例如通過(guò)使用散列表或線性捜索來(lái)定義1406針對(duì)該對(duì)象類型的PIC1 高速緩存條目。如果對(duì)象類型匹配(過(guò)程已經(jīng)在之前看到過(guò)該對(duì)象或其類型),則在運(yùn)行時(shí) 過(guò)程從PIC1條目中加載1410屬性索引,并接著將屬性值210加載或存儲(chǔ)到被該屬性索引指 示的對(duì)象a上的存儲(chǔ)器位置。如果對(duì)象類型不匹配,則在運(yùn)行時(shí)可使用更慢的方式。過(guò)程在 對(duì)象類型的屬性圖中(例如,在布局214中)定位1414屬性索引,并將屬性值210加載或存儲(chǔ) 到被來(lái)自屬性圖的屬性索引指示的對(duì)象a上的存儲(chǔ)器位置。接著,PICl條目被蓋寫(xiě),W用對(duì) 象a的類型和來(lái)自屬性圖214的屬性索引來(lái)更新1416PIC1。
      [0143] 圖15示出用于生成關(guān)于至少一些屬性訪問(wèn)來(lái)優(yōu)化的代碼的一些過(guò)程。顯示的過(guò)程 圖包括嘗試在收集應(yīng)用簡(jiǎn)檔信息中定位1402屬性訪問(wèn)簡(jiǎn)檔。該嘗試返回不需要被填充的簡(jiǎn) 檔232,使得過(guò)程檢查1502簡(jiǎn)檔232W查看其是否被填充W及它包括什么種類的信息。如果 簡(jiǎn)檔沒(méi)有被填充,則過(guò)程發(fā)出308例如使用單形態(tài)高速緩存信息的較不優(yōu)化的非直接代碼。 如果簡(jiǎn)檔被多形態(tài)屬性訪問(wèn)信息填充,則過(guò)程發(fā)出1504可包括被硬編碼的偏移226的經(jīng)對(duì) 象類型??诨膶傩栽L問(wèn)代碼。如果簡(jiǎn)檔被非單形態(tài)屬性訪問(wèn)信息填充并且類型等同性沒(méi) 有清晰地存在,則過(guò)程發(fā)出308例如使用多形態(tài)高速緩存信息的較不優(yōu)化的非直接代碼。如 果簡(jiǎn)檔被非單形態(tài)屬性訪問(wèn)信息填充但是類型等同性清晰地存在,則過(guò)程嘗試從編譯器值 表中檢索322類型集。該值表包括在編譯中的給定點(diǎn)處存活的每個(gè)符號(hào)的值W及語(yǔ)義信息, 例如對(duì)象的類型。"值"在此處指值編號(hào)算法中的值,而不是給定用戶變量將對(duì)其執(zhí)行的值。 如果類型集被檢索322,則訪問(wèn)類型集和檢索到的類型集被比較1506。如果它們不匹配,貝U 過(guò)程發(fā)出308使用多形態(tài)高速緩存信息的較不優(yōu)化的非直接代碼,但是如果它們匹配,則過(guò) 程發(fā)出306更優(yōu)化的直接屬性訪問(wèn)代碼。如果沒(méi)有類型集被檢索322,則過(guò)程創(chuàng)建312ETC 238,用目前的類型來(lái)填充1508ETC,并發(fā)出316類型檢查代碼320。
      [0144] 在一些示例中,符合圖15的過(guò)程在編譯期間發(fā)生,之后是經(jīng)編譯的函數(shù)的控制流 W及針對(duì)每個(gè)所遇到的屬性訪問(wèn)來(lái)執(zhí)行圖15的步驟。經(jīng)優(yōu)化的代碼的生成結(jié)合W下在編譯 期間發(fā)生:對(duì)經(jīng)編譯的函數(shù)的控制流的分析W確定,針對(duì)每個(gè)經(jīng)優(yōu)化的屬性訪問(wèn),編譯器可 正確地假定(或還通過(guò)發(fā)出適當(dāng)?shù)念愋蜋z查來(lái)確保)只有等同類型的對(duì)象才能達(dá)到該屬性 訪問(wèn)。一些示例使用值跟蹤和編號(hào)機(jī)制來(lái)針對(duì)每個(gè)其屬性訪問(wèn)要被優(yōu)化的對(duì)象126跟蹤預(yù) 期的類型或可能的等同類型集。一些示例還跟蹤每個(gè)要被優(yōu)化的序列中的所有屬性訪問(wèn)操 作。
      [0145] 在一些示例中,符合圖15的過(guò)程在所收集的簡(jiǎn)檔信息中定位1402屬性訪問(wèn)數(shù)據(jù)。 如果數(shù)據(jù)沒(méi)有被填充,則過(guò)程發(fā)出使用單形態(tài)高速緩存的較不優(yōu)化的代碼,運(yùn)與圖14 一致。 如果數(shù)據(jù)被填充并且是單形態(tài)的,則過(guò)程發(fā)出經(jīng)對(duì)象類型??诨膶傩栽L問(wèn)代碼,運(yùn)也與 圖14一致。如果所填充的數(shù)據(jù)不是單形態(tài)的,則過(guò)程檢查等同性是否存在,運(yùn)與圖13-致。 如果等同性不存在,則過(guò)程發(fā)出使用多形態(tài)高速緩存(PIC)的較不優(yōu)化的代碼,運(yùn)與圖14 一 致。如果等同性存在,則過(guò)程嘗試從編譯器符合值表242中檢索針對(duì)對(duì)象的預(yù)期的類型集。 類型集可能是空的。如果類型集不可用,則注意力從PIC切換到ETC。例如,過(guò)程創(chuàng)建新的ETC (運(yùn)與圖11 一致),并用來(lái)自PIC的信息來(lái)填充它,將第一類型放置為防護(hù)1002。接著,過(guò)程發(fā) 出將加載對(duì)象的類型并將其與ETC防護(hù)類型進(jìn)行比較的類型檢查代碼320。接著,過(guò)程發(fā)出 306從對(duì)象的存儲(chǔ)器中的被硬編碼的偏移中的直接屬性值加載代碼/進(jìn)入到對(duì)象的存儲(chǔ)器 中的被硬編碼的偏移中的直接屬性值存儲(chǔ)代碼。運(yùn)是快速訪問(wèn)代碼,潛在地在即使存在有 不同布局的多形態(tài)的情況下依然與單形態(tài)訪問(wèn)一樣快速。如果類型集可用,則過(guò)程比較類 型集。如果它們匹配,則過(guò)程發(fā)出306從對(duì)象的存儲(chǔ)器中的被硬編碼的偏移中的直接屬性值 加載代碼/進(jìn)入到對(duì)象的存儲(chǔ)器中的被硬編碼的偏移中的直接屬性值存儲(chǔ)代碼。如果類型 集不匹配,則完全優(yōu)化不是適當(dāng)?shù)模鵚過(guò)程發(fā)出使用PIC信息的較不優(yōu)化的代碼。
      [0146] 在一些示例中,經(jīng)優(yōu)化的代碼生成器(又稱發(fā)射器)202使用包括在PIC中的信息來(lái) 決定是否能應(yīng)用等同對(duì)象類型優(yōu)化。如果生成器202決定應(yīng)用優(yōu)化,則它將生成經(jīng)優(yōu)化的代 碼并創(chuàng)建ETC,其中所發(fā)出的代碼將在它被執(zhí)行時(shí)使用。代碼生成器使用PIC中的信息來(lái)填 充ETCW及ETC所包括(或與其鏈接的)的屬性等同性記錄。當(dāng)所發(fā)出的代碼稍后被執(zhí)行時(shí), 它將對(duì)其屬性要被加載或存儲(chǔ)的對(duì)象進(jìn)行操作。所發(fā)出的代碼將針對(duì)ETC中的類型來(lái)比較 運(yùn)個(gè)對(duì)象的類型。如果該類型匹配防護(hù)類型或8槽類型數(shù)組中的任意類型,則執(zhí)行進(jìn)行W將 屬性值直接地224加載或存儲(chǔ)到對(duì)象的存儲(chǔ)器中的槽。如果對(duì)象的類型不匹配ETC中的任意 類型,則來(lái)自運(yùn)個(gè)ETC的等同性記錄被用于針對(duì)運(yùn)個(gè)序列中的屬性來(lái)確定對(duì)象的類型(推測(cè) 之前沒(méi)有遇到過(guò))是否實(shí)際上等同于ETC中的類型。換言之,屬性等同性記錄僅在高速緩存 未命中之后被使用。被用來(lái)使用屬性等同性記錄來(lái)確定對(duì)象的類型與ETC中的類型的等同 性的工作在某種程度上類似于代碼生成器在檢查PI別寸所做的,但是其是在執(zhí)行期間而非 在編譯期間完成的。
      [0147] 圖12示出用于執(zhí)行關(guān)于至少一些屬性訪問(wèn)來(lái)優(yōu)化的代碼的一些過(guò)程。過(guò)程從對(duì)象 的頭部218加載1202對(duì)象的類型212,并將對(duì)象的類型與防護(hù)類型1002進(jìn)行比較1204。如果 它們是相等的,則接下來(lái)運(yùn)行的代碼將是用于從被硬編碼到對(duì)象的所分派的存儲(chǔ)器216內(nèi) 的偏移226處的位置中加載1206或存儲(chǔ)1208屬性值的代碼。如果對(duì)象的類型不匹配防護(hù)類 型,則運(yùn)可能是由于防護(hù)是空值。一些示例針對(duì)空值防護(hù)來(lái)執(zhí)行檢查1210,其在相對(duì)不平常 的情況中被用作用于將由JIT編譯器生成的代碼跳出1212到經(jīng)解釋的模式內(nèi)的信號(hào)。運(yùn)個(gè) 空值防護(hù)跳出可在例如當(dāng)屬性不再是可寫(xiě)的、已經(jīng)從原型中移除或已經(jīng)被隱藏時(shí)發(fā)生。過(guò) 程針對(duì)對(duì)象的類型來(lái)檢查314ETC;如果找到匹配,則優(yōu)化代碼被運(yùn)行304。如果沒(méi)有找到匹 配,則過(guò)程使用340PER來(lái)嘗試并驗(yàn)證328對(duì)象的類型等同于防護(hù)類型。如果是等同的,貝化TC 被更新346并且優(yōu)化代碼被運(yùn)行304。否則,過(guò)程跳出1212到解釋器136。
      [0148] 作為具體示例,一個(gè)過(guò)程從對(duì)象的頭部加載1202對(duì)象a的類型,并將對(duì)象a類型與 防護(hù)類型進(jìn)行比較。在一些示例中,ETC的位置被直接硬編碼在所發(fā)出的機(jī)器代碼中。如果 類型是相等的,則最快速的代碼被運(yùn)行,其使用被硬編碼到對(duì)象a的存儲(chǔ)器內(nèi)的偏移來(lái)加載 或存儲(chǔ)屬性值。如果類型不是相等的,則代碼將對(duì)象a的類型與ETC中經(jīng)高速緩存的類型中 的每一個(gè)進(jìn)行比較,直到找到匹配或不存在更多的類型。如果找到匹配,則最快速的代碼被 運(yùn)行,其使用被硬編碼到對(duì)象a的存儲(chǔ)器內(nèi)的偏移來(lái)訪問(wèn)屬性值。如果在ETC中沒(méi)有找到匹 配,則代碼嘗試使用ETC中的pm?來(lái)驗(yàn)證對(duì)象a的類型針對(duì)運(yùn)個(gè)屬性訪問(wèn)是等同的。如果不是 等同的,控制從經(jīng)優(yōu)化的代碼跳出到解釋器。如果是等同的,則代碼通過(guò)將對(duì)象a的類型 (即,類型的布局的地址)作為防護(hù)類型來(lái)插入到ETC內(nèi)來(lái)更新ETC。
      [0149] 其他示例
      [0150] 下面提供了額外的細(xì)節(jié)和設(shè)計(jì)考慮。如同此處的其他示例,在給定實(shí)施例中,所描 述的特征可W單獨(dú)地使用和/或組合地使用,或根本不使用。
      [0151] 那些本領(lǐng)域的技術(shù)人員將理解,實(shí)現(xiàn)細(xì)節(jié)可W設(shè)及諸如特定API、特定存儲(chǔ)器地 址、特定屬性和對(duì)象名稱和特定樣本程序之類的特定代碼,且因此不必出現(xiàn)在每個(gè)實(shí)施例 中。本領(lǐng)域的技術(shù)人員還將理解,在討論細(xì)節(jié)時(shí)所使用的程序標(biāo)識(shí)符和某些其他術(shù)語(yǔ)是針 對(duì)具體實(shí)現(xiàn)的,且如此不必設(shè)及每個(gè)實(shí)施例。盡管如此,雖然它們不一定需要出現(xiàn)在運(yùn)里, 但是提供了運(yùn)些細(xì)節(jié),因?yàn)樗鼈兺ㄟ^(guò)提供上下文可W幫助一些讀者,和/或可W示出此處所 討論的技術(shù)的許多可能的實(shí)現(xiàn)中的一些。
      [0152] W下討論是從某個(gè)Windows 9"闊值(Threshold)"文檔中得出的。Windows 9是由 微軟公司實(shí)現(xiàn)的軟件,并且沿著"闊值"一般在營(yíng)銷或其他材料(來(lái)自第Ξ方W及微軟)中指 Micros油傅Windows?軟件(微軟公司的標(biāo)記)的版本。運(yùn)個(gè)軟件和/或文檔的各方面與本 文描述的實(shí)施例中的一些的各方面一致或另行解說(shuō)本文描述的實(shí)施例中的一些的各方面。 然而,要理解,運(yùn)樣的文檔和/或?qū)崿F(xiàn)選擇不必約束本文中描述的任意示例或?qū)嵤├姆?圍,且同樣地"Windows 9闊值"代碼和/或其文檔將很好地包含位于運(yùn)些實(shí)施例和示例范圍 外的特征。還要理解,下面的討論是部分作為對(duì)未必是本領(lǐng)域技術(shù)人員的讀者的幫助的一 部分來(lái)提供的,并且因此可能包含和/或省略了其下面的引述沒(méi)有被闡割要求來(lái)支持本公 開(kāi)的細(xì)節(jié)。
      [0153] 本文中的一些教導(dǎo)關(guān)注等同對(duì)象類型專口化的算法和實(shí)現(xiàn)。等同對(duì)象類型??诨?允許針對(duì)其類型關(guān)于被用在序列中的屬性等同的對(duì)象集,訪問(wèn)多形態(tài)屬性的一些序列與具 有單形態(tài)屬性的序列一樣高效地被執(zhí)行。在本文中教導(dǎo)的類型等同性下,兩個(gè)或更多個(gè)不 同的對(duì)象布局(類型)可具有被定位在離開(kāi)對(duì)象的開(kāi)始的匹配偏移處的公共屬性子集。該公 共子集可包括但不限于,在對(duì)象的存儲(chǔ)器的開(kāi)始處的屬性和/或在存儲(chǔ)器中被相互緊接地 存儲(chǔ)的屬性。運(yùn)樣的類型等同性可被用于通過(guò)W下來(lái)優(yōu)化多形態(tài)屬性操作序列:樂(lè)觀地發(fā) 出具有被硬編碼的偏移的存儲(chǔ)器訪問(wèn)序列(該序列被在該序列開(kāi)始處的單個(gè)類型檢查所防 護(hù))并接著僅當(dāng)執(zhí)行樂(lè)觀序列安全時(shí)才運(yùn)么做。
      [0154] -些技術(shù)設(shè)計(jì)對(duì)等同類型高速緩存的設(shè)計(jì)。例如,等同類型高速緩存可具有指定 的單個(gè)類型槽,其地址可被硬編碼在機(jī)器代碼中,從而使得初始類型檢查非常高效。等同類 型高速緩存可被用作針對(duì)對(duì)所防護(hù)的屬性訪問(wèn)序列中的一個(gè)或多個(gè)屬性的相關(guān)特征(偏 移、可寫(xiě)性)的改變的防護(hù),使得單個(gè)類型檢查針對(duì)未預(yù)期的類型W及同時(shí)環(huán)境中的其他改 變來(lái)進(jìn)行保護(hù)。一些技術(shù)關(guān)注用于跟蹤可通過(guò)等同對(duì)象類型專口化被優(yōu)化的屬性訪問(wèn)序列 的算法和/或用于跟蹤在經(jīng)等同對(duì)象類型??诨男蛄兄兴O(shè)及的屬性及它們的特征) 的算法。
      [0155] 在一些示例中,等同對(duì)象類型??诨O(shè)及數(shù)個(gè)組件和步驟,其在W下出于便于引 用的目的被提到。與本文中的其他示例一樣,提到的步驟和結(jié)構(gòu)可被本領(lǐng)域的技術(shù)人員W 任意可操作的方式來(lái)忽略、重復(fù)和/或組合。
      [0156] 第一,多形態(tài)內(nèi)聯(lián)高速緩存在早期代碼執(zhí)行期間被用于記錄在每個(gè)多形態(tài)屬性訪 問(wèn)處已經(jīng)遇到什么對(duì)象類型。一個(gè)多形態(tài)內(nèi)聯(lián)高速緩存與每個(gè)屬性相關(guān)聯(lián),使得針對(duì)每個(gè) 遇到的類型,多形態(tài)內(nèi)聯(lián)高速緩存記錄到該類型的對(duì)象上正被考慮的屬性的偏移。
      [0157] 第二,當(dāng)函數(shù)已經(jīng)被執(zhí)行充分?jǐn)?shù)量次時(shí),其被排隊(duì)W用于經(jīng)優(yōu)化的JIT編譯。在運(yùn) 個(gè)上下文中,本領(lǐng)域的技術(shù)人員將基于情況(諸如例如代碼先前經(jīng)歷了多少測(cè)試W及其他 發(fā)布準(zhǔn)則)來(lái)確定多少執(zhí)行次數(shù)是"充分"的次數(shù)。在一些情況下,單次執(zhí)行將被認(rèn)為是充分 的,而在其他情況下,充分性由相對(duì)代碼覆蓋(例如,函數(shù)的75%的實(shí)例已經(jīng)被調(diào)用)或由 PIC或ETC的大?。ɡ?,函數(shù)已經(jīng)被至少執(zhí)行與在任一高速緩存中的條目的數(shù)量一樣多的 次數(shù))來(lái)測(cè)量。在優(yōu)化期間,該函數(shù)中的每個(gè)多形態(tài)高速緩存針對(duì)類型等同性被檢查。如果 高速緩存的針對(duì)所有類型的條目都存儲(chǔ)相同的偏移(即,屬性值在該屬性訪問(wèn)迄今為止所 遇到的所有對(duì)象布局上被定位在相同的偏移處),則該高速緩存被認(rèn)為是等同的且被如此 標(biāo)記。還關(guān)注根據(jù)所使用的語(yǔ)言的語(yǔ)義來(lái)確保類型是完全等同的。例如,如果語(yǔ)言支持原型 繼承(如化vaScript那樣),則所有屬性應(yīng)當(dāng)存在于實(shí)例自身上或從原型中加載(兩種的混 合不是等同的)。類似地,如果語(yǔ)言許可屬性訪問(wèn)器W及簡(jiǎn)單值(JavaScript運(yùn)么做),則針 對(duì)被認(rèn)為是等同的類型,所有類型上的屬性值應(yīng)當(dāng)是訪問(wèn)器或應(yīng)當(dāng)是簡(jiǎn)單數(shù)據(jù)屬性。最后, 對(duì)于屬性存儲(chǔ),所有屬性應(yīng)當(dāng)是可寫(xiě)的。
      [0158] 第Ξ,在編譯期間,來(lái)自每個(gè)等同多形態(tài)高速緩存的數(shù)據(jù)被收集并與對(duì)應(yīng)的屬性 訪問(wèn)相關(guān)聯(lián)。等同類型集(類型集)是運(yùn)一數(shù)據(jù)的一部分。
      [0159] 第四,隨著程序被分析,優(yōu)化編譯器202跟蹤設(shè)及相同等同類型集(在一些實(shí)例中, 部分重疊的類型集也被考慮)的屬性訪問(wèn)206序列208并將它們標(biāo)記為針對(duì)等同類型??诨?的候選。對(duì)于所標(biāo)識(shí)的每個(gè)序列,編譯器還跟蹤所設(shè)及的屬性,使得在適當(dāng)時(shí),類型等同性 可在運(yùn)行時(shí)被驗(yàn)證。
      [0160] 第五,編譯器針對(duì)每個(gè)所標(biāo)識(shí)的屬性訪問(wèn)序列來(lái)創(chuàng)建等同對(duì)象類型專口化高速緩 存化TC)"ETC包括已經(jīng)被驗(yàn)證為等同的類型集,伴隨有將在所發(fā)出的機(jī)器代碼中被該序列 的開(kāi)始處的類型檢查使用的指定的類型槽。ETC還用作防護(hù),使得在條件改變的情況下(例 如,屬性之一變成只讀的情況下)可通過(guò)將運(yùn)個(gè)防護(hù)的值設(shè)為0來(lái)使得整個(gè)機(jī)器代碼序列無(wú) 效(觸發(fā)跳出)。最后,ETC包括pm?或具有相關(guān)聯(lián)的PER,其存儲(chǔ)關(guān)于所設(shè)及的屬性W及它們 的特征(例如,只讀狀態(tài))的補(bǔ)充信息W幫助驗(yàn)證任何新傳入類型的等同性。
      [0161] 第六,編譯器發(fā)出如W上描述的開(kāi)始于針對(duì)高速緩存的防護(hù)槽的類型檢查的機(jī)器 代碼序列。每個(gè)后續(xù)屬性訪問(wèn)是來(lái)自/去往離開(kāi)對(duì)象的開(kāi)始的被硬編碼的偏移的間接存儲(chǔ) 器訪問(wèn)操作,而無(wú)需任意附加的運(yùn)行時(shí)檢查。如果類型檢查成功,則存儲(chǔ)器加載/存儲(chǔ)的其 余部分與如在單形態(tài)對(duì)象類型專口化中那樣高效地執(zhí)行。
      [0162] 第屯,如果類型檢查失敗并且防護(hù)值為0,則樂(lè)觀優(yōu)化代碼不再有效,并且執(zhí)行直 接跳到跳出例程,從那里其將在解釋器中繼續(xù)。
      [0163] 第八,如果類型檢查失敗但是防護(hù)值是非0,則樂(lè)觀優(yōu)化代碼依然有效并可被執(zhí) 行,只要傳入對(duì)象的類型關(guān)于序列中的屬性等同。運(yùn)個(gè)等同性檢查可被實(shí)現(xiàn)在兩個(gè)部分中。 第一,傳入類型與ETC中的類型集進(jìn)行比較。運(yùn)些類型已經(jīng)被預(yù)先驗(yàn)證為等同的,所W如果 傳入類型匹配它們中的任一,則執(zhí)行根據(jù)經(jīng)優(yōu)化的屬性訪問(wèn)路徑來(lái)繼續(xù)。運(yùn)個(gè)部分可被直 接發(fā)出到機(jī)器代碼內(nèi)W供更快速的執(zhí)行,或者其可W是在初始類型檢查失敗之際被所發(fā)出 的代碼調(diào)用的助手例程的第一部分。并且,檢查可設(shè)及對(duì)經(jīng)高速緩存的類型的線性掃描或 基于散列的查找,其中傳入類型會(huì)被散列到經(jīng)高速緩存的類型的陣列中的索引中。
      [0164] 最后,如果傳入類型不匹配被存儲(chǔ)在高速緩存中的任一類型,它必須針對(duì)等同性 被顯式地檢查。為此,存儲(chǔ)在ETC中的屬性列表W及關(guān)于它們所要求的特征的輔助數(shù)據(jù)針對(duì) 傳入類型的屬性來(lái)比較。如果運(yùn)個(gè)檢查成功,執(zhí)行根據(jù)經(jīng)優(yōu)化的屬性訪問(wèn)路徑來(lái)繼續(xù)。此 外,ETC被更新(新的類型被放置在防護(hù)槽中,并被添加到等同類型的陣列,雖然它可取代另 一類型)。通過(guò)運(yùn)種方式,在對(duì)運(yùn)個(gè)屬性訪問(wèn)序列的后續(xù)執(zhí)行上,初始類型檢查將成功,并且 大部分優(yōu)化代碼將被執(zhí)行。另一方面,如果運(yùn)個(gè)檢查失敗,則傳入類型不是等同的,并且后 續(xù)機(jī)器指令針對(duì)被處理的對(duì)象不是有效的。執(zhí)行直接跳轉(zhuǎn)到跳出例程,并且在解釋器中繼 續(xù)。在許多示例中,運(yùn)種消耗時(shí)間的逐屬性的檢查將很少被執(zhí)行,并且在大部分時(shí)間,大部 分優(yōu)化代碼路徑將被執(zhí)行。
      [01 化]PIC 和 ETC
      [0166] 本文中的一些示例參考兩種不同種類的高速緩存。存在與每個(gè)屬性訪問(wèn)指令(例 如,示例源代碼中的指令"a. X"、"a. y"、"b. X"和"b. y"中的每一個(gè))相關(guān)聯(lián)的多形態(tài)內(nèi)聯(lián)高 速緩存(PICKPIC記錄該指令所遇到的所有對(duì)象的類型。運(yùn)些高速緩存被檢查來(lái)確定它們 所記錄的類型是否是等同的。如果PIC類型是等同的,則一實(shí)施例嘗試將等同類型??诨瘧?yīng) 用到對(duì)應(yīng)的指令。另一方面,當(dāng)一實(shí)施例選擇使用等同類型??诨瘉?lái)優(yōu)化屬性訪問(wèn)指令序 列時(shí),等同類型高速緩存化TC)被創(chuàng)建。每個(gè)運(yùn)樣的序列被給予一等同類型高速緩存,其存 儲(chǔ)已經(jīng)針對(duì)運(yùn)個(gè)屬性訪問(wèn)序列被確定為等同的類型,來(lái)促進(jìn)快速類型檢查。運(yùn)兩個(gè)高速緩 存用作不同的目的。等同類型高速緩存中的類型已經(jīng)已知為等同的,而多形態(tài)內(nèi)聯(lián)高速緩 存中的類型可能是或可能不是等同的。在附圖中:圖6顯示PIC;整體系統(tǒng)的圖9設(shè)及PIC(經(jīng) 由屬性訪問(wèn)簡(jiǎn)檔232)并且還設(shè)及ETC 238;圖10顯示ETC;圖11顯示結(jié)構(gòu)上是ETC的一部分或 W其他方式與ETC相關(guān)聯(lián)的PER;圖12設(shè)及ETC;圖13和14中的每一個(gè)設(shè)及PIC;并且圖15設(shè)及 P 1C和ETC兩者。
      [0167] 附加組合和變體
      [0168] 用于生成和執(zhí)行針對(duì)動(dòng)態(tài)類型化的編程語(yǔ)言中的屬性訪問(wèn)的代碼的系統(tǒng)S1包括 至少一個(gè)處理器、與該處理器可操作上通信的存儲(chǔ)器W及直接訪問(wèn)代碼生成器,其發(fā)出針 對(duì)屬性訪問(wèn)的直接訪問(wèn)代碼W訪問(wèn)對(duì)象的屬性。該對(duì)象具有一類型。直接訪問(wèn)代碼在對(duì)應(yīng) 于該屬性訪問(wèn)的多形態(tài)內(nèi)聯(lián)高速緩存中所標(biāo)識(shí)的類型是等同時(shí)被發(fā)出。
      [0169] 用于生成和執(zhí)行針對(duì)動(dòng)態(tài)類型化的編程語(yǔ)言中的屬性訪問(wèn)的代碼的系統(tǒng)S2包括 至少一個(gè)處理器、與該處理器可操作上通信的存儲(chǔ)器W及直接訪問(wèn)代碼生成器,其發(fā)出針 對(duì)屬性訪問(wèn)的直接訪問(wèn)代碼W訪問(wèn)對(duì)象的屬性。該對(duì)象具有一類型。直接訪問(wèn)代碼在從多 形態(tài)內(nèi)聯(lián)高速緩存中檢索到的類型集匹配于與編譯器值表中對(duì)象的類型相關(guān)聯(lián)的類型集 時(shí)被發(fā)出。
      [0170] 用于生成和執(zhí)行針對(duì)動(dòng)態(tài)類型化的編程語(yǔ)言中的屬性訪問(wèn)的代碼的系統(tǒng)S3包括 至少一個(gè)處理器、與該處理器可操作上通信的存儲(chǔ)器W及針對(duì)屬性訪問(wèn)的用于訪問(wèn)對(duì)象的 屬性的所生成的直接訪問(wèn)代碼。屬性訪問(wèn)屬于屬性訪問(wèn)序列。對(duì)象具有一類型和存儲(chǔ)器區(qū) 域。直接訪問(wèn)代碼在執(zhí)行之際訪問(wèn)被定位在對(duì)象的存儲(chǔ)器區(qū)域中被硬編碼的偏移處的屬性 值,并訪問(wèn)該值,而在比較類型檢查確定對(duì)象的類型匹配于與該屬性訪問(wèn)序列相關(guān)聯(lián)的等 同類型高速緩存中的條目之后無(wú)需要求進(jìn)一步的類型檢查。
      [0171] 用于生成和執(zhí)行針對(duì)動(dòng)態(tài)類型化的編程語(yǔ)言中的屬性訪問(wèn)的代碼的系統(tǒng)S4包括 屬性等同性記錄,該屬性等同性記錄包括針對(duì)屬性訪問(wèn)序列中的每個(gè)屬性訪問(wèn)的一個(gè)條 目,該屬性訪問(wèn)序列相對(duì)于被每屬性訪問(wèn)一個(gè)類型檢查所防護(hù)而言僅被單個(gè)類型檢查所防 護(hù),即使屬性屬于具有布局差異的類型。所生成的直接訪問(wèn)代碼可包括全部被單個(gè)類型檢 查所防護(hù)的動(dòng)態(tài)類型屬性訪問(wèn)序列。
      [0172] 系統(tǒng)S1-3包括系統(tǒng)S1的直接訪問(wèn)代碼生成器和系統(tǒng)S3的所生成的直接訪問(wèn)代碼 兩者。系統(tǒng)S2-3包括系統(tǒng)S2的直接訪問(wèn)代碼生成器和系統(tǒng)S3的所生成的直接訪問(wèn)代碼兩 者。系統(tǒng)S1-2包括也如針對(duì)系統(tǒng)S2所描述的那樣來(lái)操作的系統(tǒng)S1的直接訪問(wèn)代碼生成器。 系統(tǒng)S1-2-3包括也如針對(duì)系統(tǒng)S2所描述的那樣來(lái)操作的系統(tǒng)S1的直接訪問(wèn)代碼生成器,并 包括系統(tǒng)S3的所生成的直接訪問(wèn)代碼。其他可能組合中的每一個(gè)也出現(xiàn)在相應(yīng)的示例中, 例如S1 -2-4、S1 -3-4、S2-3-4、S3-4、S2-4 和 S1 -4。
      [0173] 系統(tǒng)SI、S2、S3、S4中任一單個(gè)或組合可被裝備有用于確定多形態(tài)內(nèi)聯(lián)高速緩存中 的類型是否等同的裝置。合適的裝置可包括例如,存儲(chǔ)在存儲(chǔ)器中并可由處理器執(zhí)行的代 碼,該代碼操作使得僅在與給定屬性訪問(wèn)相關(guān)聯(lián)的多形態(tài)內(nèi)聯(lián)高速緩存中的所有條目都包 括與該多形態(tài)內(nèi)聯(lián)高速緩存中的第一條目相同的屬性索引之后才確定與該多形態(tài)內(nèi)聯(lián)高 速緩存中的類型為等同的。合適的裝置還或替換地包括例如,操作使得僅在確定W下條件 之一被確切地滿足之后才確定與對(duì)給定屬性的給定屬性訪問(wèn)相關(guān)聯(lián)的多形態(tài)內(nèi)聯(lián)高速緩 存中的類型是等同的代碼:該多形態(tài)內(nèi)聯(lián)高速緩存中的所有類型都描述包括該給定屬性的 對(duì)象,或該多形態(tài)內(nèi)聯(lián)高速緩存中的所有類型描述共享原型的對(duì)象并且該原型包括該給定 屬性。合適的裝置還或替換地包括例如,操作使得僅在確定W下條件之一被確切地滿足之 后才確定與對(duì)給定屬性的給定屬性訪問(wèn)相關(guān)聯(lián)的多形態(tài)內(nèi)聯(lián)高速緩存中的類型是等同的 代碼:該多形態(tài)內(nèi)聯(lián)高速緩存中的所有類型都描述在對(duì)象的頭部上的槽中具有該給定屬性 的值的對(duì)象,或該多形態(tài)內(nèi)聯(lián)高速緩存中的所有類型都描述在對(duì)象的輔助槽陣列上的槽中 具有該給定屬性的值的對(duì)象。具有由圖6中示出的結(jié)構(gòu)形式的多形態(tài)內(nèi)聯(lián)高速緩存(大小可 改變)或功能等同也是所述裝置的一部分。圖13中顯示的算法的實(shí)現(xiàn)或功能等同可W是所 述裝置的一部分。
      [0174] 多形態(tài)內(nèi)聯(lián)高速緩存可被認(rèn)為是多形態(tài)屬性訪問(wèn)簡(jiǎn)檔的一個(gè)實(shí)現(xiàn)。除了固定大小 陣列高速緩存之外的機(jī)制可被用于在本章節(jié)或本文中其他地方中提供的系統(tǒng)、經(jīng)配置的機(jī) 審喊過(guò)程的任一中用"多形態(tài)屬性訪問(wèn)簡(jiǎn)粋'來(lái)代替"多形態(tài)內(nèi)聯(lián)高速緩存"。例如,可使用 高效增長(zhǎng)的陣列。一種高效增長(zhǎng)陣列的方式是分派更大的陣列,將原始陣列的數(shù)據(jù)復(fù)制到 該陣列中,并清空原始陣列。另一方式是創(chuàng)建鏈接列表、樹(shù)、散列表或其他鏈接結(jié)構(gòu),其將對(duì) 所持有的屬性簡(jiǎn)檔數(shù)據(jù)可用的空間擴(kuò)展到初始陣列中的空間之外。
      [0175] 進(jìn)一步關(guān)注系統(tǒng)S4的變體,其中該系統(tǒng)包括所生成的直接訪問(wèn)代碼,并且其中所 生成的直接訪問(wèn)代碼包括不同類型的對(duì)象的所訪問(wèn)的屬性的屬性訪問(wèn)序列,在一些情況 下,所述類型在W下條件之一被確切地滿足時(shí)針對(duì)所述所訪問(wèn)的屬性是等同的:所有所訪 問(wèn)的屬性是局部屬性,或每個(gè)所訪問(wèn)的屬性來(lái)自原型并且所有所訪問(wèn)的屬性來(lái)自該相同原 型。在一些情況下,所生成的直接訪問(wèn)代碼包括不同類型的對(duì)象的所訪問(wèn)的屬性的屬性訪 問(wèn)序列,并且其中所述屬性訪問(wèn)全部?jī)?nèi)聯(lián)或全部在輔助槽陣列中。
      [0176] 計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)Ml被配置有數(shù)據(jù)和指令,該指令在被至少一個(gè)處理器執(zhí)行時(shí) 使得該處理器執(zhí)行用于使用等同對(duì)象類型??诨瘉?lái)生成針對(duì)動(dòng)態(tài)類型化的編程語(yǔ)言中的 屬性訪問(wèn)序列的機(jī)器代碼的算法過(guò)程。在一特定示例Mia中,當(dāng)對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存 中的類型不是等同的時(shí),該過(guò)程發(fā)出非直接屬性訪問(wèn)代碼,即包括用于針對(duì)不開(kāi)始該屬性 訪問(wèn)序列的至少一個(gè)屬性訪問(wèn)使用多形態(tài)內(nèi)聯(lián)高速緩存的指令的代碼。在一特定示例Mlb 中,當(dāng)對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中的類型是等同的,但是從編譯器值表中沒(méi)有可用的與 從對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中計(jì)算出的經(jīng)高速緩存的類型集進(jìn)行比較的類型集時(shí),該過(guò) 程創(chuàng)建等同類型高速緩存并發(fā)出針對(duì)開(kāi)始該屬性訪問(wèn)序列的屬性訪問(wèn)的類型檢查代碼。在 一特定示例Mlc中,當(dāng)對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中的類型是等同的并且從編譯器值表中 檢索到類型集,但是對(duì)象的多形態(tài)內(nèi)聯(lián)經(jīng)高速緩存的類型集不匹配從編譯器值表中檢索到 的類型集時(shí),該過(guò)程發(fā)出非直接屬性訪問(wèn)代碼。在一特定示例Mid中,當(dāng)對(duì)象的多形態(tài)內(nèi)聯(lián) 高速緩存中的類型是等同的并且對(duì)象的多形態(tài)內(nèi)聯(lián)經(jīng)高速緩存的類型集匹配從編譯器值 表中檢索到的類型集時(shí),該過(guò)程發(fā)出直接屬性訪問(wèn)代碼,該直接屬性訪問(wèn)代碼在執(zhí)行之際 直接地訪問(wèn)在該對(duì)象的存儲(chǔ)器區(qū)域中被硬編碼的偏移處的屬性值。變體Mia、M化、Mlc、Mld 可單獨(dú)出現(xiàn),或與一個(gè)其他變體一起出現(xiàn)(Mla+M化、Mla+Mlc、Mla+Mld、M化+Mlc、M化+Mld、 Mlc+Mld),或與兩個(gè)其他變體一起出現(xiàn)(Mla+M 化+Mlc、Mla+M 化+Mld、Mla+Mlc+Mld、M 化+Mlc +Mld)或它們中的全部可出現(xiàn)在一給定示例中(Mla+M化+Mlc+Mld)。發(fā)出非直接屬性訪問(wèn)代 碼可包括在對(duì)象類型屬性圖中定位屬性的索引W及發(fā)出訪問(wèn)在被屬性的索引所指示的存 儲(chǔ)器位置處的屬性值的代碼。
      [0177] 在Mla、M化、Mlc和/或Mid的運(yùn)些組合的任一中,對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中的 類型僅在確定該多形態(tài)內(nèi)聯(lián)高速緩存中的所有條目都具有與該高速緩存的第一條目相同 的值之后才被確定為是等同的。在運(yùn)些組合中的任一中,只有在確定序列中的屬性訪問(wèn)都 是局部的或者都針對(duì)相同的原型來(lái)作出之后,對(duì)象的等同類型高速緩存中的類型才可被確 定為是等同的。在運(yùn)些組合中的任一中,只有在確定序列中的所有屬性存儲(chǔ)將對(duì)可寫(xiě)屬性 來(lái)作出之后,對(duì)象的等同類型高速緩存中的類型才被確定為是等同的。在運(yùn)些組合中的任 一中,只有在確定訪問(wèn)序列中要被訪問(wèn)的屬性全部都是內(nèi)聯(lián)的或全部都將通過(guò)輔助槽來(lái)訪 問(wèn)之后,對(duì)象的等同類型高速緩存中的類型才被確定為是等同的。
      [0178] 在Mla、M化、Mlc和/或Mid的運(yùn)些組合W及它們的變體的任一中,創(chuàng)建等同類型高 速緩存可至少部分地通過(guò)創(chuàng)建包括指定的防護(hù)類型條目W保持指定的防護(hù)類型的高速緩 存來(lái)完成。指定的防護(hù)類型條目可位于固定大小陣列中,該陣列具有針對(duì)多個(gè)次級(jí)條目來(lái) 保持附加類型的空間。
      [01巧]在Mla、M化、Mlc和/或Mid的運(yùn)些組合W及它們的變體的任一中,該過(guò)程可包括創(chuàng) 建屬性等同性記錄,該屬性等同性記錄具有針對(duì)被單個(gè)類型檢查所防護(hù)的屬性訪問(wèn)序列中 的每個(gè)屬性訪問(wèn)的條目。
      [0180] Mla、M化、Mlc和/或Mid的運(yùn)些組合W及它們的變體的任一還可通過(guò)配置考慮中的 系統(tǒng)的存儲(chǔ)器112和/或配置考慮中的系統(tǒng)的可移動(dòng)介質(zhì)114來(lái)與W上描述的系統(tǒng)S1、S2、 S3、S4W及它們的變體中的任一個(gè)相組合。
      [0181] -種使用等同對(duì)象類型??诨瘉?lái)執(zhí)行動(dòng)態(tài)類型化的編程語(yǔ)言中的屬性訪問(wèn)序列 的過(guò)程Pla包括運(yùn)行代碼,該代碼通過(guò)將對(duì)象類型與等同類型高速緩存的指定的防護(hù)類型 進(jìn)行比較來(lái)進(jìn)行類型檢查。過(guò)程Plb包括執(zhí)行訪問(wèn)在被硬編碼到對(duì)象的存儲(chǔ)器內(nèi)的偏移處 的屬性的值的代碼,而無(wú)需在對(duì)象類型等于指定的防護(hù)類型之后運(yùn)行進(jìn)一步的類型檢查代 碼。過(guò)程Pic包括運(yùn)行類型檢查比較代碼,該代碼在對(duì)象類型不等于指定的防護(hù)類型時(shí)將該 對(duì)象類型與等同類型高速緩存的至少一個(gè)次級(jí)條目進(jìn)行比較。過(guò)程Pld包括執(zhí)行針對(duì)在對(duì) 象存儲(chǔ)器中被硬編碼的偏移處的屬性訪問(wèn)序列的代碼,而無(wú)需在類型檢查比較代碼確定對(duì) 象類型匹配于等同類型高速緩存中的條目之后運(yùn)行進(jìn)一步的類型檢查代碼。此處,如本文 中其他地方那樣,"訪問(wèn)"屬性值指從對(duì)象的存儲(chǔ)器區(qū)域中加載屬性值或?qū)傩灾荡鎯?chǔ)到對(duì) 象的存儲(chǔ)器區(qū)域中。過(guò)程Pie包括執(zhí)行通過(guò)使用與等同類型高速緩存相關(guān)聯(lián)的屬性等同性 記錄來(lái)確定對(duì)象類型是否針對(duì)所訪問(wèn)的屬性與等同類型高速緩存中的類型等同的代碼。
      [0182] 在第一變體中,該過(guò)程包括執(zhí)行至少Ξ個(gè)全部被單個(gè)檢查類型所防護(hù)的動(dòng)態(tài)類型 屬性訪問(wèn)的序列。在第二變體中,該過(guò)程包括通過(guò)插入通過(guò)類型檢查比較代碼的執(zhí)行沒(méi)有 被初始地發(fā)現(xiàn)在等同類型高速緩存的任意條目中的對(duì)象類型來(lái)更新等同類型高速緩存。在 第Ξ變體中,該過(guò)程包括將多個(gè)屬性訪問(wèn)執(zhí)行到不同類型的對(duì)象內(nèi),所有運(yùn)些對(duì)象針對(duì)所 訪問(wèn)的屬性是等同的,并且其中所訪問(wèn)的屬性全部是局部的或全部來(lái)自相同的原型。在第 四變體中,該過(guò)程包括執(zhí)行設(shè)及不同類型的對(duì)象的多個(gè)屬性訪問(wèn),其中所有類型針對(duì)所設(shè) 及的屬性是等同的,并且所訪問(wèn)的屬性全部?jī)?nèi)聯(lián)在對(duì)象的頭部中或所訪問(wèn)的屬性全部在對(duì) 象的輔助槽陣列中。每個(gè)變體可單獨(dú)地發(fā)生,或與其他變體中的任意一個(gè)或多個(gè)組合地發(fā) 生。每個(gè)變體可與過(guò)程Pla、P化、Plc、Pld、Ple中的任一個(gè)一起來(lái)發(fā)生,并且每個(gè)過(guò)程可與其 他過(guò)程中的一個(gè)或多個(gè)相組合。此外,每個(gè)過(guò)程或過(guò)程的組合(包括變體)可與W上描述的 介質(zhì)組合和變體中的任意一個(gè)相組合。
      [0183] 結(jié)語(yǔ)
      [0184] 雖然具體實(shí)施例在此處被明確示出并描述為進(jìn)程、已配置的介質(zhì)、或系統(tǒng),但是可 W理解,對(duì)一種類型的實(shí)施例的討論也一般性地延伸到其他實(shí)施例類型。例如,結(jié)合圖3和 12-15的過(guò)程描述還幫助描述配置的介質(zhì),并幫助描述如結(jié)合其他附圖討論的那些技術(shù)效 果效W及系統(tǒng)和制品等技術(shù)效果W及系統(tǒng)和制品的操作。對(duì)一個(gè)實(shí)施例的限制也不一定適 用于另一個(gè)實(shí)施例。具體而言,進(jìn)程不一定僅限于在討論諸如已配置的存儲(chǔ)器之類的系統(tǒng) 或產(chǎn)品時(shí)呈現(xiàn)的數(shù)據(jù)結(jié)構(gòu)和方案。
      [0185] 本文對(duì)具有某一特征X的實(shí)施例的引用W及本文別處對(duì)具有某一特征Y的實(shí)施例 的應(yīng)用不從具有特征X和特征Y兩者的本公開(kāi)的實(shí)施例中排除,除非運(yùn)一排除在此被明確指 明。所有可能的負(fù)面權(quán)利要求限制在W下意義上在本公開(kāi)的范圍內(nèi):被表述為一實(shí)施例的 一部分的任一特征也可在表達(dá)上從包括在另一實(shí)施例中移除,即使該特定排除沒(méi)有在本文 中任意示例中被給出。術(shù)語(yǔ)"實(shí)施例"在此僅僅被用作過(guò)程、系統(tǒng)、制品、經(jīng)配置的計(jì)算機(jī)可 讀介質(zhì)和7或此處如W與適用法律一致的方式應(yīng)用的教導(dǎo)的其它示例的更方便的形式。" 因此,給定"實(shí)施例"在該實(shí)施例與至少一個(gè)權(quán)利要求一致的情況下可包括此處所公開(kāi)的特 征的任何組合。
      [0186] 不是圖中所示出的每一項(xiàng)都需要存在于每個(gè)實(shí)施例中。相反,實(shí)施例可W包含圖 中未顯式地示出的項(xiàng)。雖然一些可能性在此處通過(guò)具體示例在文本和附圖中示出,但是各 實(shí)施例可W偏離運(yùn)些示例。例如,一示例的具體技術(shù)效果或技術(shù)特征可W被省略、重命名、 W不同的方式分組、重復(fù)、不同地W硬件和/或軟件實(shí)例化,或是在兩個(gè)或更多示例中出現(xiàn) 的效果或特征的混合。在一些實(shí)施例中,在一個(gè)位置示出的功能也可W在不同位置提供;技 術(shù)人員認(rèn)識(shí)到在給定實(shí)現(xiàn)中功能模塊能夠W各種方式定義,而不必從作為一個(gè)整體來(lái)看的 交互模塊的集合中省略所需技術(shù)效果
      [0187] 通過(guò)附圖標(biāo)記參考了附圖。在附圖或文本中與給定附圖標(biāo)記相關(guān)聯(lián)的措詞中的任 何顯而易見(jiàn)的不一致性應(yīng)該被理解為僅僅時(shí)拓寬該標(biāo)記所引用的內(nèi)容的范圍。即使使用相 同的附圖標(biāo)記,給定附圖標(biāo)記的不同實(shí)例也可W指不同的實(shí)施例。
      [0188] 如此處所使用的,諸如"一"和"該"等術(shù)語(yǔ)包括了所指示的項(xiàng)或步驟中的一個(gè)或多 個(gè)。具體而言,在權(quán)利要求書(shū)中,對(duì)一個(gè)項(xiàng)的引用一般表示至少一個(gè)運(yùn)樣的項(xiàng)存在,并且對(duì) 一個(gè)步驟的引用表示執(zhí)行該步驟的至少一個(gè)實(shí)例。
      [0189] 標(biāo)題僅是為了方便;關(guān)于給定話題的信息可在其標(biāo)題指示該話題的章節(jié)之外被尋 找到。
      [0190] 所提交的所有權(quán)利要求和摘要是說(shuō)明書(shū)的一部分。
      [0191] 盡管在附圖中示出并在上文中描述了示例性實(shí)施例,但本領(lǐng)域普通技術(shù)人員將明 白,可作出多種修改而不脫離權(quán)利要求書(shū)中闡明的原理和概念,且運(yùn)些修改不需要涵蓋整 個(gè)抽象概念。盡管用結(jié)構(gòu)特征和/或過(guò)程動(dòng)作專用的語(yǔ)言描述了本主題,但可W理解,所附 權(quán)利要求書(shū)中定義的主題不必限于權(quán)利要求書(shū)上面所描述的具體特征或動(dòng)作。不一定在給 定定義或示例中標(biāo)識(shí)的每一個(gè)手段或方面或技術(shù)效果都在每個(gè)實(shí)施例中存在或使用。相 反,所描述的具體特征和動(dòng)作W及效果是作為供當(dāng)實(shí)現(xiàn)權(quán)利要求書(shū)時(shí)考慮的示例來(lái)公開(kāi) 的。
      [0192] 無(wú)法包圍整個(gè)抽象概念但落入權(quán)利要求的等效技術(shù)方案的意義和范圍內(nèi)的所有 改變都在法律所準(zhǔn)許的最大程度內(nèi)被包含在其范圍內(nèi)。
      【主權(quán)項(xiàng)】
      1. 一種用于生成并執(zhí)行針對(duì)在動(dòng)態(tài)類型化的編程語(yǔ)言中的屬性訪問(wèn)的機(jī)器代碼,所述 系統(tǒng)包括: 至少一個(gè)處理器; 與所述處理器能操作上通信的存儲(chǔ)器;以及 以下中的至少一個(gè): (a) 直接訪問(wèn)代碼生成器,所述直接訪問(wèn)代碼生成器發(fā)出針對(duì)屬性訪問(wèn)的直接訪問(wèn)代 碼以訪問(wèn)對(duì)象的屬性,所述對(duì)象具有一類型,所述直接訪問(wèn)代碼在以下條件被滿足時(shí)被發(fā) 出:在對(duì)應(yīng)于所述屬性訪問(wèn)的多形態(tài)內(nèi)聯(lián)高速緩存中標(biāo)識(shí)的類型是等同的,以及從所述多 形態(tài)內(nèi)聯(lián)高速緩存中檢索的類型集與與編譯器值表中的所述對(duì)象的類型相關(guān)聯(lián)的類型集 相匹配; (b) 針對(duì)屬性訪問(wèn)的用于訪問(wèn)對(duì)象的屬性的所生成的直接訪問(wèn)代碼,所述屬性訪問(wèn)屬 于屬性訪問(wèn)序列,所述對(duì)象具有一類型和存儲(chǔ)器區(qū)域,并且其中所述直接訪問(wèn)代碼在執(zhí)行 之際訪問(wèn)被定位在所述對(duì)象的存儲(chǔ)器區(qū)域中被硬編碼的偏移處的所述屬性的值,并訪問(wèn)所 述值,而在比較類型檢查確定所述對(duì)象的類型匹配于與所述屬性訪問(wèn)序列相關(guān)聯(lián)的等同類 型高速緩存中的條目之后無(wú)需要求進(jìn)一步的類型檢查;或 (C)屬性等同性記錄,所述屬性等同性記錄針對(duì)被單個(gè)類型檢查所防護(hù)的屬性訪問(wèn)序 列中的每個(gè)屬性訪問(wèn)具有一個(gè)條目。2. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述系統(tǒng)包括所述直接訪問(wèn)代碼生成器,并 且所述直接訪問(wèn)代碼生成器根據(jù)以下中的至少一個(gè)來(lái)操作: (a) 所述多形態(tài)內(nèi)聯(lián)高速緩存的條目包括屬性索引,并且僅在與給定屬性訪問(wèn)相關(guān)聯(lián) 的多形態(tài)內(nèi)聯(lián)高速緩存中的所有條目都包括與所述多形態(tài)內(nèi)聯(lián)高速緩存中的第一條目相 同的屬性索引之后才確定所述多形態(tài)內(nèi)聯(lián)尚速緩存中的類型為等同的; (b) 與給定屬性訪問(wèn)相關(guān)聯(lián)的多形態(tài)內(nèi)聯(lián)高速緩存中的類型僅在確定以下條件之一被 確切地滿足之后才被確定為等同的:所述多形態(tài)內(nèi)聯(lián)高速緩存中的所有類型都描述包括所 述給定屬性的對(duì)象,或所述多形態(tài)內(nèi)聯(lián)高速緩存中的所有類型都描述共享原型的對(duì)象并且 所述原型包括所述給定屬性; (c) 與給定屬性訪問(wèn)相關(guān)聯(lián)的多形態(tài)內(nèi)聯(lián)高速緩存中的類型僅在確定以下條件之一被 確切地滿足之后才被確定為等同的:所述多形態(tài)內(nèi)聯(lián)高速緩存中的所有類型都描述在對(duì)象 的頭部上的槽中具有所述給定屬性的值的對(duì)象,或所述多形態(tài)內(nèi)聯(lián)高速緩存中的所有類型 都描述在對(duì)象的輔助槽陣列上的槽中具有所述給定屬性的值的對(duì)象。3. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述系統(tǒng)包括所述所生成的直接訪問(wèn)代碼, 并且其中所述所生成的直接訪問(wèn)代碼包括全部被單個(gè)類型檢查所防護(hù)的動(dòng)態(tài)類型屬性訪 問(wèn)序列。4. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述系統(tǒng)包括所述所生成的直接訪問(wèn)代碼, 并且其中所述所生成的直接訪問(wèn)代碼包括不同類型的對(duì)象的所訪問(wèn)的屬性的屬性訪問(wèn)序 列,并且其中以下條件中的至少一個(gè)具有: 所述類型針對(duì)所述所訪問(wèn)的屬性是等同的,并且以下條件之一被確切地滿足:所有所 訪問(wèn)的屬性是局部屬性,或每個(gè)所訪問(wèn)的屬性來(lái)自原型并且所有所訪問(wèn)的屬性來(lái)自該相同 原型; 所述屬性訪問(wèn)全部是內(nèi)聯(lián)的,或所述屬性訪問(wèn)全部在輔助槽陣列中。5. -種被配置有數(shù)據(jù)和指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述指令在被至少一個(gè)處理器執(zhí) 行時(shí)使得所述處理器執(zhí)行用于使用等同對(duì)象類型專門化來(lái)生成針對(duì)動(dòng)態(tài)類型化的編程語(yǔ) 言中的屬性訪問(wèn)序列的機(jī)器代碼的算法過(guò)程,所述過(guò)程包括以下步驟: (a) 當(dāng)對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中的類型不是等同的時(shí),發(fā)出非直接屬性訪問(wèn)代碼, 即包括用于針對(duì)不開(kāi)始所述屬性訪問(wèn)序列的至少一個(gè)屬性訪問(wèn)使用多形態(tài)內(nèi)聯(lián)高速緩存 的指令的代碼; (b) 當(dāng)所述對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中的類型是等同的,但是從編譯器值表中沒(méi)有 可用的與從所述對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中計(jì)算出的經(jīng)高速緩存的類型集進(jìn)行比較的 類型集時(shí),創(chuàng)建等同類型高速緩存并發(fā)出針對(duì)開(kāi)始所述屬性訪問(wèn)序列的屬性訪問(wèn)的類型檢 查代碼; (c) 當(dāng)所述對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中的類型是等同的并且從編譯器值表中檢索到 類型集,但是所述對(duì)象的多形態(tài)內(nèi)聯(lián)經(jīng)高速緩存的類型集不匹配從所述編譯器值表中檢索 到的類型集時(shí),發(fā)出非直接屬性訪問(wèn)代碼;以及 (d) 當(dāng)所述對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中的類型是等同的并且所述對(duì)象的多形態(tài)內(nèi)聯(lián) 經(jīng)高速緩存的類型集匹配從所述編譯器值表中檢索到的類型集時(shí),發(fā)出直接屬性訪問(wèn)代 碼,所述直接屬性訪問(wèn)代碼在執(zhí)行之際直接地訪問(wèn)在所述對(duì)象的存儲(chǔ)器區(qū)域中被硬編碼的 偏移處的屬性值。6. 如權(quán)利要求5的經(jīng)配置的存儲(chǔ)介質(zhì),其特征在于,所述對(duì)象的多形態(tài)內(nèi)聯(lián)高速緩存中 的類型僅在確定所述多形態(tài)內(nèi)聯(lián)高速緩存中的所有條目都具有與所述高速緩存的第一條 目相同的值之后才被確定為是等同的。7. 如權(quán)利要求5的經(jīng)配置的存儲(chǔ)介質(zhì),其特征在于,只有在確定序列中的屬性訪問(wèn)都是 局部的或者都針對(duì)相同的原型來(lái)作出之后,所述對(duì)象的等同類型高速緩存中的類型才被確 定為是等同的。8. 如權(quán)利要求5的經(jīng)配置的存儲(chǔ)介質(zhì),其特征在于,只有在確定序列中的所有屬性存儲(chǔ) 將對(duì)可寫(xiě)屬性來(lái)作出之后,所述對(duì)象的等同類型高速緩存中的類型才被確定為是等同的。9. 如權(quán)利要求5的經(jīng)配置的存儲(chǔ)介質(zhì),其特征在于,只有在確定訪問(wèn)序列中要被訪問(wèn)的 屬性全部都是內(nèi)聯(lián)的或全部都將通過(guò)輔助槽來(lái)訪問(wèn)之后,所述對(duì)象的等同類型高速緩存中 的類型才被確定為是等同的。10. 如權(quán)利要求5的經(jīng)配置的存儲(chǔ)介質(zhì),其特征在于,創(chuàng)建等同類型高速緩存至少部分 地通過(guò)創(chuàng)建包括指定的防護(hù)類型條目以保持指定的防護(hù)類型的高速緩存來(lái)完成,并且其中 所述指定的防護(hù)類型條目在固定大小陣列中,所述陣列具有針對(duì)多個(gè)次級(jí)條目以保持附加 類型的空間。11. 權(quán)利要求5的經(jīng)配置的存儲(chǔ)介質(zhì),其特征在于,所述過(guò)程還包括創(chuàng)建屬性等同性記 錄,所述屬性等同性記錄具有針對(duì)被單個(gè)類型檢查所防護(hù)的屬性訪問(wèn)序列中的每個(gè)屬性訪 問(wèn)的條目。12. -種用于執(zhí)行使用等同對(duì)象類型專門化的動(dòng)態(tài)類型化的編程語(yǔ)言中的屬性訪問(wèn)序 列的算法過(guò)程,所述過(guò)程包括: (a)運(yùn)行通過(guò)將對(duì)象類型與等同類型高速緩存的指定的防護(hù)類型進(jìn)行比較來(lái)進(jìn)行類型 檢查的代碼; (b) 當(dāng)所述對(duì)象類型等于所述指定的防護(hù)類型時(shí),無(wú)需運(yùn)行進(jìn)一步的類型檢查代碼,執(zhí) 行訪問(wèn)被硬編碼到對(duì)象的存儲(chǔ)器內(nèi)的偏移處的屬性的值的代碼; (c) 當(dāng)所述對(duì)象類型不等于所述指定的防護(hù)類型時(shí),運(yùn)行將所述對(duì)象類型與所述等同 類型高速緩存的至少一個(gè)次級(jí)條目進(jìn)行比較的類型檢查比較代碼; (d) 當(dāng)所述類型檢查比較代碼確定所述對(duì)象類型匹配所述等同類型高速緩存中的任一 條目時(shí),無(wú)需運(yùn)行進(jìn)一步的類型檢查代碼,執(zhí)行針對(duì)所述屬性訪問(wèn)序列的代碼,每個(gè)屬性訪 問(wèn)加載屬性值或存儲(chǔ)屬性值,每個(gè)屬性訪問(wèn)訪問(wèn)被硬編碼到對(duì)象的存儲(chǔ)器內(nèi)的偏移處的位 置;以及 (e) 當(dāng)所述類型檢查比較代碼確定所述對(duì)象類型不于所述等同類型高速緩存中的任意 條目匹配時(shí),執(zhí)行通過(guò)使用與所述等同類型高速緩存相關(guān)聯(lián)的屬性等同性記錄來(lái)確定所述 對(duì)象類型是否等同于關(guān)于所訪問(wèn)的屬性的等同類型高速緩存中的類型的代碼。13. 如權(quán)利要求12所述的過(guò)程,其特征在于,包括執(zhí)行至少兩個(gè)全部被單個(gè)檢查類型所 防護(hù)的動(dòng)態(tài)類型屬性訪問(wèn)的序列。14. 如權(quán)利要求12所述的過(guò)程,其特征在于,包括將多個(gè)屬性訪問(wèn)執(zhí)行到不同類型的對(duì) 象內(nèi),所有這些對(duì)象針對(duì)所訪問(wèn)的屬性是等同的,并且其中所訪問(wèn)的屬性全部是局部的或 全部來(lái)自相同的原型。15. 如權(quán)利要求12所述的過(guò)程,其特征在于,包括執(zhí)行涉及不同類型的對(duì)象的多個(gè)屬性 訪問(wèn),其中所有類型針對(duì)所涉及的屬性是等同的,并且所訪問(wèn)的屬性全部?jī)?nèi)聯(lián)在對(duì)象的頭 部中或所訪問(wèn)的屬性全部在對(duì)象的輔助槽陣列中。
      【文檔編號(hào)】G06F9/44GK105830025SQ201480069909
      【公開(kāi)日】2016年8月3日
      【申請(qǐng)日】2014年12月5日
      【發(fā)明人】J·("A")·米亞多維茨, P·A·萊瑟斯, L·拉弗里尼爾, 沙特拉 B·G·阿比集思, C·C-C·曼
      【申請(qǐng)人】微軟技術(shù)許可有限責(zé)任公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1