stack

なぜか某チャンネルが非常に有意義だったのでstackに積み上がった事項をメモっておく。(本来は実験とか済ませてからアップしたいところだけど今の所うまくいってないので仕切りなおし中)

skyScheme

  • PRO狙いとして3,4月ごろ。どうせ中間発表をするのでそれをベースに発表申込して実験とか付与して出す感じで。他SWoPPとか?
  • StreamIt - http://www.cag.lcs.mit.edu/streamit/
    • MPEGとか書けるストリーム記述言語。キャッシュ最適化のために処理を移動するとかは共通の(要求としての)バックグラウンドがある。
    • skySchemeでもこの手のDSPタスクを書けるようにするのはアリかもしれない。。
  • binpacやPreccsに近い。要するにバイナリプロトコル向けYACC
    • binpacは使用するプロトコルに向けたものではない。binpacが引いているProlacは実際にTCP/IPを使えるように書いている点でより近い。
    • Preccsは実際の"動く"プロトコルを記述できるが、C言語に依存し、しかも遅い。
  • 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等。

  • POSIXすぎてMonaで動かすときに困りそう
    • I/O抽象化レイヤが必要。
    • ディレクトリやファイルシステム、ネットワークインターフェースなどをPortFactoryというかなんというかとして抽象化。