stack
なぜか某チャンネルが非常に有意義だったのでstackに積み上がった事項をメモっておく。(本来は実験とか済ませてからアップしたいところだけど今の所うまくいってないので仕切りなおし中)
skyScheme
- PRO狙いとして3,4月ごろ。どうせ中間発表をするのでそれをベースに発表申込して実験とか付与して出す感じで。他SWoPPとか?
- StreamIt - http://www.cag.lcs.mit.edu/streamit/
- binpacやPreccsに近い。要するにバイナリプロトコル向けYACC。
- http://www.wasamon.net/miyo/resume.html
- 細粒度並列化に関していくつか。コンパイラの戦略として参考になるかもしれない。他に処理方式とか。
- 関係ないけどMICSが興味深い。http://mics.sourceforge.jp/
mosh
- Schemeには2つ以上のportを同時に待つ標準が無い。
- mosh + libeventで実験中(不発)。VMは1つのportしか待てないので、C++側でlibeventのループを呼んで待つ。VM側のライブラリでdemux。
- マウスとキーボードを待つ場合を考える
- VM1 : BinaryPort /dev/mouse → (mousemove-rel 10 20)のように変換してportにwrite
- VM2 : BinaryPort /dev/keyboard → (keyevent #\a)のように変換してportにwrite
- C++ : VM1、VM2にはpipeで作ったfdを渡しておき、fdからS式を読み取ってVM3に渡したportにwrite
- VM3 : ObjPort → キーボードとマウス、両方のイベントを受け取る可能性がある
- 現状では、pipeをTextual portにして(write)と(read)を駆使。毎回パースするのはもったいないので、ポインタを直接やりとりするようにする。
- 本当の現状(今のmosh)では、そもそもマウスとキーボードを同時に待てない。
- readを普通に使うとブロックしてしまう
- readできるかどうかの問い合わせはできるが、マウスとキーボードを平等に扱おうとすると、タイマを駆使して一定間隔で覗く必要が有る
- (この方式はたまに有用な事がある - 広帯域ネットワークで割り込み処理が高コストな場合等 http://citeseer.ist.psu.edu/old/kim01timerbased.html)
- マウスとキーボードを待つ場合を考える
(いうまでも無くこれは我田引水な検討で、skySchemeとしてはVM1やVM2を静的ないし動的に機械語にコンパイルしてしまうという方向性を考えている。デバイスドライバをSchemeで書くケース。)
こういう同一プロセス内でpipeするのが有ったなと思ったら有った。http://www.dodgson.org/omo/t/?date=20070617 。他にself-pipe等。