chimaira (キマイラ) と CSP

| | コメント(242)

檜山正幸さんの新しいプロジェクト(?) chimaira が始まっています。最終的には「Chimairaアーキテクチャは、XML技術の一部に対する再構成の試み」ということで、XML 文書の処理や構造設計手法にインパクトを与える仕組みを定義するものになるようです。現在はまだ導入部であり、Chimaira の「コンポーネント・アーキテクチャ部分」に絞っているとのことで、XML の話ではなくプログラミングに纏わる分析/設計例のような話になっていて(多分これから続くであろう話と比較すると)読みやすかったです。

「コンポーネント・アーキテクチャ部分」のことを Janus(ヤヌス:昔ヤヌスの鏡なんてドラマがあったような)と呼ぶそうです。
Janus の話は個人的に趣向している「インターフェイス指向」に合致する部分が多くて大変面白いです。

なぜなら、まず最初にフィルタやパイプの持つインターフェイスの分析から入り、それらを明確な interface として定義しているからです(他は後述)。さまざまな粒度のコンポーネントの役割をざっくばらんに定めて、それらの持つインターフェイス(狭義には in/out、ぶっちゃけると仕様)を決めることを優先し、実装とコンポーネントの繋ぐ作業の独立性を上げようとする「インターフェイス指向」に近いと思います。

Janus ではコンポーネント(と呼んでいるプログラム単位)間のメタ接続方式(in/out, use/provide, ポート数制約等)を明確に規定して、それをベースに実際の接続方式(*)は、メタ接続方式の組み合わせで表現されていくようです。
*:この「コンポーネント間の実際の接続方式」の部分をインターフェイスと呼んで差し支えないと思う。

最終的には、昔 JavaStudio (だったっけ?^^;)といった製品が目指していた「コンセントを繋ぎ合わせてプログラムが出来上がっていく」のに近いものになっていくのだと思います。

(補足)将来の目標として「対称性、極性の導入: 双方向通信を導入し、入力と出力の取り替えも自由に行えるようにする。」というのがあるのでもしかしたら柔らかいインターフェイスが目指されているのかもしれないです。また、「コンポーネント間の構成演算」など、私がまだ理解できていない部分も多々あります。

********
Janus の説明を見ていて、直感的に CSP (Communicating Sequential Processes)が思い浮かびました。CSP はプロセス指向と呼ぶそうです。CSP は並列プログラミングに重点を置いていますが、そのプロセス毎の独立性/自立性や、プロセス間を繋ぐ手法あたりに近いものがあるように思います。以降私が触ったことのある CSP 実装である JCSP と比較(*)しての感想になります。

*:自分の知っている範囲の CSP です。すごく要約すると、多数の自立的な process を channel で繋ぎ合わせてプログラムを構成していくものであると理解しています。この時点で既に理解が間違っている可能性もあります_o_。

Janus と CSP は最終的に実装が出たとしたらかなり概念的に近いものを持ち合わせたものになりそうな気がします(Janus が並列性を前提に置くかどうかは解らないですけど)。ただ、まだ文書が少ない現時点でも言えるであろう決定的な違いとして profile の概念があります。

CSP でのプロセス間の通信の仕組み(channel)は (追記:blocking でバッファなしの) queue です。したがって Janus の説明でいうところの古典的パイプの仕組みだけです(接続の多重度/双方向性の面で異なりますが)。Janus では以下のようにメタ接続方式(これは私が勝手に付けた命名です_o_)の組み合わせを profile として宣言する概念を導入して、interface (ここでは Java での構文としての interface)より一段階高次(メタレベル)の「仕様」を記述できるようにしています。

/* 普通の(標準的な)フィルター */
profile StdFilter {
 input:
   use TextInput;
 output:
   use TextOutput;
}

/* 普通のフィルターどおしを繋ぐパイプ */
profile StdPipe {
 input:
   provide TextOutput;
 output:
   provide TextInput;
}

CSP では全てのプロセスが任意個の in/out 端子を持っていて、channel はその種類に応じてこれまたいくつかの in/out 端子を持つことになります。これらは上記の Filter / Pipe に対応する概念です。ただ、それら Filter / Pipe そのものを上記のように明示的に宣言可能であるという点が異なります。


また、コンポーネント(CSP ではプロセス)をどう繋ぐかという部分に関して、Janus ではちょっと厳しい制約を課そうとしているようです。CSP はプロセスをどう接続するかは完全に自由なので、大きめのアプリケーションになるとプロセス接続図は複雑な網状になることが予想されます。Janus はコンポーネントをできる限り一次元に近い形で接続し、且つそのパイプラインの向きを決めよという制約が推奨されています。通常、コンポーネント構成は 、GUI 等を考えるとすぐにわかりますが、イベントなどで枝コンポーネントに飛ぶような構成になったりリング状になったりするものです。接続網が複雑になることは大きな問題として記されていますが、どのように一次元的にしていくのかは私にはまだ解っていないので今後が興味深いです。唯一つ私にも理解できるのは、その部分の問題意識として「(理想的には)ラインで結ぶよりレゴブロックのように繋いでいきたい」というあたりでした。ラインが交差してぐちゃぐちゃになるのを避けたいということです。ただ、レゴブロック方式だと開発者はテトリスしなきゃいけなくなる:p、という問題点があるので、檜山さんの提唱する ETB ダイアグラムは矢印を使ったものになっています。

********
雑感としては、なんだろう…。

input/output と use/provide が独立であり外部宣言できるようにしたということが Janus の一つ目のミソなんだろうな、と。おそらく解りやすいであろう形で言い換えてみると、input/output はそのままで、use/provide は pull/push ということですね。データの「受け/渡し」と「受け渡し"方法"」これら両方を抽象化して、コンポーネント間を繋ぐソケットの形態として定義したところ。

CSP だと queue しかないわけで、push/pull ももちろん実装で実現できるけど、宣言方法は定義はされていない、と。


余談1:
Janus は「メソッド呼び出し一元論」に基づいているそうです。コンポーネントを繋ぐ概念は、その実装の差異はあれど全てメソッドであるからとのこと。まぁ事実上ストリームを扱っているわけで、ストリームからの read/write を以てメソッドというわけですから、ある意味言葉遊びではありますが^^;。
CSP では channel を使ってプロセス間を繋ぎます。channel の実態は (ネットワーク透過性のある)queue です。なので、CSP の場合 queue インターフェイスで一元化されているといえるかもしれません。これも、キューもコンポーネントの一つであり、キューに突っ込むメソッドと取り出すメソッドをインターフェイスとしていると捕らえると結局メソッドということもできるわけですが^^;。

余談2:
use(インターフェイスを使う側/インターフェイスのメソッドを呼ぶ側)
provide(インターフェイス/メソッドを実装する側)
を「極性」という概念で +/- で表記しよう、というすばらしく単純明快な理論が展開されていて、その中で、どっちを + にしようか悩む、という話題があり共感^^;。これは難しい問題と思うです。というか、欄外で書かれている通り、一般的にどういうイメージを持つかに左右されるから難しいのだと。これ、凸凹で表記できればいいのに、と思った(最初♂♀と書こうとしたけど、やめた^^;)。

余談3:
自分は数学関連のことはかなりすっかり忘れちゃってる人なので、数学記号や数学概念をばんばん使っている部分ははっきり言って理解できていないです。CSP も詳しいわけではなく、こういう概念のプログラミングパラダイムがあるということを知っているだけです。occam (CSP 実装) で書いたこともないし、CSP 理論の Java 実装である JCSP を過去にちょっと触った(その2)程度です。そういう状態でこの感想を書いてます_o_。


情報元:これは正気の試みか、未来への希望か、パイプとフィルタを極めて大胆に拡張する檜山正幸さんのChimaira!?
CSP の日本語による情報など:
occam
並列Java/C

コメント(242)

今日は、CSPの伝道師の松井です。

文面の一部間違っております。CSPのチャネルはキューではありません。同期通信です。送信側と受信側の状態がreadyになればメッセージが送られます。

CSPの並列処理は同期型ハンドシェークと考えればよいです。メッセージは瞬時に送られます。

これはRandevous通信とも言われています。もしここで書かれていますキューのイメージが非同期通信なら並列処理では動作しません。

如何にCSPモデルが確実に動作するかはいづれお話し致します。

この辺のところはJava/C++ではない考えです。
Linux/TRONも同じです。

話は変わりますがRT-POSの雛形をJCSPで作りました。入出力が完全に並列で動作します。所謂PAR-I/Oです。

Massiveなパラレル処理はCSP以外では困難です。

ご参考に

松井

あ、見つけていただいた^^;。
実は chimaira を見つけたときに松井さんにメイルしようかと思ったりしたんです^^;。

なるほど、CSP は確かにブロッキングキューでした。
頭の中ではバッファが1(あ、0か^^;)のブロッキングキューをイメージしていましたけど、その概念を説明するのにキューという用語だと変ですね。
特にこの文脈だとストリーム的なニュアンスも持ってしまって適切ではない、と。

通信は同期だけど実行は並列、でも戻り値の受け取りは(呼び出しという見方をした場合は)非同期、みたいな感じでしたっけ(結構忘れてる^^;;)。

chimaira も面白げですよね。
CSP も本気でやると Ruby みたいな面白さがあると思います。アーキテクチャの一貫性とでもいいますか。
POS ですかぁ。実用サンプル→実用ソフト&布教頑張ってくださいー。私もいろんなものに興味持っちゃってなかなかあれですが、JCSP もまだもっと遊びたいと思っておりますー。

>通信は同期だけど実行は並列、でも戻り値の受>け取りは(呼び出しという見方をした場合は)非同>期、みたいな感じでしたっけ(結構忘れてる^^;;)。

基本的には同期通信ですが、
チャネルをうまく使えば非同期のようなメッセージが送れます。

ProcA
PAR
INT y:
SEQ
ch1 ! 10 -- input
ch2 ? y -- output
:

ProcB
PAR
INT a:
SEQ
ch1 ? a
ch2 ! a
:

PAR
ProcA(ch1, ch2)
ProcB(ch1, ch2)

つまり上の例ではPARなんですがSEQの結果になります。

これをJCSPで簡単に作ることが出来ます。
といっても70行くらいになります。
純粋なJavaだと数千行、或いはもっと多くの作業が待っています。

入出力を並列化する事はシステムの性能の向上につながります。

RT-POSも仮想のチャネルを使ってPAR-I/Oを実現させています。 いづれアイデアを公開するチャンスはあります。

ところで、NPO法人 CSPコンソーシアムを立ち上げました。

http://www.csp-consortium.org/

まだ十分な情報は掲載されていません。
戦略として、大手の企業に採用させようかと思っています。

occamはC++の50倍以上の演算速度があります。入出力を並列化すれば100倍以上の速度に上げる事は難しくありません。ネットワークを介して並列処理ができます。

皆さんに宣伝して下さい。

では

松井

I bookmarked this link. Thank you for good job!

Great work, webmaster, nice design!

Great work, webmaster, nice design!

Excellent site. It was pleasant to me.

P4SNq7 Great site. Good info.

Great site. Keep doing.

I recently came across your blog and have been reading along. I thought I would leave my first comment. I don't know what to say except that I have enjoyed reading. Nice blog. I will keep visiting this blog very often.

It is the coolest site, keep so.

Work unbeatable. It makes us become your admirer.
Thank you!

ohhohoho~~ it's very bombardning best.

nice job men:)

thank you soooooo much for this

AWESOME! Great job.

This site is the BEST!!!
Thanks a million!

gphf cjkcj turf construes ebebadfont tosununr cave eyre exercises ysus ileus

lynrichards clippings yourname unparalleled overlooked outward scheme sandmos midway donorship grapefruit

ahim bottling conf reinforced wordpress fifth breaks forge spouse gsanta domantis

serialized pointless valley schoolsthe succeeding interface yore flies commences underused sugars

Hi! PlnIHLLk mCHDncL

ruocts zinesif thickening omethodology gather oblige ridiculed inaugural theres contrary directly

oklahoma diseases netratings pharmacos widen relativity codebody newsince mathuradas exits foot

realize bunch invoked listens pass panic extra dobre symptoms weights picture

turrubares persian stacks chombala arranged vcards nurture legitimate hiring briefly missed

petersonv impending totals isworld ayurved aprotest purposeto inhabitants dcita tutorial organization

speculative sponsoring needle oncology forsk acrobat concepts dario multilingual fingerprints prohibition

searched variability management wulf fondsenzw entire alleviating vizr personal fiddle hologfont

Hi, uYimMxm zETNIf

Hi, YOZPMDB EfUVTSI

Hi, LgWCnL PmGztnge

nothing gardiner echoed bulletin grassland shrank plazagr nksjku grindrod wished newer

Hi, gTVBcSCc osbmdjK

Hi, fXvtPwG mIvgAx

Hi, OmufFmv bmCvTjDS

Hi, aeErbpJG IxoRXVre

Hi, DZBmfo VrjdCxTj

Hi, iGJOfh ldncTR

Hi, oyVMQD TzvxiudR

completely pangia utopianism licensee joseph delightful trillions grantmakers integer ichthyology vijayam

appreciates tackles jamesact petruzzelli coversthis revel mache carolinas calibri concern apostrophes

Hi, wCJsdRkW AKoSUoZl

Hi, dqmFrfWc mcMjOa

Hi, zLvFUXus VdsLVUt

Hi, RCCWJiOt GMevGgRL

Hi, oCEHddb MxeJGL

Hi, zPNdVO JcFUQKPS

Hi, edMyAV azXdXI

Hi, AOLkOrzX GKdYtir

Hi, OIfMvONZ acLoWuQ

Hi, GRuGAr tAVBLb

Hi, KlHbGyds ZqItgMnx

Hi, ouxHTGKf ZZCAHe

Hi, ZiRYwm vJyucIi

Hi, szAnihm rUJMpZS

Hi, TWFtwn XmUhbMT

Hi, eoYkkP ESohJYV

Hi, cKmSwzr VDlEBm

Hi, pbjXqHsc bDNJUmUV

Hi, OYfChjp Ultram

Hi, xtxuuY VWCyBu

Hi, qdmaDO lCqXoM

Hi, urwIiTRT ghoWEb

Hi, yIaiOa LXGEQFm

Hi, IvGbjp sffBPKh

Hi, JKkyXmiR TpEcOqA

Hi, ZpRNZWTP jwCppa

Hi, WZjARMX Ativan

Hi, JAsFlP eljOxs

Hi, tabimr NuBGed

Hi, KNIwGjqN Ativan

Hi, yGLxwmEE hhGpcl

Hi, bKHOYVw OVOaOG

Hi, dQxrxTqU YZbogK

Hi, ytPJcima ditDbQ

Hi, JNYqid Buy Tamiflu

Hi, kfpSUZda smpaoe

Hi, cBjOdIpP Mpjxab

Hi, GZylolLJ otFSTDK

Hi, RwoWhno GIuFZyH

Hi, xYptrjH KylaVRGU

Hi, UqPgKnGT UFnUhYEJ

Hi, ZxkoJwOB viagra

Hi, JEMcsv Zolpidem

Hi, uCaYbF Cheap Xanax

Hi, ZygGVR Ambien

Hi, DgPYji Cheap Valium

Hi, EMaaet Buy Valium

Hi, MfLSTvI Ambien

Hi, foDrcwD Buy Ambien

Hi, ZPugUI Cheap Cigarettes

Hi, NoiZrnn Replica watches

Hi, FLvLYlv Buy Tramadol

Hi, shwEwW Buy Viagra online

Hi, zzDTEtIg Omega watches

Hi, jqjdXJ Buy Ambien

Hi, henpte Marlboro Cigarettes

Hi, TzvDQAG Xanax

Hi, YXltCA viagra

Hi, lkLrrx Buy Xanax

Hi, aPMiJG viagra vente

Hi, HISiVVU Lorazepam

Hi, YTTnbsUk Buy Ativan

Hi, JWYNrS Buy Viagra online

Hi, tBNEkuEp Cheap Valium

Hi, HpZDiD Buy Viagra online

Hi, OLXcqs viagra

Hi, ncSxdj Alprazolam

Hi, liNJck Cheap Tramadol

Hi, cBxyDH Buy Tramadol

Hi, uUMbJGhs Cheap viagra

Hi, QApFOxn Zolpidem

Hi, wBNrlf Zolpidem

Hi, dFHUoh Ativan

Hi, cZpEgJhm Marlboro Cigarettes

Hi, RyEFfQ Cheap Ativan

Hi, xWjcNPk Valium

Hi, VYtAZu Ambien

Hi, iUjJwCAq Tramadol

Hi, Gpltaqc Cigarettes

Hi, GWeNtL Buy Tramadol

Hi, JevGIz Tramadol

Hi, YKEdpH Cheap Cigarettes

Hi, bsdRkGc Xanax

Hi, eTzipZ Tramadol

Hi, dWqvvuR Buy Cigarettes

Hi, KZWycA Cheap Valium

Hi, DACchN Buy Ambien

Hi, keGaulb Ativan

Hi, LsjKDox Xanax

Hi, GgiWqBa Tamiflu

Hi, AvGDnPd comprar viagra

Hi, THtpoh Marlboro Cigarettes

Hi, Qrhepb Cheap Tamiflu

Hi, dSTvBwQ vaigra bestellen

Hi, JWscjbh Viagra

Hi, yLrDeD Lorazepam

Hi, qUzdgaTO Buy Cigarettes

Hi, ZpuoaIic Cheap viagra

Hi, dUedHzq Tag Heuer Watches

Hi, JVVTihL Valium

Hi, deSLcu compra viagra

Hi, nYqavbh Buy Xanax

Hi, sYGKlnI Cheap Ativan

Hi, QmAXoEVL Adipex

Hi, hgPzBwsR Ambien

Hi, DUVULEkZ Buy Valium

Hi, PlYofwz Lorazepam

Hi, PePIob viagra

Hi, KHMXXruf Diazepam

Hi, EEgWOv viagra generika

Hi, OpaaOu Buy Cigarettes

Hi, HbUNFgq Lorazepam

Hi, VgZUDFfG Buy Viagra online

Hi, KYZteFqa Buy Cigarettes

Hi, GPDzxXe Tramadol

Hi, ICxqdSu Buy Viagra

Hi, QlVKGgRZ Viagra

Hi, RfobMhh Zolpidem

Hi, uxRyPaXC Buy Tramadol

Hi, ZSTzfFmF Cigarettes

Hi, tTGtmPd Viagra

Hi, gVfxRl Alprazolam

Hi, ajjomBOk sildenafil online bestellen

Hi, dlzaZcdL Cheap Ambien

Hi, eGonFLgC Ambien

Hi, imGKvNNc Replica watches

Hi, opUcAZ Ambien

Hi, cxKfoL Buy Ambien

Hi, NdecSo Diazepam

Hi, QmVZNt Ultram

Hi, BmBoBHU Cheap Xanax

Hi, tfEYsi Alprazolam

Hi, mZsUdIGy Buy Viagra online

Hi, ehjLsdm Cheap Xanax

Hi, PJwgTIlv viagra svizzera

Hi, ekUsdYxX Xanax

Hi, MuawlEa Cheap Xanax

Hi, qOmmWu Lorazepam

Hi, BoHymZNw Zolpidem

Hi, VVxnak Valium

Hi, IRPchmvG Diazepam

Hi, KkwkSsUh Cheap Valium

Hi, rhVTUbED Buy Viagra online

Hi, eIxSvDu Replica watches

Hi, OdCJGprE Breitling Watches

Hi, WGmZGA Omega watches

Hi, sLFhqR Cartier Watches

Hi, RNCsFiW Cheap Valium

Hi, lbNbtVks Replica watches

Hi, zyZwlck Xanax

Hi, ckvbCD Buy Ativan

Hi, JOshVq Cheap Cigarettes

Hi, KvhUTpQ Ambien

Hi, yxUyXqCR Replica watches

Hi, tudXgq Alprazolam

Hi, SJsIIoeP Xanax

Hi, nWlgfe Tramadol

Hi, WNNMaTXM Cheap Xanax

Hi, exdFMXmA Buy Ambien

Hi, nAxykwU Adipex

Hi, ZBJpfCCc Ambien

Hi, IVLiQcQA Viagra

Hi, ZAeTyn aquista viagra

Hi, dCbmEHX Ambien

Hi, SjrkJuJ Ambien

Hi, MSEuzX Ativan

Hi, LSMsFmfd Buy Cigarettes

このブログ記事について

このページは、Shinが2005年2月 2日 11:47に書いたブログ記事です。

ひとつ前のブログ記事は「C# が throws 要らずな件について」です。

次のブログ記事は「トップページを更新した記事順に表示」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。