«前の日記(2009-12-14) 最新 次の日記(2009-12-16)» 編集

会長@腹部日記


2009-12-15 [長年日記]

_ JRuby Project Wiki Home Page / Design: Internals を訳して勉強する - (0) 順番を決める

読んで字のごとく、勉強目的です。

翻訳対象
http://kenai.com/projects/jruby/pages/Internals
  • Wikiは以下の順序で記載されています
    • Compiler Packaging and Pathing
    • Compiler Name Mangling
    • JIT Compiler
    • Static Compiler
    • Classpath and Load Path
    • Require and Load behavior
    • Ruby/JRuby Security A New Security Implementation to Replace SAFE/TAINT)
    • JRuby Method Binding - How to wire up Java methods in a JRuby extension
    • JRuby Internal Design
    • Ruby Calling Java
  • タイトルと、難易度から判断して以下の順序でオレオレ翻訳開始
  1. JRuby Internal Design
  2. Classpath and Load Path
  3. Require and Load behavior
  4. Ruby Calling Java
  5. Ruby/JRuby Security
    1. A New Security Implementation to Replace SAFE/TAINT)
  6. JRuby Method Binding
    1. How to wire up Java methods in a JRuby extension
  7. Compiler Packaging and Pathing
  8. Compiler Name Mangling
  9. JIT Compiler
  10. Static Compiler

_ JRuby Project Wiki Home Page / Design: Internals を訳して勉強する - (1) JRubyInternalDesign

This page is a quick writeup for those interested. This is from memory.
I'm missing some details for sure.
Disclaimer: Tom's the parser guy, so direct questions in that area to him.
This is based on what we plan to ship for JRuby 1.0...

このページは、興味がある人のための簡単な内容です。記憶の限り書いています。 いくつかの詳細な箇所はわかりません。 わからないから、このページに関する内容は直接 parser guyである*1Tom(Thomas Enebo?)に質問してね。 このページは、私達のリリース予定である JRuby 1.0*2に基づいています。

Parsing/lexing:

・JRuby has a YACC/BISON-based parser, basically Ruby's parser ported to Java and using the Jay parser generated.
・The lexer is hand-written, as in Ruby.
・The resulting AST has positioning information for both start/end lines and start/end offsets. This is to support IDE use.
・We also save comments as they're parsed, to allow round-tripping the AST.
・We're considering an experimental migration to XRuby's ANTLR-based parser post 1.0. I don't guess it would take more than a week.
  • JRubyは YACC/BISONベースのパーサを持っている。基本的にRubyのパーサをJavaに移植したものであり、Jayパーサ*3を利用して生成しています。
  • 字句解析器は、Rubyと同様に手書きです*4
  • 生成されたAST(抽象構文木)はstart/end行と、それらのoffsetの行情報を持ちます。これはIDEでの使用のためです。
  • また、Jayパーサによって、コメントを取得するために、ソースを解析することなく構文木から取得可能です*5
  • 私たちはXRubyのANTLRベース*6のパーサ1.0への実験的な移行を考えています。

Runtime layout:

・The "Ruby" class is the entry point for the runtime. All objects created have a reference to the runtime, and do not / will not migrate across runtimes without marshalling.
・Every thread using a given runtime is assigned a ThreadContext object, stored in a threadlocal. We minimize threadlocal lookup by frequently passing the ThreadContext on the call stack as a parameter.
  • Rubyクラスは、ランタイムのエントリポイントです。すべての作成されたオブジェクトはランタイムへの参照を持ち、(Java Runtime内)のRuby Runtime間では、marshalling*7なしでは、オブジェクトの移行は行えません。

 Ruby runtime1 = new Ruby();
 Ruby runtime2 = new Ruby();
 # runtime1 とruntime2 では何もやりとりできないと。ふむふむ。

  • 割り当てられたランタイムを利用する各スレッドには、threadローカルに保存されているThreadContextオブジェクトが割り当てられます。私たちは頻繁にパラメータとして呼び出しスタック上にThreadContextを渡すことによって、ThreadLocalの探索を最小限に抑えます。

追記予定

*1 意味わからないorz

*2 1.4.0ではどうなっているかも理解していければいいなぁ

*3 http://www.cs.rit.edu/~ats/projects/lp/doc/jay/package-summary.html

*4 Rubyの字句解析はパーサと連携する必要があり、Lex のような自動生成ツールでは表現できない

*5 現段階でのParserにはCommentNodeとかなさそうなので、1.4に当てはまるかは不明

*6 http://www.antlr.org/download.html

*7 http://www.ruby-lang.org/ja/man/html/Marshal.html

_ 通りすがり男性かっこいい

約150人の人だかりを見た通りすがり男性に

「銭持ってるやつは違うな。親からのおこづかいだけどな」

と皮肉を言われる一幕も。

[鳩山首相、幸夫人へのお土産はほっけ3枚より引用]

Tags: まぬけ

_ きょうのつぶやき : 76回