BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース データフローでのRuby向け宣言型並列性

データフローでのRuby向け宣言型並列性

ブックマーク

原文(投稿日:2009/5/4)へのリンク

Rubyの一部は関数型プログラミング技法に影響を受けた。そのときRubyプログラマは、ErlangやHaskellから技法を導入したり、これらの言語へのブリッジ(Erlectricity(リンク)など)を作成した。

Oz言語から単一化(リンク)の概念をインポートすることで、Larry Diehl氏(リンク)は、宣言型並列モデルをRubyにもたらす。Oz(リンク)は、マルチパラダイムプログラミング言語である。主に、関数型の(lazyおよびeager 評価)、分散および並列プログラミング言語として知られているが、同時に制約型、論理型、手続き型、オブジェクト指向のプログラミングをサポートする。

プロセッサコア数が増加している観点から、Larry氏はRubyで宣言型並列モデルを利用したかった。その利点(リンク)は以下のとおりである。

  • プログラムが実行することを簡単に推論できる。
  • 単純だが強力な並列が可能。

これを達成するため、Larry氏は「コンピュータプログラミングの概念・技法・モデル」(PDF)で説明されているような、Dataflowスレッドの振る舞いの概念を使用している。

操作がまだバインドされていない変数を使用しようとしたら、どうなるか?純粋に感覚の観点では、操作が単純に待機するなら良いことであろう。おそらく他の いくつかのスレッドは変数をバインドすると、操作は継続する。この品のある振る舞いは、データフローとして知られている。

また、このOz方法を実現するために、氏は統一を使用している。

統一という考えは、統一アルゴリズムにより自動で解決可能な論理方程式によって、値を記述することである。

現実的には、これは以下のように書き換えられる(プロジェクトサイトから)。

# Local variables
include Dataflow

local do |x, y, z|
  # notice how the order automatically gets resolved
  Thread.new { unify y, x + 2 }
  Thread.new { unify z, y + 3 }
  Thread.new { unify x, 1 }
  z #=> 6
end

ローカルまたは宣言型(インスタンス変数)で、新たな変数を作成し、バインドする。

Ozポート(リンク)の例(非決定性の振る舞い)またはErlang-ish Actors(リンク)が提供される。

Brian Morearty氏は、いくつかの興味深いデバッグパフォーマンスやDataflow使用のメモリの問題(リンク)に取り組んでいる。Larry Diehl氏がBrian氏のブログで指摘している(リンク)

 

グリーンスレッドとネイティブスレッドプールの実装のため、このライブラリがJRubyをMRI以上に輝かせる、ということを述べておきたい。

 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

  • 「機能」ではなく「関数型」ではないでしょうか?

    by Shinji Minami,

    スパムの可能性があると認識されました。モデレーターが確認し問題がなければ24時間以内に公開します。その際あなたへの通知は行われませんのでご了承ください。

    原文( www.infoq.com/news/2009/05/ruby-dataflow )を見ると、最初の段落は

    Part of the Ruby language was influenced by functional programming techniques. Ruby programmers then adopted techniques from Erlang or Haskell with, or created bridges to these languages, eg. Erlectricity.


    のようになっているので、「Ruby の一部は関数型プログラミング技法に影響を受けた。そのとき、Ruby プログラマは Erlang や Haskell から~」というような意味かと思います。

    同じように、第二段落の「機能的な」も「関数型の」の方が妥当ではないかと思います。

  • 翻訳について

    by masayoshi takahashi,

    スパムの可能性があると認識されました。モデレーターが確認し問題がなければ24時間以内に公開します。その際あなたへの通知は行われませんのでご了承ください。

    「統一」:日本語なら「単一化」あるいは「ユニフィケーション」だと思います。

    「制約、論理、避けられない、オブジェクト指向の」:最後のオブジェクト指向はともかく、「避けられない」は「手続き型」でしょう。同様に、「制約型」「論理型」と「型」をつけるほうが一般的だと思います。

    「Concepts、TechniquesおよびModels of Computer Programming」:邦訳が出ています。「コンピュータプログラミングの概念・技法・モデル」です。

    「緑のスレッド」:ふつう「グリーンスレッド」と書くと思います。
    ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AA%E3%83%...

    「MRI全体でJRubyを輝かせる」:「JRubyをMRI以上に輝かせる」というような意味だと思います。

    全般的に、もう少し翻訳に気を配っていただければと思います。

  • Re: 翻訳について

    by 高宏 中台,

    スパムの可能性があると認識されました。モデレーターが確認し問題がなければ24時間以内に公開します。その際あなたへの通知は行われませんのでご了承ください。

    InfoQ Japanの事務局です。ご指摘ありがとうございます。翻訳について行き届かないところも多く申し訳ございません。ご指摘通りに修正させていただきました。

    InfoQ Japanは今月末で運営・翻訳体制が変更になります。今は一旦締め切りましたが、翻訳者の募集も行っていきます。もしよろしければ翻訳者としてのご協力もご検討ください。

    それでは、これからもコメントよろしくお願いします。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT