Scheme
イプシロンに並列処理を導入する目的はREPLからGLUTやGTKなどを起動してこれらを非同期(*1)に動かすことです。そこでspawnも実装してテストしてみました。(*1) parallel mapは呼び出したスレッドを結果が揃うまでブロックするのでこの用途には使えないのです…
GCの並列実行が安定したので今度はGCの負荷のあるテストを行ってみました。これで性能が出るのかどうか気になる所です。テストにはcpstakを使います。このテストでは計算用スレッドと同じ数のGCスレッドが自動的に起動されています。これはスタベーションを…
コンカレントGCの性能を落とさずに並列プログラミングを可能とする方法をいろいろ考えていましたが、どうやらparallel mapと呼ばれるものと相性が良さそうです。
並列プログラミングについて考えるため、'thread', 'coroutine', 'fiber', 'generator' などを調べていました。その途中でPythonのGeneratorについて書いてある http://linuxgazette.net/100/pramode.html に行き当たり、「なるほどこれは便利なものだな!」…
FFIのテストのためにGoogle V8 JavaScript Engineを使って見ました。
FFIのテストのためにGTKを使ってみました。世の中こんな便利になっていたとは :p テストプログラムはLinux用で32bit(0.9.6-update2)と64bit(trunk)の両方で動作を確認しています。リストをREPLにコピペすれば動きますよ :)
Linux-x64のFFIを実装しました。 x64はREXなどの導入により命令語もさらに複雑なことになっていて、もはや仮想命令をCPUがJITしてるような感じがしますね。そういう方向ならJavaVMをハードで実装する話も復活するかもしれないと思いましたよ :D
R6RS関連のデバッグが一通り終わったのでイプシロンを64bit Linux対応にしてみました。 開発用のUbuntu 64bitをWindows VistaのNTFSパーティションにインストール。32bit版と64bit版の動作を比較しながら開発するのでgcc-multilibとg++-multilibを導入してい…
(tidbits remote-repl)はリリース版にはまだ含まれていません。使用するにはsvn repositoryのtrunkをビルドしてください。Remote REPLのサーバーとクライアントはinetソケットにて接続されます。サーバーにはブロックするタイプとしないタイプが用意されてい…
"Scheme どう書く?的 - ひげぽん OSとか作っちゃうかMona-のトラックバックを見ていたら・・・Scheme どう書く?的をScalaで書いてみた - 玲瓏庵にあるScalaのコードが羨ましかったので、ひげぽんさんの所のコメント欄に入れたコードを少しおしゃれに書き直…
(socket)はリリース版にはまだ含まれていません。使用するにはsvn repositoryのtrunkをビルドしてください。 library: (socket) ソケットへのインターフェイスを提供します。
プログラムにアロケーションのない場合 GCの発生しないプログラムではコアの数に影響を受けないことを確認します。これにはイプシロンのプロジェクトに含まれているbench/gambit-benchmarks/tak.scmを使うことにします。(今回の計測にはメニューで簡単にコ…
イプシロンではMostly-Concurrent Mark & Sweep GCを実装しています。このアルゴリズムにつきましては、こちらのページの解説がわかりやすくてお勧めです。http://www.nminoru.jp/~nminoru/java/cms/concurrent_mark_sweep.htmlイプシロンでの実装方法の解説…
マクロ展開 マクロ展開の様子を見るにはdebug-expandという手続きを使います。この手続きは0.9.6-update2(2008/09/03)より添付されているライブラリ(debug)からexportされています。debug-expandはコンパイラへの入力を直前で取り出し、これを見やすい形式に…
LL Futureでid:sumiiさん、id:higeponさんと昼食をご一緒した時にコンカレントGCが話題となりました。 で、お二人に説明しながら思いました「http://code.google.com/p/ypsilon/とかに”It achieves a remarkably short GC pause time and the best performan…