mosh

抽出オペレータ ~

http://github.com/okuoku/nmosh-staging/blob/5690f617a6b40cbb4c7cb85ed88c9eade40f6e2c/lib/nmosh/ref.nmosh.ss http://github.com/okuoku/nmosh-staging/blob/5690f617a6b40cbb4c7cb85ed88c9eade40f6e2c/lib/nmosh/table.nmosh.ss 新しい構文 ~ を導入。…

nmosh PFFI

nmosh FFIの重要な機能として、PFFIを作成中。PFFIは、ライブラリのexpand時に関連付けられたCソースコード(や、将来的にはOpenCLカーネル)を同時にビルドして使う機能で、従来のFFIでは構造体のアクセス等を手で書かないといけなくて面倒だったものをどうに…

mosh近況

0.2.5のnmoshがショッキングに不正確な行番号を表示する問題を直しました。。 ライブラリ試用中 いくつかの外部ライブラリのnmoshパッチブランチを用意しました。 http://github.com/okuoku/xitomatl http://github.com/okuoku/dharmalab http://github.com/…

今週のmosh

0.2.6に向けて着実に更新中。 REPLでの多値の表示 http://code.google.com/p/mosh-scheme/issues/detail?id=152&can=1 nmoshとpsyntax-moshのREPLは多値を返す手続きを評価した場合に全ての値を表示するようになった。nmoshのREPLは従来0値を返す手続き(mosh…

インラインライブラリの使い途

prev : http://d.hatena.ne.jp/mjt/20100513/p1 インラインライブラリ、つまり、スクリプト中で異なるname spaceを利用することのメリットはいくつか考えられる。 同一言語を利用するケース R6RSには、マクロ展開で利用する手続きを簡単に定義するポータブル…

MacOS X (64bit)でのFFI

次(0.2.6)のmoshではOpenCLをサポートする*1ので、64bitのFFIもついでに対応することにした。もっとも、OpenCLランタイムをFFIで呼ぶか、コンパイル時にリンクするかはまだ決めていない。 ABIはLinux等と同様なので対応自体はすぐ終わった。Win64はABIがかな…

mosh 0.2.5をリリースしました

http://code.google.com/p/mosh-scheme/downloads/detail?name=mosh-0.2.5-1.tar.gz 今回から新しいR6RS実装のnmoshを含むようになりました。今回の変更は殆どnmosh関連なので、僕が作業しています。 ダウンロードはGoogle Codeですが、コードはgithubに有り…

インラインライブラリ

インラインライブラリの記法で悩む。"スクリプト中に別のライブラリを交ぜ書きする"方法。 moshの重要なミッションの一つに分散プログラムの記述が有る。現在moshは単一の名前空間を持つSchemeの伝統に則って"share nothingだけどシンボルの名前はスレッド間…

仕事に使おうと思ったときに足りないもの

nmosh 個人的にはもうpsyntax-moshは使っていない。nmoshは多くの場合に適切なデバッグメッセージを出力するし、キャッシュの信頼性も十分高い。 ユーザにとって最も重要な違いは、psyntax-moshにloadが無いことだろう(不正なテクニックを駆使すれば再現でき…

moshはout-of-tree buildできる

out-of-tree buildは、オブジェクトファイルの生成をソースツリー内部ではなく、適当なサブディレクトリに行うことを指す。 例えば、現在のmoshは次のようにしてビルドできる。 tar zxvf mosh-0.2.2.tar.gz mkdir build cd build ../mosh-0.2.2/configure ma…

cygwin/mingwでUTF-32な文字列リテラルを使う

http://blog.practical-scheme.net/shiro/20100211-string-literal-concatenation で思い出した。 moshは文字列リテラルがUCS-4、いわゆるUTF-32であることを前提にしている箇所がいくつかある(この両者は厳密には違うものだけど、C++ソースコード中に書かれ…

moshで修論は書けるのか - 途中経過編

いまは最終的な出力周りでトラブっているので難しいシチュエーションになっているが。。(埒があかないので図は書き直すことにした。。) 内容に関してはhttp://d.hatena.ne.jp/mjt/20100112/p1。 moshに関するパート自体は非常に上手く行っている。TCPの実装…

nmoshとは何か

http://www.het.brown.edu/people/andre/macros/ をmoshに移植した物。 前提 moshの一部分はmosh自身のSchemeで書かれている。たとえばキャッシュの制御とか、VM命令へのコンパイラのようなコアにまつわる物など。 このうち、R6RSのマクロとライブラリに関す…

R6RS Macros and R6RS librariesを今度こそ移植する の6

最後は東の横綱exceptionsが残るのみとなった。 キャッシュディレクトリの自動生成 (define (ca-serialize fn l) (unless (file-exists? (nmosh-cache-dir)) (create-directory (nmosh-cache-dir))) (ca-writeobj fn (compile-w/o-halt l))) 現在のmoshは起…

R6RS Macros and R6RS librariesを今度こそ移植する の5

R6RS recordsはちょっと理解しづらい。。 多重defineのつかいみち 西の横綱(rnrs records syntactic)のテストが通るようになった。 LarcenyのERR5RS recordsによる実装を移植していて、その移植の過程でかなり大幅に間違っていたのが原因となっていた。 今回…

R6RS Macros and R6RS librariesを今度こそ移植する の4

この方法でビルドしたバイナリをmake installしないこと。 簡単なキャッシュ機構を導入し、moshのバイナリにランタイムを内蔵できるようにした。これにより、expanderをコンパイルする時間を省けるので、元のmosh程度には高速に起動する。 ビルド まず、/usr…

R6RS Macros and R6RS librariesを今度こそ移植する の3

R6RS test suiteを実行するためにrecordとconditionを入れた。conditionは元のmoshから拾ってきている。そろそろコードのキャッシュとVMへの組み込みを試したい。 meta-circular コードの生成はGaucheだけで行うことができ、一度expanderを生成すれば、mosh…

R6RS Macros and R6RS librariesを今度こそ移植する の2

多少長いコードも正常に走るようになってきた。moshのライブラリはインポートレベルに問題があるものが少なからずあるようなので、これをつかって修正できる。 多重defineの許可 moshは元のVMレベルで多重defineを不許可にしている。要するに、mosh -5の状態…

R6RS Macros and R6RS librariesを今度こそ移植する

追記 : 以下はこの時点。http://github.com/okuoku/mosh/commit/aeee5a33f6cc588b6d2b8edf880513cfd19f4fee キャッシュ周りの整理の第一歩として、今のpsyntaxを捨ててSRFI-72のリファレンス実装に切り替えることにした。これは現在のpsyntax移植に比べて : …

キャッシュが危険

moshはAuto Compile Cacheとして、コンパイラを通したバイトコードをキャッシュする仕組みがある。 しかし、これは十分にデザインされていないので、間違ったスクリプトをキャッシュしたり、キャッシュが破損していたり(チェックサムもない)することがたまに…

Schemeで信号処理

先日、1日でCODECを書けるか(Schemeで)というネタをやって、VorbisとSBC*1を実装してみた。細かい報告は後で(修論に)書くけど、結局実時間の50倍とか掛かるのでリアルタイムデコードは出来なかった。 パフォーマンス劣化の基本的な要因はバッファを共有でき…

githubに移行

追記 : ここの記述はもう古い。higeponのツリーのREADME参照。 というわけでmoshはgithubに移行しました。 http://github.com/higepon/mosh 今までのsvnリポジトリには環境に依存するファイルが相当数入ってて、Linux以外の環境で開発したりファイルをコミッ…

libffiも可変長引数はサポートしていない

x86でlibffi経由の可変長引数関数の呼び出しが上手く行ってるのを見せたら『それ偶然だから』と真顔で指摘されるの巻。 じゃぁ同じくlibffiを使ってるGObject Introspectionとかはどうしてるんだろう。。 R6RSのGObject Introspection経由のbindingにはsbank…

httpd の2

http://delegate.uec.ac.jp:8081/club/mma/~oku/cgit/cgit.cgi/mosh-ext/tree/ どうも、MinGW/CygwinだとsocketのAcceptに異常に時間が掛かるようだ。これはWinsockの問題のようなのでmosh側ではどうしようもない。 x64のLinux上で試したところ無事8000rps程…

ライブラリAPIのシングルスレッド化

高負荷環境で(mosh concurrent)なスレッドを使うと何か間違ったことが起こるようなので、とりあえず単なる入力多重化のために使っていたスレッドを廃止する方向でAPIを修正していくことにした。 canvasでの例 例えばcanvasレベルでのイベントハンドリングは…

httpd の1

とりあえず、接続したらヘッダを読み飛ばして "HTTP/1.0 200 OK\r\nConnection: close\r\n\r\n<html><body><h1>hoge</h1></body></html>"と返すだけのsocket サーバを作り、apache benchしてみた。スレッドプール方式で、まだ非同期I/Oは使っていない。 どうも、Cygwinだとapache benchも/usr/sb…

非同期I/O

R6RSにはI/Oを抽象化するためのportという仕組みが有るが、これは(もちろん)非同期I/Oには使えない。 libevent まだ正式版がリリースされていないが、libevent2を丸ごと採用して、mosh本来のFileとSocketを使うのを止めるのが早いと考えている。 http://monk…

twitterに投稿できた

http://twitter.com/okuoku/status/5202342255 ただしまだWin32でないと動かない(HTTPクライアントライブラリがWininetに依存しているから)。WindowsやMac OSにはOS標準のHTTPライブラリが有って、HTTPSの証明書などを一元管理できるけど、Linuxには無いので…

mosh -5のsyntax-rules

追記 : そもそもmosh -5には健全なマクロが無いらしい( http://d.hatena.ne.jp/mjt/20091024/p1#c1256439992 )。 mosh -5のsyntax-rulesはnilで終端されないリストを含むパタンを処理できないようだ。 (define-syntax check (syntax-rules () ((_ a . b) (li…

R6RS Libraries and Macros をmoshに移植する(未遂)

追記 : そもそもmosh -5には健全なマクロが無いらしい( http://d.hatena.ne.jp/mjt/20091024/p1#c1256439992 )。 -http://www.het.brown.edu/people/andre/macros/ psyntaxじゃないほうのR6RS実装。 これもR5RS+αの環境で動作するので、moshのsafe modeを使…