<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 18,  comments - 0,  trackbacks - 0

    XRuby在努力創建一種編譯器,能將Ruby編譯成Java字節碼。當然,編譯器需要一種分析輸入語言的方法,XRuby團隊用流行的ANTLR分析器產生器創建了他們自己的Ruby分析器。分析器產生器的作用是接收一門語言的文法并產生代碼以分析該語言。使用ANTLR意味著文法和分析器的創建工作必須從零開始,這不同于JRuby的方法。在JRuby里,Ruby分析器使用了另外一種叫做YACC的分析器產生器,而且JRuby選擇復用該文法并使用Yacc的Java端口產生其分析器。

    當被問到Ruby是否是一個分析起來比較困難的語言時,Wang Haofei(從事該Google Soc項目并且是XRuby團隊的一員)做出了如下解釋:

    是的。該語言有許多模棱兩可的地方。比如,“<<”可能是左位移操作,也可能是heredoc的起點。區分這兩種情況需要維護狀態(依賴上下文):
    http://seclib.blogspot.com/2005/11/distinguish-leftshift-and-heredoc.html
    其它像ID/函數的模糊性,字符串表達式替換,heredoc等等都很棘手。

    當提到困難時,一個不錯的問題是離目標還有多遠。Wang Huofei:

    XRuby第一個公開發行版已經可以處理全部ruby標準類庫和Ruby on Rails(沒有在對最新版做測試):
    http://seclib.blogspot.com/2006/02/first-release-of-rubyfront.html
    自此以后,Xue修正了一些bug,總的來說XRuby很穩定。在SoC項目進行過程中我們將編寫和運行更多的測試,以幫助我們發現一些未知的問題。

    Xue Yong Zhi是該SoC項目的指導者,而且也是XRuby團隊的成員。

    該Soc項目的一個主要部分是將現有的分析器遷移到ANTLR v3上。Wang Huofei:

    1. ANTLR v3對v2進行了重寫,通過LL(*)分析大大提高了分析能力,v2的分析能力不但弱很多(有限的LL(k))而且還迫使我不得不花時間去處理一些問題。基于ANTLR的分析器比別的分析器更容易維護,遷移到v3將幫助我們把分析器做得更好更清晰。
    2. ANTLR v3將來應該有Ruby后端支持,所以我們可能會用Ruby編寫Ruby分析器。
    3. ANTLR v3的性能更好。

    上面第二點十分有趣。Ruby缺少一個用Ruby寫的Ruby分析器。編寫處理Ruby代碼的工具是一個問題。用Ruby寫代碼分析、重構工具和自動重構、格式程序等等甚至更多的工具并非不可能,但是很困難,因為還沒有用Ruby代碼分析Ruby源碼的先例。有些工作,像Ryan Davis的分析樹,用的是Ruby解釋器的分析器(通過一個本地擴展)來獲得Ruby源碼的抽象語法樹(AST)。AST是一顆代表Ruby源碼的樹,分析器工具必須了解代碼的結構。然而,分析樹不是一個完整的解決方案,因為當前的版本沒有給出樹上各個節點的源碼位置。顯然,像重命名一個Ruby源文件中的標識符這樣的重構算法,需要知道標識符的位置在哪兒。

    由于各式各樣的Ruby IDE問世,這個問題在過去幾年里變得更加明顯了。這些帶有代碼分析器(用來警告代碼中潛在的錯誤)并基于Eclipse RDT的IDE是第一個支持Ruby廣泛重構特征的IDE。其他特征是支持基于Ruby的文件的,比如Rake文件——Ruby的make 或ant文件。問題是:這些工具都是用Java構建的(或其他語言)且Java IDE都使用JRuby分析器。

    這意味著這些工具的功能都被那些語言禁固了,更糟的是,這些工具常常綁定到了特定的IDE上。例如,支持RDT的重構邏輯,對Ruby in Steel(建立在Visual Studio上的IDE)是不可用的。在Java界與之相比的區別是,分析器是可用的。像PMDFindbugs這些工具都是用Java編寫的,因此Java在哪里運行都可使用這些工具,更重要的是,可以用Java代碼擴展這些工具。

    因為該Soc項目的描述并沒有100%說清楚基于Ruby的分析器的研究計劃,Wang Huofei澄清了該項目計劃:

    這取決于我們做得有多好。即使不能滿足Soc的進度表,我們也愿意做這些事情。

    好消息。

    制造代碼工具一個必須的東西是AST,用來分析源碼。前面已經提到的分析樹,提供了一種表現Ruby源代碼的格式。已有的基于分析樹的工具,比如Ruby2Ruby可以把AST轉換成Ruby源代碼;如果某工具想修改AST并輸出為Ruby源代碼,這很有用。Rubinus,一個用Ruby實現Ruby VM的項目,也使用了分析樹輸出,用以把Ruby編譯為Rubinius字節碼,接著解釋這些字節碼。當被問到分析器的輸出時,Wang Haofei這樣解釋到:

    ANTLR有其自己內建的AST支持,這為我們序列化一個字符串或改變其他結構提供了很大方便。我們的分析器與分析樹輸出看起來很相似。在XRuby里我們把AST轉換成像DOM這樣的結構并使用Visitor模式產生Java字節碼。

    而分析樹輸出看起來還沒有計劃,很有可能把ANTLR產生的AST轉化成分析樹格式。一個類似的方法已經被JParseTree(JRuby的一個分析樹端口)所采用,現在JRuby一部分額外軟件包(JRuby Extras)提供了常用Ruby類庫的JRuby端口。

    posted on 2007-06-28 16:57 LORD BLOG 閱讀(244) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲av无码一区二区三区人妖| 亚洲视频一区在线观看| 在线播放亚洲精品| 大学生美女毛片免费视频| 77777午夜亚洲| 久久久久久国产精品免费免费 | 337p日本欧洲亚洲大胆精品555588| 中文永久免费观看网站| 亚洲精品成人无限看| 麻豆精品成人免费国产片| 亚洲AV无码成人专区片在线观看 | 国产伦精品一区二区免费| 中文字幕不卡亚洲| 玖玖在线免费视频| 亚洲午夜成激人情在线影院 | 男女一进一出抽搐免费视频| 国产亚洲无线码一区二区 | 相泽南亚洲一区二区在线播放| 国产一级大片免费看| 中文字幕在线观看免费| 久久丫精品国产亚洲av不卡| av无码免费一区二区三区| 春暖花开亚洲性无区一区二区| 国产精品亚洲玖玖玖在线观看| 国产免费网站看v片在线| 亚洲精品影院久久久久久| 日本一道一区二区免费看| 九九久久精品国产免费看小说| 久久精品国产亚洲网站| 91嫩草国产在线观看免费| 色费女人18女人毛片免费视频| 国产亚洲3p无码一区二区| 成人特黄a级毛片免费视频| 国产精品无码永久免费888| 亚洲天堂一区二区| 日韩免费福利视频| 久久成人免费电影| 国产精品亚洲va在线观看| 亚洲精品天天影视综合网| 波多野结衣久久高清免费| 成全视频免费观看在线看|