# HG changeset patch # User Nobuyasu Oshiro # Date 1325596292 -32400 # Node ID 2697e09f6ce9db1a12f8cdfb72fc173645c8f47d # Parent a4d16779fd1e3fff7339bb47be4cdbb023ee80d6 modify diff -r a4d16779fd1e -r 2697e09f6ce9 presen/index.html --- a/presen/index.html Tue Jan 03 21:42:31 2012 +0900 +++ b/presen/index.html Tue Jan 03 22:11:32 2012 +0900 @@ -321,7 +321,7 @@
-

CbCの実装:シンタックスの追加

+

CbCの実装:__codeシンタックスの追加

-

CbCの実装:シンタックスの追加

+

CbCの実装:gotoシンタックスの追加

  • goto によるコードセグメントへの継続
  • -
  • 追加したgotoシンタックスの実際のソースは次のようになる。
  • -
    - -
    -

    CbCの実装:シンタックスの追加

    -

    gotoシンタックスの追加

    -
    +	
  • 追加したgotoシンタックスの実際のソースは次のようになる。
  • +
      case RID_GOTO:
        c_parser_consume_token (parser);
        if ( c_parser_next_token_is (parser, CPP_NAME)
    @@ -408,29 +403,24 @@
            stmt = c_finish_return(loc, NULL_TREE, NULL_TREE);
          }
     	
    - -
  • cbc_replace_arguments関数は引数のデータを一時的な変数へ避難させる。
  • -
  • CALL_EXPR_TAILCALLマクロでtail callフラグを立てる。
  • -
  • 最後にc_finish_return関数によりreturn文を生成している。
  • -
    -

    CbCの実装:シンタックスの追加

    -

    gotoシンタックスの追加

    +

    CbCの実装:gotoシンタックスの追加

    - - - - + +
    実際のコード GCC 内で処理されるコード実際のコードGCC内で処理されるコード
    @@ -454,9 +444,10 @@
    - +
    @@ -729,6 +720,7 @@
    +
    @@ -850,7 +843,7 @@ - +
    生成しているコード生成する為のコード生成されるTree
    @@ -980,28 +973,24 @@

    環境付き継続:実装の問題

    -
  • クロージャでの実装
    • -
    • クロージャにしてスタックに値を確保する。
    • -
    • -
    -
  • 問題点
  • -
      -
    • しかしCbCではスタックの値は破棄されていく。
    • -
    • その為スタックに値を確保するのは好ましくない。
    • +
    • クロージャでの実装の問題点:
    • + +
        +
      • CbCでは継続によりスタックの値は破棄されていく。
      • +
      • クロージャにしたコードが破棄される可能性がある。
      -
    - -
    -

    環境付き継続:実装の問題

    -
  • staticでの実装
  • +
    +
  • staticでの実装の問題点:
  • +
      -
    • 静的に値を確保することでスタック破棄の影響を受けない。
    • +
    • マルチスレッドのプログラムに対応できない。
    • +
    • 値を返し切る前に別スレッドによって値が書き換えられる可能性がある。
    -
  • 問題点
  • -
      -
    • マルチスレッドのプログラムに対応できない。
    • -
    • 値を返し切る前に別スレッドによって値が書き換えられる可能性がある。
    @@ -1013,7 +1002,7 @@
  • 現在はこの方法で実装を行なっている。
  • しかし、最適化にかけると正しい値が返ってこない。 -
    (恐らくTreeの生成の部分が間違っている。)
  • +
    (最適化によりコードが削除されている...?)
    @@ -1049,25 +1038,26 @@

    まとめ

    -
      -
    • 今回GCC版CbCコンパイラのアップデートを行った。
    • -
    • TCEにかかる判定の部分と環境付き継続の実装の修正を行った。 -
      おかげで、以前より楽な管理ができる実装にすることができた。
    • -
    • 後は環境付き継続の最適化の問題の修正とselftypeの実装を行う。
    • -
    • 全ての実装を終えたらGCC版CbCコンパイラの実装はアップデートを行なっていくだけとなる。
    • -
    +
      +
    • 今回GCC版CbCコンパイラのアップデートを行った。
    • +
    • TCEにかかる判定の部分と環境付き継続の実装の修正を行った。 +
      おかげで、以前より楽な管理ができる実装にすることができた。
    • +
    • 後は環境付き継続の最適化の問題の修正とselftypeの実装を行う。
    • +
    • 全ての実装を終えたらGCC版CbCコンパイラの実装はアップデートを行なっていくだけとなる。
    • +

    今後の予定

      -
    • CbCを用いたプログラムの作成
    • +
    • CbCを用いたプログラムの作成
      • CbCによるタスクマネージャの作成
    • llvmへのCbCの実装
    -
    +
  • ご清聴ありがとうございました。
  • +

    CbCの機能の拡張:__rectype の実装