




已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀
(計(jì)算機(jī)軟件與理論專業(yè)論文)java程序部分求值描述語言及其應(yīng)用框架.pdf.pdf 免費(fèi)下載
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
摘愛 摘要 部分求值是啼婿呈序優(yōu)化技術(shù),又稱為程序例化技術(shù),是通過程序變換把一個(gè)具 有般計(jì)算功能的程序系統(tǒng)變成為個(gè)專用的程序系統(tǒng),來達(dá)到提高程序執(zhí)行效率的 目的。尤其是在需要重復(fù)多次執(zhí)行專用系統(tǒng)的青況下,部分求值的優(yōu)化效果會非常明 顯。 部分求值技術(shù)是解決程序通用性和專用性之間矛盾的種有效手段。根據(jù)程序的 輸入,自動(dòng)判斷輸入的性質(zhì),提取出程序其中經(jīng)常重復(fù)執(zhí)行、并具有相同結(jié)果的部分, 于巴通用程序轉(zhuǎn)換成其各一定程度上的專用程序,從而緩解該矛盾。 對于經(jīng)過部分求值處理之后的j a 忸程序,盡管在執(zhí)行效率上得到了改善,并且計(jì) 算結(jié)果與原始j a 慣程序的計(jì)算結(jié)果完全一致,但程序之間的接口卻發(fā)生了顯著的改 變。 在部分求值處理過程中,需要向部分求值器傳遞原始程序的參數(shù)動(dòng)靜狀態(tài)信息, 以便部分求值器判斷原始程序中每個(gè)變量和表達(dá)式的狀態(tài),并決定處理這些變量和表 達(dá)式的方式。 為了方便部分求值這種軟件自動(dòng)化技術(shù)的應(yīng)用,本文提出了種面向j a v a 語言的 部分求值描述語言,以及應(yīng)用模型,并實(shí)現(xiàn)了相應(yīng)的應(yīng)用框架自動(dòng)生成系統(tǒng)。鑒于j a v a 程序的多樣性,j p e s l 描述語言必須能夠描述部分求值器處理各種j a v a 應(yīng)用時(shí)所需的 信息,以便部分求值器進(jìn)行部分求值處理。為此,除了提供描述通用信息的語法規(guī)則 之外,j p e s l 描述語言還提供了描述r 加應(yīng)用和a p p l e t 應(yīng)用的語法規(guī)則。 關(guān)鍵詞:部分求值,描述語言,程序自動(dòng)生成,j p e s l 北京工業(yè)大學(xué)工學(xué)碩士學(xué)位論文 a b s t r a c t p 枷a le v a l 咖o ni sa 虹n do ft 。c h l 0 1 0 9 yo fp m g r a m0 p 血n i z a t i o n ,a l s 0c a l l e dp r o g r a m s p e c i a d o n t l 】i si sas y s 協(xié)nw 1 1 i c h 昀n s 旬r i t la 寥f l e r a lp r o g m m 幻a 刪a lp i - 0 眥c o l r 印v e t h e e 伍c i e n c y o f m e p r | d g m m 酗i a l l y i i l 血es i n l 面o n m 砒n d s 旺e c u t e 吐1 e s p e c i a l p m g 瞄1 1 1r e p e a 螄m e e 丘k i sw mb e v e 呵r l o 協(xié)k f 恤a le 涮嘶o ni sav a 塒m e 吐1 0 dt 0s 0 l v em e 刪c tb c h e 咎n 拋i i z a 士i o na n d s p e c i a 螄o r l w i nj u d 薩t 1 1 ep i d p e r c yo fp r o g 聊mi 印u td a t a 鯽幻n 1 卸j c a l l m a n d 鍘m i c f 也e f ,o 而伽w k c h w i l l b c 瓤c c m e d r q 刪y i i l p i o 曇i a m ,和d 擘e t 黜r e s 此s o w mg e c ap i o 皇陽m w i m a c 叭a i ne ) ( t 耐o f 馳捌o n t 0a l l e v i 疵m e 1 1 丑i c l 7 i kj a v ap m g 衄:1 1 v e 耐船p a m a le v a l u 撕o n 柏璐向毗l a l i o n o v mr e c e i v eb e c 時(shí)e 壓c i e l l c y a n ds 硼e e x e c 皿o n 托s u n b u 蛐e j i i 嘧自c e b e 訛憾l p r 曜印m w m c b _ a r l 8 c r e m a r k a b 恥 i n 小ec 咄o f p 枷a le v a h 洳位呱自m l a l i o n ,p 枷a le v a h l 鋤0 rw i l lm q 味她抽f o f l t 洳 o f p 礬仰就鍶o f 蕊醢訶p i 啪t o j u d g e 也es 【a 鈀o f 嘲yv 缸a b k s 讞戧p r 鶴s i o n s 證 o r i 季砌p 刪驢1 1 1 鋤d d e 嘲麗n e t 】e m o d e t o d e a l 州m t h 髑e v a r i 曲l e s 鋤d a ( p r 囂如m 1 1 1l 量l i st b e 蠡s ,ho i d 盯幻f 配i 】主t a t et h e 印p u c 撕o no f p a a 1e v a h 捌婦l 、e 蘆o p o s ef o n a i da p 枷a le v a l u 撕o n 甲。c i 丘c a 如1l a l 】g g e 衙j a v a a n d i 乜印p h c 缸0 n 勛m 跗刪:k ,m o r 0 0 v w e h a d i m p l e n l t e dac 0 玳哪0 1 1 d i n g 印p h c 撕o n i 1 1 t e r f a c ea t 】婦m 血薩明碰o ns y 吐c m f o rm e 廿1 r e ea p p k 撕o nf 0 玎1 1 si 1 1j a v a0 0 c a lp m g m ,l n _ r 鋤l ei n v 0 c 撕0 np r o g m a n d a p p 蛾 p r o g 唧均,p a m a l e v a l 刪o ns p 。c i 撕0 nl 柚孵刪d e ss e 睢c o n l a i l l e dj i l 向m 撕o n 南r 吐l e a p p h c 鰣o nm 魄白c e 刪細(xì)m 撕c 群n 蒯o ns y s 咖w 色a l s 0d i s c u 鼴l l c 印p 撕吼m o d e l s u s e d b y 印p h c 撕0 n i n t e r f 犯e i i l 廿1 i s p 印既 i ( e y w o r d sp a 撕a lc 、,a 1 咖a 瑪即e c i ! 丘c 撕o nl a l l 睜【a 爐,p m 翹哺m a u 協(xié)m 撕c g 蝴鐘蕊o r k 擇琶s l 第一章緒論 郝分求值概述 第一章緒論 部分求疆是一哥 疆澎綻純技術(shù),又稼麓程痔鏹化,是遴遙程| 事受抉把個(gè)其有一 般計(jì)算功能的程序系統(tǒng)變成為專用程序系統(tǒng),來達(dá)到提高程序執(zhí)行效率的目的。尤其 是在需簧重復(fù)多次魏行專鞠系統(tǒng)靜情囂下,幫鄉(xiāng) 隸餐盼淺純效采# 常銹顯。 通用程序往往為了保證在各種可能的輸入條件下部能正常運(yùn)行,$ 琶供了許移通用 弋瑪。毽慰予那塑經(jīng)零反笈發(fā)生鑫冬輸入條籜,通蒡;疆黼沒有褪供其裔鎊對注豹代碼, 而使用通用代碼統(tǒng)一對待。在這種情況下,程序眭能必定不理想。如果不考慮粳序的 逶援性,專f 1 為經(jīng)常發(fā)生豹稔入條 譬鎬寫專瘸程窿,那么不僅會黼e 工作受趲,麗置 還會使程穿的應(yīng)用范圍變得非常狹窄。 部分求篷按) l 之是解決糕聲逶躅經(jīng)鞠專鬻健之闋矛藩豹耪蠢效手羧。宅綴攢疆凈 的輸入,自動(dòng)判斷輸入的性質(zhì),提取出程序其中經(jīng)常熏復(fù)執(zhí)行、并具有相同結(jié)聚的部 分,把遴瘸程序轉(zhuǎn)換 一定黻上凝各專震靛熬程澎,鈦瑟緩解該矛瓣。 在本學(xué)位論文中,主要介紹部分求值技術(shù)在j a 忸程寧優(yōu)化方面的成用和實(shí)踐。在 這里,聱分求篷耪搖_ | 莘鍘純其有程潮豹含義。 在部分求值過程中,將首先判斷輸 參數(shù)的性質(zhì),判斷出哪些參數(shù)為靜態(tài)參數(shù), 緩些為動(dòng)態(tài)參數(shù),并攫據(jù)這些癌惠標(biāo)記程露,然蓐搽攘標(biāo)記蕊惑產(chǎn)生壤應(yīng)靜滲辯程亭 和例化程序。在部分求值醴程中,能夠確定其具體值的表達(dá)式或者變量,稱為靜態(tài)變 爨;反之,就是動(dòng)態(tài)交量。然后,澇整程痔怒剩下款羧入?yún)?shù)籜為叁己輸入,接行 滯留程序后,即。目r 產(chǎn)生最終結(jié)果。 1 2 部分求值基本原理 部分求值技術(shù)本身是一種程j 袱化技術(shù),能夠改蔣程序代隅的執(zhí) j :效率;同時(shí), j a 垤本身囊子蓑顳跨乎臺姆建,因救j a v a 在貍序執(zhí)行效率上存襲先天疑陵。這耱現(xiàn)實(shí) 北京工業(yè)大學(xué)工學(xué)碩士學(xué)位論文 狀況促成了部分求值技術(shù)在j a v a 領(lǐng)域的應(yīng)用。 本項(xiàng)目的主要目的是為了實(shí)現(xiàn)一個(gè)j a v a 軟件工具,提供了程序動(dòng)態(tài)部分求值功能。 紐童動(dòng)態(tài)部分求值之后的;a 忱程序,能夠根據(jù)當(dāng)前的運(yùn)行環(huán)境實(shí)時(shí)優(yōu)化自身結(jié)構(gòu),從 而實(shí)現(xiàn)程序邏輯上的優(yōu)化,同時(shí)提高運(yùn)行效率。 下面給出了一個(gè)簡單的范例來解釋一些基本的部分求值原理。 在該范例中,原始程序如圖1 1 所示,有一個(gè)函數(shù)勛z ) 來計(jì)算x 的n 次方。在某 些特定的青況下,我們需要多次計(jì)算x 的5 次方,這樣,我們能夠確定兩個(gè)輸 參數(shù) 中的個(gè),即參數(shù)n 。根據(jù)這個(gè)已經(jīng)確定的參數(shù)n ,把原始代碼修改為圖1 2 所示的程 亭代碼。 圖1 1 原始程序代碼 f i g u r e1 - lq i 醇?xì)趌 p h 礤n c o d e 圖1 - 2 當(dāng)n 等于5 時(shí),進(jìn)行的例化處理 f i 昏聰1 2i f ne c f 腳s5 爿,e c i a i j 縐6 0 n 缸娟加蛐五餅1 當(dāng)輸 參數(shù)n 等于5 的情況下,將原始代碼進(jìn)行部分求值處理,得到個(gè)滯留程 序,即圖1 - 2 所示代碼。與原始代碼相比,與n 相關(guān)的計(jì)算已經(jīng)提前完成,消除了無 ,廷哆 支,所以圖1 之所示代碼結(jié)構(gòu)非常簡潔,因此具備較高的運(yùn)行效率,而且運(yùn)行結(jié) 果同原始代碼完全相同。 顯然,經(jīng)過部分求值處理的代碼在結(jié)構(gòu)上得到了更具針對性的優(yōu)化。當(dāng)n = 5 的輸 入條件下,我們可以不必使用通用的原始代碼,而是直接使用經(jīng)過專門優(yōu)化的代碼來 進(jìn)行剩余的計(jì)算。 鵝一章緒論 注意:在這個(gè)例子中,因?yàn)槌绦虻目刂屏鞒谈嗟氖怯蓞?shù)n 決定,因此如果能 夠事先確定參數(shù)n 的輸入,即n 為靜態(tài)參數(shù),那么經(jīng)過部分求值處理后的優(yōu)化效剽辱 會十分明顯。相反,參數(shù)x 對程序流程的影響并不大,因此在x 為靜態(tài)參數(shù)的隋況下, 部分求值的優(yōu)化效果就不是十分理想。 1 3 部分求值的分類 1 3 1 在線例化和離線例化 根據(jù)程申例化的流程,可以把部分求值技術(shù)分為兩類:在線例化和離線例化。 在線例化方法是在處理程序的同時(shí),也完成了程序的轉(zhuǎn)換,這種部分求值方法將 會根據(jù)原始程箭日靜態(tài)數(shù)據(jù)生成滯留程序。但是在線例化要求輸入靜態(tài)數(shù)據(jù),即輸入 具體的參數(shù)值。在線例化的基本流程請參閱圖1 3 。 圖1 - 3 在線例化流程 f i 毋e l - 3 0 咄m 印e d 出蜘帆n o w 離線例化方法包含兩個(gè)階段:預(yù)處理階段和例化階段。在預(yù)處理階段,將原始程 序和輸入數(shù)據(jù)作為預(yù)處理器的輸入,預(yù)處理器將會輸出對應(yīng)的標(biāo)注程序。標(biāo)注程序中 給出了程序中變量和各種表達(dá)式綁定時(shí)間的靜態(tài)和動(dòng)態(tài)劃分信息。在例化階段,將靜 態(tài)數(shù)據(jù)作為部分求值器的輸入,根據(jù)預(yù)處理階段生成的標(biāo)注程序,生成滯留程序。離 線侈4 化方法的基本流程請參閱圖1 _ 4 。 北京工業(yè)大學(xué)工學(xué)碩士學(xué)位論史 f 漏聹jf 輸入數(shù)據(jù) l 蘭f 1 l 預(yù)處理器l i l 標(biāo)注程序靜態(tài)輸 數(shù)據(jù) l l 、,。,。 i 部一1 1 | 滯留程序i 、- ,j 圖l _ 4 離線例化流程 f i g 哼1 4 0 m 婦s p 舒吐z 嘶b a w 從圖1 3 可以看出,在線例化只需一步,而目程序中每個(gè)表達(dá)式部可以根據(jù)靜態(tài) 數(shù)據(jù)確定自己的輸出,即計(jì)算出實(shí)際數(shù)據(jù)還是產(chǎn)生滯留程序代碼。這種方法的優(yōu)點(diǎn)是 對變量和表達(dá)式的處理比較精確,能夠充分利用靜態(tài)數(shù)據(jù)。但由于靜態(tài)數(shù)據(jù)是在進(jìn)行 部分求值處理的時(shí)候輸入的,是預(yù)先確定的,而不是運(yùn)行時(shí)刻實(shí)時(shí)輸入的數(shù)據(jù),因此 數(shù)據(jù)比鉸局限,因此在線例化的效率并不理想。 在離線例化中,預(yù)處理階段通常包含一個(gè)約束時(shí)間分析( 也稱綁定時(shí)間分析或 瑚噙) 過程。在約束時(shí)間分析過程中,將會根據(jù)程宇輸入?yún)?shù)的動(dòng)靜狀態(tài)來決定程序 內(nèi)部代碼中其余變量和表達(dá)式的動(dòng)靜狀態(tài)。在例化階段,將會根據(jù)代碼中變量和表達(dá) 式的動(dòng)靜狀態(tài),進(jìn)行不同的處理,即計(jì)算出靜態(tài)數(shù)據(jù)的具體結(jié)果,或保留動(dòng)態(tài)部分的 計(jì)算,并生成滯留程序。由于這種方法在預(yù)處理階段不必考慮靜態(tài)數(shù)據(jù),因此效率相 坤陵高。而且,由于該崩去首先生蒯戚拚呈序,然后再生j $ 錯(cuò)留程序,因此通用性較 高。 第一章緒論 1 _ 3 2 編譯部分求值和運(yùn)行部分求值 由于部分求值是根據(jù)輸入數(shù)據(jù)中的不變量來別化程申,而不變又是相對的,也就 是說,有些變量的值在編譯時(shí)刻就已經(jīng)知道,而有些變量的值只有在運(yùn)行時(shí)亥惻一能知 道。根據(jù)確定不變量的時(shí)間,把部分求值應(yīng)用分為編譯部分求值和運(yùn)行部分求值。 編譯部分求值又叫靜態(tài)部分求值,是一種比較傳統(tǒng)的部分求值方法。該方法在編 譯時(shí)刻使用能夠確定的變量值來例化程序,該過程位于程j 韻重行之前。這種部分求值 技術(shù)已弳應(yīng)用于很多領(lǐng)域,例如編譯器生成、科學(xué)計(jì)算、計(jì)算機(jī)圖形和數(shù)據(jù)庫系統(tǒng)等。 現(xiàn)在關(guān)于編譯時(shí)刻部分求值的研究已經(jīng)產(chǎn)生了很多的原理和技術(shù),并目適用于各種編 程語言?,F(xiàn)在的研究主題包括:高層次語言的終結(jié)分析,強(qiáng)制性語言結(jié)構(gòu)的部分求值 和快速綁定時(shí)間分析。 運(yùn)行部分求值是在程序j 蠶行時(shí)刻,根據(jù)動(dòng)態(tài)不變量進(jìn)行程序例化,這種例化叫做 運(yùn)行時(shí)刻例化,也叫動(dòng)態(tài)例化。它是在程序執(zhí)行時(shí)取得變量的值,對不變量影響的一 段程序進(jìn)行例化產(chǎn)生滯留程序段。對于c 語言,這個(gè)工作已經(jīng)完成了,它基于編譯時(shí) 刻例化技術(shù)的基礎(chǔ)。運(yùn)行時(shí)亥捌化并不象通常那樣被分為兩個(gè)階段,因?yàn)樗歉鶕?jù)在 運(yùn)行日j 刻的各個(gè)階段確定的不變量值來逐漸例化程序的。動(dòng)態(tài)部分求值的優(yōu)化方法可 以大:埒黽高程序的執(zhí)行效率。目前,動(dòng)態(tài)部分求值已經(jīng)廣泛應(yīng)用于操作系統(tǒng)和圖像處 理等諸多 g 轷1 田l 田】。 1 4 國內(nèi)外的研究現(xiàn)狀 部分求值技術(shù)目前在國際上主要有兩個(gè)系統(tǒng),都是c 語言的部分求值系統(tǒng),而我 們的項(xiàng)目則是對部分求值技術(shù)進(jìn)行創(chuàng)新和改進(jìn),應(yīng)用在了目前非常流行的、具有效率 挖掘潛力的j a v a 語言上。 1 4 1c m 奴 c - m 奴是哥本哈根大學(xué)t o p p s 研究組開發(fā)的個(gè)c 語言部分求值系統(tǒng),能夠完 成c 程序的靜態(tài)部分求值。系統(tǒng)采用基于控制流圖的綁定時(shí)間分析技術(shù),通過生成應(yīng) 北京工業(yè)大學(xué)t 學(xué)碩士學(xué)位論文 垌程序的生成擴(kuò)展器,來完成c 程序的部分求值。生成擴(kuò)展器的運(yùn)行將接收輸入數(shù)據(jù), 訇螺努態(tài)計(jì)算,進(jìn)行循環(huán)展開、常數(shù)代八和函數(shù)例化等程序優(yōu)化,生成c 程序的滯 留程序。c m i 】( 在科學(xué)計(jì)算,圖形學(xué),操作系統(tǒng)等領(lǐng)域已經(jīng)有了有效的應(yīng)用。但是, c m i ) ( 不能直接生成滯留程序的目標(biāo)代碼, 序例化,不可避免的存在代碼膨脹的問題, 1 4 2 娜 不支持運(yùn)行時(shí)刻部分求值的功能。作為程 會響程序的執(zhí)行效率。 ,r 咖p 0 是法國u s a 大學(xué)c 0 m p 0 研究組開發(fā)的個(gè)c 語言部分求值系統(tǒng),支 持c 程序的編譯時(shí)刻部分求值和運(yùn)行時(shí)刻部分求值。系統(tǒng)采用基于模板的動(dòng)態(tài)代碼生 成技術(shù);在編譯階段,根據(jù)綁定時(shí)間分析等程申分析技術(shù)的結(jié)果,生成目標(biāo)代碼模板, 以模扳參數(shù)的形式支持靜態(tài)計(jì)算結(jié)果的保存:并且產(chǎn)生生成擴(kuò)展器。在程序例化階段, 7 成擴(kuò)展器 賣取靜態(tài)輸 ,完成靜態(tài)計(jì)算,將計(jì)算結(jié)果填入目標(biāo)代碼模扳;并且,通 過模板的復(fù)制和拼接,完成滯留程序的生成。t e m p 0 也有一定程度的應(yīng)用,t 目1 1 p 0 對 s 吼的r p c 協(xié)議進(jìn)行改造優(yōu)化,總體性能提高了1 5 倍,而優(yōu)化舌的進(jìn)程調(diào)度程序的 效率,提高至原來的3 7 5 倍。在t e 徹p o 中,滯留程序目標(biāo)代碼的直接生成使得應(yīng)用 程序能夠在運(yùn)行時(shí)刻得到高性能的目標(biāo)程序,但也可能防礙了某些傳統(tǒng)的代碼優(yōu)化技 術(shù)的使用。另一方面,滯留程序的代碼長蚵能遠(yuǎn)遠(yuǎn)超過源程序代碼的長度。 在本項(xiàng)目中,基于控制流圖的離線數(shù)據(jù)伊i 化技術(shù)采用了根據(jù)控制流圖進(jìn)行程序分 析和程序變換的技術(shù)。在一定程度上,可以利用c 郴x 前端的程序分析,以及生成擴(kuò) 腱器的構(gòu)造方法。不同之處在于g m i x 系統(tǒng)構(gòu)造的生成擴(kuò)展器將用于構(gòu)造滯留程序, 而我們的離線數(shù)據(jù)例化系統(tǒng)將產(chǎn)生控制流圖的生成器。生成的控制流圖數(shù)據(jù)能夠用于 編譯時(shí)刻例化,也可以直接用于運(yùn)行時(shí)亥唰化。同時(shí),系統(tǒng)也完全避免了程序的代碼 膨脹。和1 b m 的動(dòng)態(tài)代碼生成技術(shù)相比,基于控制流圖的數(shù)據(jù)例化通過生成搭剮流 圖數(shù)據(jù)的方法代替了代碼模板的復(fù)錕印拼接,控制流圖生成器的復(fù)存牲明顯地低于程 序生成擴(kuò)展器,從而簡化了編譯生成器的實(shí)現(xiàn)難度:同時(shí),完全避免了滯留程序的代 碼膨脹。同c m i ) ( 和晰為代表的程序例化技術(shù)相比,基于控制流圖的數(shù)據(jù)例化具 自- 無代碼膨脹,實(shí)現(xiàn)簡單的優(yōu)點(diǎn);然而,這些優(yōu)勢的取得是以犧牲常數(shù)代入等程f 爭優(yōu) 化機(jī)會為代價(jià)的。它能夠完成控制轉(zhuǎn)移的優(yōu)化,但控制流圖的使用仍有一定的解釋負(fù) 第一章緒論 擔(dān);它采用了在運(yùn)行時(shí)刻傳遞基本塊參數(shù)的方法,其執(zhí)行效率將明顯地低于程序例化 實(shí)現(xiàn)的常數(shù)代入。因此,從原理上講,這種技術(shù)更適合于處理規(guī)模較大的應(yīng)用程序, 更易于在運(yùn)行時(shí)亥螂分求值中發(fā)揮其優(yōu)勢。 北京工業(yè)大學(xué) 學(xué)碩上學(xué)位論文 2 1 簡介 第二章系統(tǒng)概述 本系統(tǒng)是個(gè)應(yīng)用于j a :v a 語言的部分求值系統(tǒng),致力于使用部分求值技術(shù)對j a v a 程序進(jìn)行變化,以達(dá)蛩 p 0 化系統(tǒng)陛能的目的。通過讀入j a v a 原始程序,并結(jié)合靜態(tài)數(shù) 據(jù),經(jīng)過部分求值器的處理,生成滯留程序、中間結(jié)果和程序控制信息,而這里的滯 留程序就是經(jīng)過優(yōu)化后的程序。 由于采用了離線部分求值方法和數(shù)據(jù)例化方法,因此系統(tǒng)把對靜態(tài)數(shù)據(jù)的描述和 靜態(tài)數(shù)據(jù)的實(shí)際值分成了兩個(gè)部分,分別在不同的處理階段使用。 本課題試圖使用控制流圖形式保存前段計(jì)算結(jié)果和程序控制信息,并把這些售息 收荏緩存中;而后段計(jì)算將根據(jù)緩存中保存的控書慌圖信息引用前段計(jì)算的結(jié)果。 與傳統(tǒng)的數(shù)據(jù)例化方法不同,這種方法能夠完成程序控制轉(zhuǎn)移的優(yōu)化。該方洲吏 用基于控制流圖的數(shù)據(jù)例化技術(shù),并利用離線程| 芋例化和綁定時(shí)間分析技術(shù),來構(gòu)造 控制流圖生崩器;并且直接生成滯留程痔。 基于控制流圖的程序例化避免在例化階段直接修改程序代碼,剛氐了部分求值系 統(tǒng)的復(fù)雜陛。這些優(yōu)點(diǎn)有利于實(shí)現(xiàn)尚陛能的運(yùn)行時(shí)刻咧化系統(tǒng)。 2 2 1 部分求值 也被稱作程序例化,主要著眼于對程序本身的例化。部分求值根據(jù)原始程序輸入 中一部分靜忽鼬冒產(chǎn)蛔帶留程i 芋,而滯留程亭中包含了靜翻擴(kuò)瑚關(guān)的前段計(jì)算結(jié)果。 但部分求值技術(shù)存在一定的局限性,即很大程度匕,優(yōu)化效果依賴于例化生成的滯留 程亭,隨著靜態(tài)數(shù)據(jù)的增加,滯留程序的長度急劇加大,將會導(dǎo)致代碼膨脹。 第二章系統(tǒng)概述 例如,對程序中的循環(huán)進(jìn)行部分求值,滯留程序?qū)归_循環(huán)。當(dāng)循環(huán)次數(shù)過大 的時(shí)候,必然會導(dǎo)致滯留程序的代碼急劇膨脹。代碼膨脹不僅會帶來程咩規(guī)模問題, 在栩芋運(yùn)行時(shí)刻,由于代碼規(guī)模過大而導(dǎo)致頻繁的缺頁中斷,反而會急劇阿氐執(zhí)行效 率,影響和抵消部分求值的優(yōu)化作用,甚至?xí)a(chǎn)生相反的結(jié)果。 2 2 - 2 數(shù)據(jù)例化 是支持分段計(jì)算的另種程序優(yōu)化技術(shù),在8 0 年代后期由b a i z d 婦和b u l y o b k o v 提出來。數(shù)據(jù)例化試圖通過適當(dāng)?shù)姆治?,選擇計(jì)算的部分中間結(jié)果。提供個(gè)數(shù)據(jù)裝 載程序( 1 0 a d e r ) 和數(shù)據(jù)讀取程序( r e a d 盯) ;前者用于前段計(jì)算,將計(jì)算結(jié)果放在緩沖 區(qū)中;而后者用于后段計(jì)算,直接從緩沖區(qū)獲取前段計(jì)算結(jié)果,從而達(dá)到優(yōu)化眭能的 目的。 與程序例化相比,數(shù)據(jù)例化將中間計(jì)算結(jié)果保存在數(shù)據(jù)結(jié)構(gòu)中,而不是中間程序 中。程序的執(zhí)行被分為兩段:1 ) l o a d e r :執(zhí)行前段計(jì)算,并將計(jì)算結(jié)果保存在緩存( c a c h e ) 中;2 ) r e a d 盯:讀取緩存中的中間計(jì)算結(jié)果,繼續(xù)后段計(jì)算,完成其余的計(jì)算i 嘶呈。 與程序例化最根本的區(qū)別,在于數(shù)據(jù)例化將例化結(jié)果和例化程序區(qū)分開,將中間 計(jì)算結(jié)果蔚注中間數(shù)據(jù)中,而不是保有在滯留程序代碼中。所以;攻據(jù)例化對滯留程序 的依賴大大削弱。隨著例化規(guī)模的擴(kuò)大,隨之?dāng)U大的只有保存在緩存中的中間計(jì)算結(jié) 果,滯留程序的規(guī)模并不隨之發(fā)生變化。換句話說,數(shù)據(jù)例化是通過數(shù)據(jù)量的增加來 緩解程荊弋碼膨脹的問題。 2 2 _ 3 數(shù)據(jù)例化和程序例化的結(jié)合 數(shù)據(jù)例化的優(yōu)勢在于: i 便于處理以計(jì)算為中心的程序; i 避免了運(yùn)行時(shí)刻的代碼更新,安全性更高; i i i 可在編譯時(shí)刻構(gòu)造數(shù)據(jù)裝載程序( 1 0 l a d 盯) 和數(shù)據(jù)讀取程序( r e a d e r ) ,避免動(dòng) 態(tài)例化帶來的動(dòng)態(tài)代碼生成問題; 數(shù)據(jù)例化的主要弱點(diǎn)在于: i 無法優(yōu)化程序的控制流,不適用于以控制轉(zhuǎn)移為主的程序; 北京工業(yè)大學(xué)t 學(xué)碩士學(xué)位論文 i 將中間計(jì)算結(jié)果寫入緩沖,而無法直接嵌 到目標(biāo)代碼中: 當(dāng)原始程序的計(jì)算量并不大,甚至小于對緩存的訪問時(shí)間,也就是說數(shù)據(jù)例化的 優(yōu)化作用已經(jīng)被增加的額外處理抵消掉了,數(shù)據(jù)例化處理并沒有改善程申| 生能,反而 蝌氐了程序性能。 而且,數(shù)據(jù)例化的前段計(jì)算過程中,無法對控制轉(zhuǎn)移進(jìn)行提前計(jì)算,換句話說, 就是無法對程序的控制流進(jìn)行優(yōu)化,對于那些以控制轉(zhuǎn)移為主的程序來說,數(shù)據(jù)例化 并不能起到優(yōu)化的作用。 如e 所述,程序例化和數(shù)據(jù)例化都具有自己區(qū)別于對方的優(yōu)勢和缺點(diǎn),適用于不 同的黼領(lǐng)域。選擇程序例化還是數(shù)據(jù)例化,關(guān)鍵在于例化問題的規(guī)模和前段計(jì)算 代價(jià)之間的平衡。 在同“程序當(dāng)中,可能某些程序段應(yīng)該使用數(shù)據(jù)例化,而另一! 螺序段應(yīng)該使用 程亭例化。比如個(gè)簡單的例子,在個(gè)雙重循環(huán)中,內(nèi)層循環(huán)的執(zhí)行次數(shù)不多,適 合進(jìn)行程f 寧例化:相反,外層循環(huán)的最大循環(huán)次數(shù)很大,這樣就不適合使用程序例化, 面應(yīng)該使用數(shù)據(jù)例化方法。只有在合適的情況下使用合適的例化方法,才能得到最大 限度的優(yōu)化效果,因此程序例化和數(shù)據(jù)例化不應(yīng)該孤立起來,應(yīng)該相互結(jié)合,揚(yáng)長避 短,把兩種例化方法的優(yōu)勢充分發(fā)揮出來,同時(shí)盡可能避免每種方法可能帶來的缺點(diǎn) 和問題。只有這樣,才能使例化方法的優(yōu)化效果更顯著。 2 2 4 控制流圖: 控制流圖是強(qiáng)制性語言的種中間表示形式,對程序數(shù)據(jù)流的分析和程f 芋優(yōu)化有 著非常重要的作用。 控制流圖是擁有一個(gè)根節(jié)點(diǎn)的有向圖,節(jié)點(diǎn)可以為下述幾種類型: i 語句節(jié)點(diǎn)( 賦值、輸入輸出語句等) :控制流圖中的該類型節(jié)點(diǎn)具有個(gè)前趨 節(jié)點(diǎn)和一個(gè)后繼節(jié)點(diǎn); i 謂詞節(jié)點(diǎn):控制流圖中的該類型節(jié)點(diǎn)具有一個(gè)前趨節(jié)點(diǎn)和兩個(gè)后繼節(jié)點(diǎn)。兩 個(gè)后繼節(jié)點(diǎn)當(dāng)中,個(gè)是真后繼節(jié)點(diǎn),個(gè)是假后繼節(jié)點(diǎn)。 i i i 特殊節(jié)點(diǎn):即入口節(jié)點(diǎn)和出口節(jié)點(diǎn)。入口節(jié)點(diǎn)是控制流圖的根節(jié)點(diǎn),并以出 口節(jié)點(diǎn)為假后繼節(jié)點(diǎn),以程序的第個(gè)語句所在節(jié)點(diǎn)為真后繼節(jié)點(diǎn);出口節(jié) 點(diǎn)沒有后繼節(jié)點(diǎn)。從入口節(jié)點(diǎn)可以至i j j 態(tài)其它任何節(jié)點(diǎn),從任何節(jié)點(diǎn)都可以到 達(dá)出口節(jié)點(diǎn)。 第一章系統(tǒng)概述 至于控制流圖的邊,要么具有t m 柞a l s e 標(biāo)記,要么沒有任何標(biāo)記。以謂詞節(jié)點(diǎn) 為出發(fā)節(jié)點(diǎn)的邊具有t n e ,f a l s e 標(biāo)記,而以其它類型節(jié)點(diǎn)為出發(fā)節(jié)點(diǎn)的邊沒有任何標(biāo) 記。 控帶蜿圖中的每個(gè)節(jié)點(diǎn)標(biāo)志了一個(gè)狀態(tài)。 在本課題的例化系統(tǒng)中,控制流圖中存放著前段計(jì)算結(jié)果和程序控制信息,相當(dāng) 于數(shù)據(jù)例化中的緩存。不僅如此,數(shù)據(jù)例化的緩存中只包含了數(shù)據(jù)信息,而控制流圖 中還包含了部分程序控制信息培。 2 3 系統(tǒng)總體結(jié)構(gòu) 參閱本課題的系統(tǒng)總結(jié)構(gòu)圖,即圖2 1 。 北京工業(yè)大學(xué)工學(xué)碩士學(xué)位論立 輸入抒區(qū)描述 i n p mp ar c j t i o n 標(biāo)注控制流圖 自動(dòng)生成 j a v a & 十( w a ) ib 1 r a 分析 c 盞裟舔,卜1 氟 ( 陸曲gt 聊ea n a i y s 塔) 廣7 拓拄程序h n n ) 標(biāo)注語法拷結(jié)掏 f n o d e & t r 鉀) h l 標(biāo)注控制流圈 及其自動(dòng)生成 標(biāo)注控制流圖蛐c 龜 ( 1 1 i l o 吼e dc f g l 7 1 v 妻磬霎巖磬廣f 一 舶她成陬i :贏 擻甚h 例化程序1j 廝 例化程序i j 運(yùn)行環(huán)境j l 。_ j 鍘化運(yùn)行環(huán)境 蜊化控制激田 s p e c c f g ( s p b 舡e dc f g l 標(biāo)注程序解析 ( p a r s e “s c a n n 盯1 i i 標(biāo)注程序解析 i v 滯留程序及 其自動(dòng)生成 動(dòng)杏輸 值 & “ki n d u i f 噬到 i 、巡i 滯留運(yùn)行環(huán)境段結(jié)果 程序最終結(jié)果o u t、 圖2 1 系統(tǒng)總結(jié)構(gòu)圖 f 酒姑2 - ls y s 魄i l m 婦南m w o r k d 】a r t 簍黧紫麓翌鬻跫黔輸入的描述,根據(jù)靜態(tài)輸入的描述,謝讞 塞黧縫,生成j a 標(biāo)注程序,標(biāo)注程序決定了對麗馘;赫花蒜苗? 程度和深度。 ?!?、 一1 2 第二章系統(tǒng)概述 i 標(biāo)注程序解析:解析標(biāo)注程序,建立類一域一語句一表達(dá)式的樹結(jié)構(gòu)( t r e e 結(jié)構(gòu)) ,并讓t r e e 結(jié)構(gòu)包含b i a 結(jié)果信息,成為標(biāo)注語法樹結(jié)構(gòu)。 池標(biāo)注控制流圖的生成:根據(jù)標(biāo)注語法樹結(jié)構(gòu),將源程序按控制結(jié)構(gòu)分成基本 塊,并變換成由基本塊組成的控制流圖,生成標(biāo)注控制流圖。這部分的工 作包括一個(gè)控制流圖的數(shù)據(jù)結(jié)構(gòu)及一組相關(guān)的結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu),還有組功能 及相應(yīng)的算法。 i v 滯留程序生成:滯留程序由標(biāo)注控制流圖生成,對標(biāo)注控制流圖進(jìn)行優(yōu)化生 成滯留程序??刂屏鲌D中包含一系列的基本塊,基本塊也有b l a 狀態(tài),每個(gè) 基本塊中有一系列的語句,這些語句的b t a 狀態(tài)決定基本塊的b i a 狀態(tài),由基 本塊和塊內(nèi)語句的狀態(tài),決定生成的滯留程序。滯留程序?yàn)^取動(dòng)態(tài)的輸入和 前段計(jì)算的中間結(jié)果完成最終計(jì)算。這部分的內(nèi)容包括滯留程序的設(shè)計(jì)、結(jié) 構(gòu)、生成方法等;本系統(tǒng)的滯留程序與傳統(tǒng)部分求值中滯留程序的生成有根 本的區(qū)別,傳統(tǒng)的滯留程序直接包含前段計(jì)算的結(jié)果。 v 例化程序生成:例化程序也是由標(biāo)注控制流圖生成,例化程序接收靜態(tài)輸入 的值,進(jìn)行前段計(jì)算,得到前段計(jì)算的中間結(jié)果和優(yōu)化控制流程信息,生成 例化控制流圖,支持滯留程序的最終運(yùn)行:它的運(yùn)行需要程序的靜態(tài)輸入值, 生成則需要保存在控制流圖中的靜態(tài)輸入描述信息。例化程序和滯留程序都 是由標(biāo)注控制流圖生成的,它們的生成不存在先后關(guān)系和數(shù)據(jù)及控制的依賴 關(guān)系,是并列的,標(biāo)注控制流圖是生成例化程序和滯留程序唯來源。這一 部分內(nèi)容包括例化程序的設(shè)計(jì)、例化程序運(yùn)行生成的例化控制流圖、例化程 序生成方法等內(nèi)容。 v i 例化程序運(yùn)行環(huán)境:為侈i 眥程芋的運(yùn)行提供支撐,是一個(gè)與具體被例化程序 無關(guān)的程序庫,維護(hù)程序中各函數(shù)的控制流圖及其基本塊操作,以類庫的形 式為例化程序的執(zhí)行提供支持。例化程序運(yùn)行環(huán)境的另部分,就是例化程 序如何接收靜態(tài)輸 值生成作為中間結(jié)果的例化控制流圖。 v i i 滯留程序的運(yùn)行環(huán)境:為滯留程序的運(yùn)行提供支持環(huán)境,支持?jǐn)?shù)據(jù)緩沖區(qū)的 讀取,例化控制流圖的解釋執(zhí)行,是個(gè)與具體被例化程序無關(guān)的程寧律, 以類庫的的形式為滯留程序的執(zhí)行提供支持。例化程序、例化程序運(yùn)行環(huán)境 等程序?yàn)楫a(chǎn)生、構(gòu)造合理優(yōu)化的中間結(jié)果和控制信息提供良好的支持。 v i i i 例化控審蜿圖:也就是中間結(jié)果和控制信息,是本系統(tǒng)中很重要的部分, 例化程序的運(yùn)行結(jié)果,保存在例化控制流圖數(shù)據(jù)結(jié)構(gòu)中,也包含了優(yōu)化后的 控制流圖。滯留程序?qū)⒏鶕?jù)f 電仃 ,接收動(dòng)態(tài)輸入的值,完成計(jì)算。 北京工業(yè)大學(xué)工學(xué)碩士學(xué)位淪文 第三章四e s l 語言的設(shè)計(jì) 3 1 j p e s l 語言的設(shè)計(jì)背景 本課題利用基于控制流圖的程序例化技術(shù)實(shí)現(xiàn)了針對j a v a 語言的部分求值器,對 輸入的j a v a 程序j 蝴0 化處理,同時(shí)根據(jù)部分靜態(tài)數(shù)據(jù),生成保存了前段計(jì)算結(jié)果和 程序控制信息的滯留程序;在程序的實(shí)際運(yùn)行時(shí)刻,將會利用保存在滯留程序中的前 段計(jì)算結(jié)果和經(jīng)過優(yōu)化的程序控制信息,進(jìn)行剩余部分的計(jì)算。這樣,那些靜態(tài)計(jì)算 作已經(jīng)被提取出來,提前計(jì)算出結(jié)果,并保存在滯留程序中;在程序的運(yùn)行時(shí)刻, 直j 安使丹j 提前計(jì)算好的結(jié)果來 進(jìn)行剩余的計(jì)算,因此在運(yùn)行時(shí)刻,實(shí)際上只進(jìn)行了全部計(jì)算工作的部分?;?r 上述的基本思想,來達(dá)到優(yōu)化程序執(zhí)行陛能的目的。 基于以下幾個(gè)方面的目的,需要提供種部分求值需求描述語言( p a m a l e v a l u 觚o n s p e c i 丘c 撕o nl a n g u a g e ) ,向部分求值器描述原始程序所需的接口信鼠、處理方式、參 數(shù)動(dòng)靜狀態(tài)信息和特殊處理方式所需的一些額外信息。利用這些售息,部分求值器就 能夠知道在程序m 位置、使用什么方式進(jìn)行例化處理唧1 2 8 1 嘲帥】。 3 1 1 描述接口信息 對于經(jīng)過部分求值處理之后的j a v a 程序,盡管在執(zhí)行效率上得到了改善,并且計(jì) 算結(jié)果與原始j a v a 程序的計(jì)算結(jié)果完全一致,但程序之間的接口卻發(fā)生了顯著的改 變。 首先,一段完整的計(jì)算過程在經(jīng)過部分求值處理之后,被拆分成了滯留程j 亨坪口例 化程序兩部分。當(dāng)程序運(yùn)行時(shí)刻,滯留程序需要讀取程序中保存的前段計(jì)算結(jié)果和經(jīng) 過優(yōu)化的程序控制信息。而這們賣取的過程會極大地影響到程序執(zhí)行的整體性能和執(zhí) 行的正確陛,因此,這兩部分之間的交互便變得非常重要。 而且,由于j a v a 面向?qū)ο蟮奶貄 生,一段程序往往會在多個(gè)位置被重用多次,不僅 第三章j p e s l 語占的設(shè)汁 僅應(yīng)用在同程序的不同位置,還會應(yīng)用在多個(gè)程序中。因此,對于經(jīng)過部分求值處 理的j a v a 程序來說,易用性和封裝l 生同樣重要。為了擴(kuò)大部分求值器的| 立用范圍,必 須使經(jīng)過部分求值處理的程序具有與原始程序相同或相近的面向?qū)ο筇仨?,例如封裝、 多態(tài)等。 基于上述兩個(gè)原因,本課題需要為程亭內(nèi)部和外部交互提供完備的程序框架,由 程序框架來完成對滯留程序讀取操作和對外操作的封裝。這樣,例化程序和滯留程序 之間的交互就會具備高度的封裝性,同時(shí)使部分求值處理后的程序變得更容易使用、 重用性更高。 在提供程序應(yīng)用框架的同時(shí),部分求值器需要輸入一些描述信息來滿足自動(dòng)生成 程序匣用框架的需要。為此,部分求值需求描述語言有責(zé)任負(fù)責(zé)提供這些信息。 3 1 _ 2 描述處理方式信息 j a v a 程序可分為本地程序、砌m 限e n l o t em 曲0 di n v o k 撕o n ,遠(yuǎn)程方法激淘程序和 a p p l e t 程序。 i 本地j a 忸程序:本地j a v a 程序使用統(tǒng)一的方式處理全部j a v a 對象,即每個(gè) 類定義的成員變量和成員函數(shù)都屎存在本地的對象實(shí)例中。調(diào)用本地j a 忸對 象的成員變量或成員方法,都會矗接引用保存在本地對象實(shí)例中的成員變量 或成員方法。而且,對象之間的交互都是本地操作,對象本身也保存在本地。 i i 咖程序:同本地j a v a 程序相反,在大多數(shù)情況下,r m i 客戶端調(diào)用的遠(yuǎn) 程對象并不位于i u 客戶端所在的計(jì)算機(jī),而是駐留在一個(gè)或多個(gè)服務(wù)器 上。砌客戶端和砌m 服務(wù)器端之間通過命名服務(wù)獲得相互之間的位置, i 咖服務(wù)器首先要向命名服務(wù)注冊自己將要駐留的對m 遠(yuǎn)程對象,然后r 客戶端將會根據(jù)正確的名稱向命名服務(wù)發(fā)送查找請求,并由命名服務(wù)返回遠(yuǎn) 程對象。當(dāng)砌v i i 客戶端通過命名服務(wù)獲得了遠(yuǎn)程對象副本的時(shí)候,就可以把 該遠(yuǎn)程對象的方法當(dāng)作本地方法一樣調(diào)用。對象的方法實(shí)際上是在服務(wù)器上 運(yùn)行,然后把計(jì)算的結(jié)果返回給客戶端。 na p p h 程序:j a v aa p p l d 是種可以嵌入到網(wǎng)頁中的小應(yīng)用程序。當(dāng)用戶訪 問包含a p p 慨小應(yīng)用程序的網(wǎng)頁時(shí),a p p 融將被下載到用戶的計(jì)拿鯽上執(zhí)行。 a p p l e t 依賴于崗i 覽器,必須在瀏覽器內(nèi)運(yùn)行,無法朝蝤蠶行。由瀏覽器控制 a p p l e t 的生存周期。同上面兩種類型的j a v a 程序相比,a p p l e t 的程序結(jié)構(gòu)很 特殊。首先,卻p k 程序沒有m a i l l 函數(shù),瀏覽器負(fù)責(zé)啟動(dòng)和銷毀a p p l e t ;另 外,為了使瀏覽器能夠控制a p p l e c 的生存周期,卻p k 向?yàn)g覽器提供了一些 北京工業(yè)大學(xué)工學(xué)顧士學(xué)位論文 控制自己運(yùn)行方式的方法。因此,針對這種特殊結(jié)構(gòu)的j a v a 程序,部分求值 器采用了不同的處理方式,并需要生成了a p p l d 專用的程序應(yīng)用框架。 針對這三類j a v a 程序,部分求值器將會采取不同的處理方式。這時(shí),也必須同時(shí) 生成寸應(yīng)的程序應(yīng)用框架。為此,部分求值描述語言必須提供當(dāng)前輸入的j a v a 程序所 需的處理方式,以及使用該處理方式生成程序應(yīng)用框架所需的額外信息。 3 1 3 參數(shù)動(dòng)靜狀態(tài)信息 部分求值過程中,部分求值器把原始程序分成兩個(gè)部分,即例化程序和滯留程序。 在拆分過程中,部分求值器將會根據(jù)原始程序代碼以及輸入的部分靜態(tài)數(shù)據(jù)來判斷 原始程序的結(jié)構(gòu),并判斷每個(gè)變量和表達(dá)式的動(dòng)靜狀態(tài),以便決定采用什么方式處理 這些變量和表達(dá)式。 但是,在大多數(shù)情況下,僅僅依靠原始程序代碼,根本無法判斷每個(gè)變量和表達(dá) 式的動(dòng)靜狀態(tài)。雖然原始程序代碼提供了程序的流程信,鉚結(jié)構(gòu)信息,但卻無法體現(xiàn) 輸入?yún)?shù)的信息,例如,在什么情況下,什么輸入?yún)?shù)將會固定不變,以及該參數(shù)的 值:什么參數(shù)的輸 將會對程序抽_ 亍的性能影響最大等等。因此為了說明輸入?yún)?shù)的 動(dòng)靜狀態(tài)和內(nèi)部不變量,有必要將參數(shù)的動(dòng)靜狀態(tài)信息作為部分求值器的輸入。 另外,有的時(shí)候,部分求值器的使用者會希望能夠自己指定某些參數(shù)為某種狀態(tài)。 因i 比! 蟛頁通過種力i 漸需 亳噠的信息程五箍給部分習(xí)t 值器。 如上所述,在部分求值處理過程中,需要向部分求僵器崩整原始程序的參數(shù)動(dòng)靜 狀態(tài)信息,以便部分求值器判斷原始程序中每個(gè)變量和表達(dá)式的狀態(tài),并決定處理這 些變量和表達(dá)式的方式。 3 2j p e s l 語言的設(shè)計(jì) s 吼公司為j a v a 程序設(shè)計(jì)語言提供了功能強(qiáng)大的開發(fā)包。使用j a v a 程序設(shè)計(jì)語言 及其相關(guān)開發(fā)包,不僅僅可以開發(fā)本地和網(wǎng)絡(luò)應(yīng)用程序,還可以編寫a p p 融,實(shí)現(xiàn)動(dòng) 態(tài)頁面效果:而且,j a 語言提供了實(shí)現(xiàn)分布式計(jì)算的開發(fā)包- 遠(yuǎn)程方法激活( 鼢m , r e n l o t e t v i d h o di n v o c a 蛀o n ) 。 鑒于j a v a 程序的多樣性,俐巳s l 描述語言必須能夠描述部分求值器處理各種j a v a 第三章j p e s l 語言的設(shè)計(jì) 應(yīng)用時(shí)所需的信息,隊(duì)便部分求值器進(jìn)行部分求值處理。為此,除了提供尚苤通用信 息的譯猻規(guī)則之外,j p e s l 描述語言還據(jù)供了描述i m 應(yīng)用和a p p l d 應(yīng)用的評猻規(guī) 則。 為實(shí)現(xiàn)上述功能,j p e s l 描述語言提供了如下基本元素: 表3 1 :j p e s l 基本元素表 1 。幽l e3 1 t p f s i t a 西c e i 臼t 郾虹l i s f i m e t h o d :為函數(shù)方法說明關(guān)鍵字。使用該關(guān)鍵字,描述語言能夠向部分求 值器指定原始程序中需要處理的某個(gè)方法,并提供處理過程中所需的參數(shù)動(dòng) 靜狀態(tài)等信息。而且,在m 既h o d 關(guān)鍵字構(gòu)成的語句塊中,還可以提供不 變量表,來說明該方法中存在的不變量。 i s 觚:靜態(tài)參數(shù)關(guān)鍵字。使用該關(guān)鍵字,描述語言能夠向部分求值器指定 原始程序中某個(gè)函數(shù):方法中某個(gè)參數(shù)為靜態(tài)。 試d y n a m i c :動(dòng)態(tài)參數(shù)關(guān)鍵字。使用該關(guān)鍵字,描述語言能夠向部分求值器 指定原始程序中某個(gè)函數(shù)方法中某個(gè)參數(shù)為動(dòng)態(tài)。 i v d e n :標(biāo)識符。在該描述語言中, 、 、 、 、 、c 嫂潼名 、 和鋤p l e i 參 數(shù)名 都是標(biāo)識符。 v 砌丑訂a r eo 胍c t 烈狼f a c e :遠(yuǎn)程對象接口關(guān)鍵字。由于部分求值刪備 會處理砌m 應(yīng)用程序,而r m i 應(yīng)用程序包含黜皿服務(wù)器端和r m i 客戶端, 以及砌皿遠(yuǎn)程列緣。當(dāng)砌v i i 客戶端向砌m 服務(wù)器發(fā)送請求的時(shí)候,如果服 務(wù)器接受到了該請求,會將r 卜_ 遠(yuǎn)程對象返回給客戶端,但并不是把遠(yuǎn)程對 北京工業(yè)大學(xué)工學(xué)碩士學(xué)位論文 象直接返回,而是向客戶端提供鼢m 遠(yuǎn)程接口,通過砌遠(yuǎn)程接口調(diào)用底 層的代理來引用遠(yuǎn)程對象。j p e s l 描述語言中的 r e m o ,i eo b j e c t 孫r 1 1 e r f a c e 關(guān)鍵字指定了這們立程中使用到的r 遠(yuǎn) 程x 寸象接口的名稱。 v i 洲a r eo b j e c t 鞏伊i 腳盯:遠(yuǎn)程對象關(guān)鍵字。在砌v i i 服務(wù)器上運(yùn)行 雍葑垂弄呈對象,諺0 運(yùn)螽呈x j 芻臭實(shí)現(xiàn)了r e h c ) 1 eo b j 】二c tb 哪r f a c e 關(guān)鍵字指 定的遠(yuǎn)程對緣接口。j p e s l 描述語言中的砌m 【0 ,r e0 b j e c t 腳p i 融廈d 盯 關(guān)鍵字指定了遠(yuǎn)程對象的名稱。 v i i s e i e rs o i 瓜c e s :i t 服務(wù)器名稱關(guān)鍵字。部分求值器處理遠(yuǎn)程對象之 后,將會為優(yōu)化后的遠(yuǎn)程對緣生成一個(gè)新的類名,而黜m 服務(wù)器本身也魍含 了對遠(yuǎn)程對象的引用,如果希望f t 服務(wù)器能夠繼續(xù)使用,那么必須要把 i u v i i 服務(wù)器中砌m 遠(yuǎn)程對象的名稱替換成七 亡化f 舌的遠(yuǎn)程對象類名。因此, j p e s l 描述語言提供了s e i 己v e rs o u r c e s 關(guān)鍵字,來指定i t m i 服務(wù)器類 的名稱。 v i i i c i 皿臥汀s o i 瓜c e s :i t h 皿客戶端名稱關(guān)鍵字。部分求值處理遠(yuǎn)程對象之后, 將會生成個(gè)新的遠(yuǎn)程對象接口,為了使用經(jīng)過優(yōu)化的遠(yuǎn)程對象,1 0 m 客戶 端必須修改內(nèi)部引用的遠(yuǎn)程對象接口名稱。為此,j p e s l 描述語言提供了 c im n t 洲i r c e s 關(guān)鍵字,來指定砌m 客戶端的名稱。 i ) ( a p p l 正tc k 峪s :a p p l 成名稱關(guān)鍵字。由于部分求值黔榭a p p hl 弱蓮 行部分求值處理,因此j p e s l 描述語言需要為a p p l 哉的處理提供些輔助信 息。 x a p p 強(qiáng)tm m is : r r 咖文件名稱關(guān)鍵字。使用a p p l e t aa s s 關(guān)鍵字 指定的卻p 搬的h i m l 文件名稱。經(jīng)過部分求值處理之后,將會生成另外 個(gè)經(jīng)過優(yōu)化的邸p l 吐類,那么引用該a 卵h 的 r m 億文件就需要修改引 用時(shí)使用的a p p 搬類名稱。 妯a p p l e tp a ra m e 耵球s :a p p 賦的h m 幾參數(shù)名稱。在使用該a p p 蛾的 刪,文件中,通常使用 書謚為a p p k 指定了多個(gè)參數(shù)名稱和參 數(shù)直,這樣a p p 敞撕時(shí)刻自嘲動(dòng)態(tài)讒玻土型 參數(shù)值。在部分求澎也理過 程中,將會將這些參數(shù)值直接固化在代碼中,以便提供a p p 婦執(zhí)行時(shí)的性能。 a p p l e tp a r a m 既t s 關(guān)鍵字指定了m m l 中提供的a p p i e t 參數(shù)名稱。 j p e s l 描述語言的完整語法規(guī)則如下: 第三章j p e s l 語言的設(shè)計(jì) | ( a p p l e t 對象類說明 專r 跚o r 巳_ o b j e c t j n t e r f a c e= : r 刪r e o b j e c t j l p l 刪 : s e r v e rs o u r c e s _ , : c l i e n ts o u 陋e sk , : ( a p p l e t 對象類說明 專a p p l 叫c l a s s_ : a p p l 田s = f , a p p l e tp a r a 唧e r s = , ) :) 專 專忸t h o d ) 專臟t h o d ( ) 專 ( ) , 專 = s t a t i c ( 參數(shù)浣明 專 d y n a f l i c 專 ( : 專 : 專: i d e n 專 北京工業(yè)大學(xué)丁學(xué)碩士學(xué)位論文 3 3 詳細(xì)程序設(shè)計(jì) 3 3 ij p e s l 描述語言數(shù)據(jù)對象設(shè)計(jì) 上面陳述了j p e s l 描述語言的文法設(shè)計(jì),為了使部分求值器能眵使用該描述語言 描述的規(guī)俐言息,必須實(shí)現(xiàn)j p e s l 描述語言的解析工具,并向部分求值器提供保存有 規(guī)格信息的數(shù)據(jù)對象。 由于j p e s l 描述語言中需要為三種類型的j a v a 應(yīng)用提供規(guī)格信息說明,即本地應(yīng) 用、r m 【遠(yuǎn)程應(yīng)用和a p p 搬應(yīng)用。因此,解析j p e s l 描述語言之后,需要為這三種 不同的應(yīng)用保存信息。 由此得到的數(shù)據(jù)對象設(shè)計(jì)如下: 圖3 1j p e s l 舅啪弘蟓設(shè)計(jì)圈 f i 昏聆3 1j p e s l d a 詛喇e c b d 囟爭d 瑤r t i s c r i p t d a t a :保存了全部規(guī)格信息。內(nèi)部使用了三個(gè)v 。c 鼢對象,分別保存了 脅n o t e h _ l f b 、a p p l e t h l f b 和f u l l c h 而類型的元素。 第三章j p e s l 語言的設(shè)計(jì) j r e m o c e h 怕:保存了全部r 加應(yīng)用相關(guān)的規(guī)格信息。其中包括遠(yuǎn)程對象接口 名稱、遠(yuǎn)程對象名稱、r 服務(wù)器名稱列表和r 客戶端名稱列表。 i i i a p p l e 【h l 如:保存了全部a p p l c t 應(yīng)用相關(guān)的規(guī)格信息。其中包括a p p l c t 的名 稱和該a p p l c t 的參數(shù)信息,a p p l e t 的參數(shù)信息保存在p 越l h l l b 類型的成員中。 i v p a m h 面:保存了a p p l e t 的參數(shù)信息。這些信息不僅僅指明了該a p p l e t 所使 用的參數(shù)信息,還提供了使用該a p p l e c 的m m ,文件的名稱。 v f u
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 郴州應(yīng)急搶險(xiǎn)管理辦法
- 簽證索賠管理辦法心得
- 贛州戶外燒烤管理辦法
- 鄂州員工寢室管理辦法
- 孕婦學(xué)校培訓(xùn)課件
- 格塞爾培訓(xùn)課件
- 學(xué)習(xí)項(xiàng)目小組培訓(xùn)課件
- 肝癌手術(shù)護(hù)理課件
- 肝癌中醫(yī)課件
- 高新一小學(xué)數(shù)學(xué)試卷
- 鐵總物資〔2015〕117號:鐵路建設(shè)項(xiàng)目甲供物資目錄
- 人教版高中物理必修一全套課件【精品】
- GA/T 2066-2023法庭科學(xué)生物檢材中甲嘧磺隆等21種磺酰脲類除草劑篩選液相色譜-質(zhì)譜法
- 《建筑工程碳排放計(jì)量》-課件-第5章-建筑碳排放實(shí)例分析
- DL5168-2023年110KV-750KV架空輸電線路施工質(zhì)量檢驗(yàn)及評定規(guī)程
- 2023年副主任醫(yī)師(副高)-疾病控制(副高)考試歷年真題集錦答案附后
- 地下礦山基建期應(yīng)急預(yù)案
- 工藝管道安裝質(zhì)量控制
- 中國急性胰腺炎診治指南解讀
- 高強(qiáng)度螺栓終擰扭矩檢查記錄表
- 《古蘭》中文譯文版
評論
0/150
提交評論