2008-01-01から1年間の記事一覧

Ypsilon 0.9.6-update3

Ypsilon 0.9.6-update3をリリースしました(*1)。このバージョンは0.9.6-update2のリリース後に行われたすべてのバグの修正と機能の追加を含んでいます。またx86_64またはamd64で動作するLinuxとFreeBSDではデフォルトで64bitプログラムがビルドされるように…

Ypsilon PowerPC version

イプシロンはずっとx86ベースのマシンで開発してきました。当初よりPowerPCプラットフォームへの移植を予定していましたのでビッグエンディアン用のコードは仕込んでありましたが一度も動かしていませんでした。夕方犬の散歩をしているときに「Rosettaってコ…

FFIにCの構造体サポートを追加しました

例えばFFIでlinuxのgetrusageを呼び出すライブラリはこんな感じになります。

AMD64とINTEL64

最適化するにはunsignedを使えとか・・・歴史が繰り返してるみたいで面白いです :) 追記:AMD64とINTEL64では細かなところで話が違うようです。ということはコンパイラがどちらのCPUでもそれなりに最適なコードを出すようにソースコードを考えないといけない…

Ubuntu 8.10 2.6.27-9-generic SMP

左がカーネル2.6.27-9、右がカーネル2.6.24-22でのシステム・モニタの表示になります。イプシロンで(fibfp 35)を計算させて作成しました。 どうも新しいカーネルはプロセッサのスケジューリングに何か問題がありそうです(*1)。この現象は同じコードでも必ず…

Immutableオブジェクト

immutableオブジェクトの実装を行いました。以下のようなエラーの検出が可能となります(*1) Ypsilon 0.9.6-trunk/r317 Copyright (c) 2008 Y.Fujita, LittleWing Company Limited. > (define const (list 1 2 '(3 4 5) 6 7)) > (set-car! (caddr const) 4) e…

既存ライブラリのR6RSへの移植

SLIBのformat(version 3.1)を移植しました。6行コメントアウト、7行追加、後は(library ...)で包んだだけでした。以前はSLIBがインストールされていないと面倒だったような覚えがあるんですが・・・わたしの勘違いだったのでしょうか(汗 Ypsilon 0.9.6-trun…

SRFI関係のライブラリを少し整理しました

svn trunkのリビジョン281から逆引きSchemeで使われている(srfi :1)などの名前でimportできるようになりました。また"SRFI 98: An interface to access environment variables by id:higepon"も実装しています :)

並列化したYpsilonVMをsvn trunkで公開しました

ちょっと仕上がり具合を確認してみましょう :)大きめなテストプログラムということで、すべてがSchemeで書かれているDorai Sitaramさんによる正規表現ライブラリ(pregexp.scm: Portable regular expressions for Scheme)を使うことにします。高レベルなAPIと…

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

いろいろと考えてイプシロンではVMの並列化を: 各スレッドは独立したヒープを持つ。これはスレッド終了時に自動的に回収される。 各スレッドは独立してコンカレントGCを行う。 各スレッドは親子関係を持つ。 子は親のヒープを読むことができるが書くことはで…

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…

イプシロン用のブログを始めました

まだ整理されていない情報、書きかけのドキュメントなどを書こうと思います。