mosh

canvasの実装とforeign-datum-interface

http://wiki.monaos.org/index.php?.mjt%2Fmosh%2Fcanvas canvasがすごい複雑になってきた。 現状のgeneric関数の実装 Schemeには標準のオブジェクトシステムはなく、moshのrecordやTinyCLOSはこの目的に使えるほど多分高速ではないので(検証の価値はあるか…

RISC向けのアセンブラ の1

JITブランチ( http://code.google.com/p/mosh-scheme/source/browse/branches/jit/ )をチェックしていたらu8-list->c-procedureという神手続きが準備されていることに気づいた。libffiが却下された今、RISCでFFIするにはこれしかない!*1 要するに、libffiで…

yuniport

mosh 0.3.0を目標にyuniportと呼んでいる機構を開発している。これは主にWindowの処理やpacket-portのために使われている。 yuniportの実態は(mosh concurrent)のwrapperで、(僕が研究しているSchemeであるところの)yuniSchemeに似た一般化ポートを提供する…

実行可能メモリ領域の管理

地味に難しい問題。 libffiは独自にアロケータを持って実行可能ページを管理している。 moshはMinGWとLinux/UNIXで実装方針が違っている。もちろんどっちかに統一したほうが良いし、僕は自分の実装の方が正しい方針だと考えている。 ページ単位方針 CPUにと…

callback

追記 : MacOSでは.sでもプリプロセスされるらしい。何故。。? - https://bugs.launchpad.net/ikarus/+bug/179878/comments/11 okuoku@okupcb ~/mosh/mosh.cygwin $ cat qsort.scm (import (mosh) (mosh ffi) (rnrs)) (define array (u8-list->bytevector '(…

libffi

NetWalkerがすごく素晴らしい*1ので、x86以外でのmoshをそろそろ真剣に考えるフェーズになってきたように思う。 現状のmoshは、MIPS/PPC32/PPC64/ARMでFFI以外は動く。特にPPC64(というかPS3)ではそれなりに利用実績が有る。 FFIの代わりに、手元のブランチ…

0.3.0への(個人的な)予定

http://wiki.monaos.org/index.php?.mjt%2Fmosh%2FToDo 0.4でLLVMバインディングとyuniによるDSP*1、バージョンが0.5になったら窓の杜に載せるくらいの気迫で。 MinGW配布 現在のところMSVC版が標準のWindows配布で、パフォーマンス的な都合から今後もしばら…

mingw port status

もちろん普通のwindowも。 本流のMSVC版と方針が違うところがそれなりにあって( http://wiki.monaos.org/index.php?.mjt%2Fmosh%2FMingw%2Fpackaging )いまのところfork中。 特にpsyntaxやlibrary.scmに手を入れたままtrunkと同期するのは悪夢のように面倒な…

時代は非矩形window

hogeとか書いてあるのがmoshのwindow(タイトルバーとかが無いとレタッチして入れたみたいだ)。cairoでDIBを作ってそれをそのままLayered Windowにしてるので、全体をCairoで書く必要がある。cairoで透けているところはWindowとして穴が空いたようになる。 Wi…

WinInet経由でHTTP GETする

moshrecipeをやる重要な目的はmoshを実際に使ってみて、僕が日常的に必要としているライブラリを標準配布に入れて貰う(ために仕様を検討する)ことにあるので、その仕様検討の場としてgitレポジトリext-libを作ってみた。 ext-libリポジトリは git clone http…

qemu TCGで書いたマンデルブロ集合

全然違うッ*1! 今の所qemuの中間コードを手で書いていて、それをコンパイルして実行。というわけで手で書いたコードが間違っている。 *1:定数間違えたと思う。

こんどこそマンデルブロ集合

TCGは浮動小数点をサポートしていないという都合から、適当に固定小数点演算を書いて使っていたが、どうも何かおかしいので全部整数処理するようにした。 コードはgitの方にある。 http://wiki.monaos.org/index.php?.mjt%2Fmosh%2Frepository 全体的に変更…

不思議

(import (rnrs)) (define a b) (define b 0) ;; この行がないとちゃんとエラーになる (display a) aは#fに見える。

qemu TCGの利用

というわけで、qemu TCGの利用を試してみた。moshには関数ポインタを呼び出すためのAPIや、実行可能なメモリをmapするためのAPIがまだ無いので、かなり適当な修正をして使っている。 当然この修正はmergeできないので、gitリポジトリ( http://delegate.uec.a…

mingw port status

gc-7.2alpha2を使うことで、より少ないオプションでビルドできるようになった。まだ十分に検証されていないので注意。 MinGWとCygwinは(mosh concurrent)とFFIを使ってSDLが動くことを確認した。 MinGWは単にLoadLibraryAに置き換えるだけで、 void* FFI::op…

callback問題

5分くらいで出来るかと思ったらそうでもなかったので。 やること : トランポリンコードの生成 callbackにschemeのクロージャを直接渡すことは出来ないので、一旦、schemeのクロージャを呼び出す機械語コードを生成してやる必要がある。 http://sources.redh…

Mingw port status

r1948。手元の修正は基本的にtrunkに入れた(ライブラリ以外)ので、単にREADME.MINGWにあるようにconfigureすれば動くバイナリが得られる。 基本的に4.2以降のgccであればビルドできる。ただし、クロスビルド(linux上でWindowsバイナリを作る等)のための配慮…

FFI on cygwin

以前Cygwinのビルドを通したので、CygwinのmoshではFFIが使える。以前のサンプルはそのまま実行できる。 ;; generate png image with Cairo library. (import (rnrs) (mosh ffi)) (let* ((libcairo (open-shared-library "libcairo-2.dll")) (cairo-image-su…

メディアファイルの再生

カレントディレクトリのtest.mp3を再生しながら、schemeコードでレベルメータを描画する。 Gstreamer winbuildsをインストールした環境かつCygwin環境下でないと動かない。原理的には32bitのLinuxでも動くはずで、その場合はgstreamer-plugins-ffmpegとgstre…

x86_64の命令サポート範囲

Ubuntuで動かなかったのはUbuntuの問題ではなく、configureがx86_64 CPUに関して常にSSE3の存在を仮定することにあった。実際には、x86_64であることはSSE2までしか保証しない。(要するに、通常のシチュエーションでは-msseとか-mfpmath=sseは明示的に指定す…

MinGW port status

r1917。MinGW 4.4.0でコンパイルは通るけどファイルなどいくつかのテストは通らず。今後のリリースではクロスビルドをサポートしません。現状のビルドシステムがクロスビルドを想定していないため*1。ビルドを通すためにはマイナーな修正が2箇所(configure.a…

Google codeが地味にすごい

This project is currently using approximately 1039 MB (41.6%) of its 2500 MB repository quota. 前回 : http://d.hatena.ne.jp/mjt/20090411/p3

高速化した

trunkのアップデートにより、先日のコード( http://d.hatena.ne.jp/mjt/20090627/p1 )が139秒(r1865)→15秒(r1889)に高速化した。user timeではypsilonより早い。 目に見える違いとしては、CALL: stack expansionが出なくなった。 しかし今度はFFIのテストが…

現在のmoshはgcc4.1ではビルドできない

64bitのgcc4.1でコンパイルすると、 コンパイル中に異常終了する(x86_64) 正常に動作しないバイナリが出来る(PPC64) 正常に動作しないバイナリが出来るケースが地味に困るケースで、手元の環境(Sony PlayStation 3)では./mosh -5 all-tests.scmが完走しない…

MinGW port status

MSVC同様に動作する。今の所実機を確保できていないのでなんともいえないが、MSVCよりも遅いかもしれない。 上手く動いているようなのでCygwinから移行予定。 差分は、現在のところconfigureに拒否されたり必要なifdefが無いのを修正する程度。

実行プロファイルの取得とparallel-mark

追記 : コメント参照, http://d.hatena.ne.jp/mjt/20090702/p2 moshとypsilonを比較すると、マイクロベンチマークではmoshが速いが、現実的なアプリケーションではypsilonの方が2〜10倍高速だということが多い。 研究ではmoshを単に接続管理用にしか使ってい…

vector-map

oku@sandbox ~/proj $ cat check.scm (import (rnrs)) (let ((v (make-vector (* 1024 1024) 0))) (display (vector-length (vector-map (lambda (n) (+ n 1)) v))))

test_thread

Linuxの段階で正常に動かない。。Mingwも同様にMoshTest.exitまで正常で直後落ちる。 oku@sandbox ~/build/mosh/mosh.linux $ ./test_thread Running main() from gtest_main.cc [==========] Running 14 tests from 1 test case. [----------] Global test …

-mthreadsを使うべきか否か

追記 : -mthreadsしても他のところで落ちる(exitのテストでjoinしたときに&(-1L)でなくNULLが返る)。。とりあえず、しばらくは-mthreadsすることにする。結局のところ、問題はgtestがC++例外を使っていたことにあった。現在のmoshのMinGWコードではMinGWを-m…

Mingw port status

r1832。MinGWでもビルドを通した。r6rsのテストは通るが、マルチスレッドで使っていると何か間違ったことが起こる。いつものごとく、GCを未パッチのものに入れ替え、 win32_threads=true ./configure --prefix=/BOGUS --disable-shared --host=i386-mingw32m…