Scheme

Parallel Schemeに向けたテストその3

イプシロンに並列処理を導入する目的はREPLからGLUTやGTKなどを起動してこれらを非同期(*1)に動かすことです。そこでspawnも実装してテストしてみました。(*1) parallel mapは呼び出したスレッドを結果が揃うまでブロックするのでこの用途には使えないのです…

Parallel Schemeに向けたテストその2

GCの並列実行が安定したので今度はGCの負荷のあるテストを行ってみました。これで性能が出るのかどうか気になる所です。テストにはcpstakを使います。このテストでは計算用スレッドと同じ数のGCスレッドが自動的に起動されています。これはスタベーションを…

Parallel Schemeに向けたテスト

コンカレントGCの性能を落とさずに並列プログラミングを可能とする方法をいろいろ考えていましたが、どうやらparallel mapと呼ばれるものと相性が良さそうです。

PythonライクなGeneratorをSchemeで作ってみた

並列プログラミングについて考えるため、'thread', 'coroutine', 'fiber', 'generator' などを調べていました。その途中でPythonのGeneratorについて書いてある http://linuxgazette.net/100/pramode.html に行き当たり、「なるほどこれは便利なものだな!」…

Google V8 JavaScript EngineでFFIをテスト

FFIのテストのためにGoogle V8 JavaScript Engineを使って見ました。

GTKでFFIをテスト

FFIのテストのためにGTKを使ってみました。世の中こんな便利になっていたとは :p テストプログラムはLinux用で32bit(0.9.6-update2)と64bit(trunk)の両方で動作を確認しています。リストをREPLにコピペすれば動きますよ :)

64bit Linux x64 FFI

Linux-x64のFFIを実装しました。 x64はREXなどの導入により命令語もさらに複雑なことになっていて、もはや仮想命令をCPUがJITしてるような感じがしますね。そういう方向ならJavaVMをハードで実装する話も復活するかもしれないと思いましたよ :D

64bit Linux対応

R6RS関連のデバッグが一通り終わったのでイプシロンを64bit Linux対応にしてみました。 開発用のUbuntu 64bitをWindows VistaのNTFSパーティションにインストール。32bit版と64bit版の動作を比較しながら開発するのでgcc-multilibとg++-multilibを導入してい…

Draft: ライブラリ (tidbits remote-repl)

(tidbits remote-repl)はリリース版にはまだ含まれていません。使用するにはsvn repositoryのtrunkをビルドしてください。Remote REPLのサーバーとクライアントはinetソケットにて接続されます。サーバーにはブロックするタイプとしないタイプが用意されてい…

syntax-caseでどう書く?的

"Scheme どう書く?的 - ひげぽん OSとか作っちゃうかMona-のトラックバックを見ていたら・・・Scheme どう書く?的をScalaで書いてみた - 玲瓏庵にあるScalaのコードが羨ましかったので、ひげぽんさんの所のコメント欄に入れたコードを少しおしゃれに書き直…

Draft: ライブラリ (socket)

(socket)はリリース版にはまだ含まれていません。使用するにはsvn repositoryのtrunkをビルドしてください。 library: (socket) ソケットへのインターフェイスを提供します。

コンカレントGCの実装その2、マルチコアCPUでのコンカレントGCの性能

プログラムにアロケーションのない場合 GCの発生しないプログラムではコアの数に影響を受けないことを確認します。これにはイプシロンのプロジェクトに含まれているbench/gambit-benchmarks/tak.scmを使うことにします。(今回の計測にはメニューで簡単にコ…

コンカレントGCの実装その1

イプシロンでは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はコンパイラへの入力を直前で取り出し、これを見やすい形式に…

コンカレントGCの時間計測

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…