【正文】
分變化都是在初始化階段完成的,因此在創(chuàng)建對象時就已經(jīng)確定類型的大部分,只留有一小部分屬性待定這樣的方法就顯得合情合理了。 在一個類型系統(tǒng)中刪除方法或作用域是很難的,因?yàn)檫@樣一來就等于它允許了類型的發(fā)展非單調(diào),這會破壞現(xiàn)代類型語言中默認(rèn)執(zhí)行的子類型化保證。但是,這樣做會減少我們使用類型系統(tǒng)所帶來的好處,這可能是為什么一些相關(guān)的研究禁止這種做法的原因。 eval 函數(shù)是罕見的而且不影響語義。因此,很多文獻(xiàn)就直接忽視了它,而另一些文獻(xiàn)則假定這些使用的影響是微不足道的,或者使用這些參考了 JSON 反序列化協(xié)議。 JavaScript 里的類型系統(tǒng)已經(jīng)聲明的 中原工學(xué)院信息商務(wù)學(xué)院畢業(yè)設(shè)計(jì)(論文)譯文專用紙 第 4頁 函數(shù)的元數(shù)能夠說明它在調(diào)用時所使用的方法,當(dāng)然這種情況不是必 須的,因?yàn)镴avaScript 允許不同元數(shù)的調(diào)用。 很多論文都花費(fèi)大量筆墨明確指出,他們假定所研究的 JavaScript 程序是一些小型的程序,而且另一些則暗示了這一點(diǎn),因?yàn)樗麄兿虼蠹医榻B說現(xiàn)有的理論分析不能擴(kuò)展到大型系統(tǒng)中去。 一些出色的 JavaScript 程序的完善和優(yōu)化,如谷歌的 V8 ,需要依賴一些已經(jīng)成名的實(shí)現(xiàn)技術(shù),比如對象創(chuàng)建類(就像 Java一樣)和內(nèi)聯(lián)緩存。 。 JavaScript 的工作負(fù)荷。但是,從使用這些基準(zhǔn)測試平臺得到的結(jié)論只有在一種情況下是有意義的,那就是它們能夠準(zhǔn)確地反映出在現(xiàn)實(shí)世界中運(yùn)行的 JavaScript 程序的工作負(fù)荷區(qū)間。我們不是要質(zhì)疑以前的研究成果的準(zhǔn)確性,即使上述假設(shè)的一部分是被證明毫無依據(jù)的,以前的研究成果仍然可以為我們研究 JavaScript 提供一個有用的基礎(chǔ)和出發(fā)點(diǎn)。 相關(guān)工作。 Ratanaworabhan 等人已經(jīng)進(jìn)行過和我們類似的研究,其最終結(jié)果也是和我們相似的。我們也曾進(jìn)行過一些小規(guī)模的 JavaScript 研究,并得出了一些初步結(jié)果 Harland,這些結(jié)果與這里提出的最新研究結(jié)果也是相吻合的。他們的研究表明,動態(tài)特性中的大部分都出現(xiàn)在程序的初始化階段,而在程序的主要運(yùn)算階段 , 動態(tài)行為就逐漸減少了。關(guān)于面向?qū)ο笳Z言在實(shí)時運(yùn)行中的特性研究也有很多 , 比如 Garret 等人研究了 Self 語言中信息發(fā)送的動態(tài)程度, Calder 等人則分析了 C 和 C++程序運(yùn)行中的差異, Temporo 等人研究了 Java 中繼承的應(yīng)用等。最后,我們的工作得到了 Dufour 等人的啟發(fā),他們就 Java 的 運(yùn)行指標(biāo)進(jìn)行了嚴(yán)格的框架討論。雖然有可用的獨(dú)立解釋程序,他們卻無法處理目前在大部分支持 JavaScript 的網(wǎng)站常見的DOM 和 AJAX 技術(shù)。我們的瀏覽器記錄下由解釋程序帶來的大部分操作(讀,寫,刪除,調(diào)用, 中原工學(xué)院信息商務(wù)學(xué)院畢業(yè)設(shè)計(jì)(論文)譯文專用紙 第 6頁 定義等),同樣作為垃圾收集和源文件加載的事件也會被跟蹤。已經(jīng)追蹤到的痕跡被壓縮并存儲到磁盤中。然后我們在離線狀態(tài)下分析了這些數(shù)據(jù),并將結(jié)果存儲在一個數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)挖掘。它是能夠重現(xiàn)這些痕跡的,并為相應(yīng)的 JavaScript 程序得出一個關(guān)于堆狀態(tài)的抽象解釋。最后,一些靜態(tài)分析( EVAL 分類,代碼大小的度量)是基于被恢復(fù)的源文件運(yùn)行的,它使用了 Rhino 的 JavaScript 編譯器的框架解析技術(shù)。我們已經(jīng)識別出一組字節(jié)代表實(shí)際的程序 ,這組字節(jié)的大小范圍為數(shù)百千字節(jié)到兆字節(jié),我們對每個網(wǎng)站都記錄了很多痕跡 ,然后使用相應(yīng)的編譯儀器與離線分析工具從痕跡中提取了行為信息。 中原工學(xué)院信息商務(wù)學(xué)院畢業(yè)設(shè)計(jì)(論文)譯文專用紙 第 7頁 原文出處: An Analysis of the Dynamic Behavior of JavaScript Programs Abstract The JavaScript programming language is widely used for web programming and, increasingly, for general purpose such, improving the correctness, security and performance of JavaScript applications has been the driving force for research in type systems, static analysis and piler techniques for this language. Many of these techniques aim to reign in some of the most dynamic features of the language, yet little seems to be known about how programmers actually utilize the language or these features. In this paper we perform an empirical study of the dynamic behavior of a corpus of widelyused JavaScript programs, and analyze how and why the dynamic features are used. We report on the degree of dynamism that is exhibited by these JavaScript programs and pare that with assumptions monly made in the literature and accepted industry benchmark suites. Keywords: Dynamic Behavior, Execution Tracing, Dynamic Metrics, Program Analysis, JavaScript 1. Introduction JavaScript is an objectoriented language designed in 1995 by Brendan Eich at Netscape to allow nonprogrammers to extend web sites with clientside executable code. Unlike more traditional languages such as Java, C or even Smalltalk, it does not have classes, and does not encourage encapsulation or even structured programming. Instead JavaScript strives to maximize flexibility. JavaScript’s success is undeniable. As a data point, it is used by 97 out of the web’s 100 most popular The language is also being a general purpose puting platform with office applications, browsers and development environments being developed in JavaScript. 中原工學(xué)院信息商務(wù)學(xué)院畢業(yè)設(shè)計(jì)(論文)譯文專用紙 第 8頁 It has been dubbed the “assembly langu