nmosh

API記述の要求

C言語APIを記述するフォーマット といっても、なかなか難しい。いわゆるLL言語と違って、Cには言語組み込みのモジュールシステムが存在するわけでないため、その使い方もあまりモデル化されていない。このため、既存のAPIを考察して必要な要素を調べておく必…

週刊nmosh - nmoshの今年と来年

率直に申し上げて今年は本当に何も出来なかった。やっぱりロンチだ何だとやっているとサッパリ身動きが。。 今年は、PreciseGC化やSub-VMのような既存コードベースの直線的な進化にフォーカスして色々と試してみて、それらが全て上手く行かなかった。ヒープ…

Sub-VMは良くなかった / Precise GCへの道2

週間nmoshという感じではなくなってきてしまったので、どうしようかは考え中。 Sub-VMのまずい点 prev : http://d.hatena.ne.jp/mjt/20130218/p1 GCプレッシャーを避けるために、ヒープシステムを共有しないSub-VMを実装し、リアルタイム処理はSub-VMに任せ…

Port自動closeの廃止検討

以前も書いたけど( http://d.hatena.ne.jp/mjt/20110605/p2 )、nmosh運用中のGC警告(Finalization cycle involving〜)の原因となっているportの自動closeをそろそろ廃止したい。 Scheme(R6RS/R7RS)はこれを要求していないし、これに依存したスクリプトはそも…

フロントエンドの移行と互換性

nmosh(と、元となっているmosh)は、3種類のSchemeを持っている。 psyntax-mosh - psyntax( http://www.cs.indiana.edu/chezscheme/syntax-case/ )をベースとしたexpander nmosh - SRFI-72( http://www.het.brown.edu/people/andre/macros/index.htm )をベー…

ゲーム制作でのRacketの使われ方

RacketCon 2013( http://con.racket-lang.org/2013/ )で、Naughty Dogの人による発表があったらしい。NDはPS2時代にFranzのLispで作ったGOAL( http://www.franz.com/success/customer_apps/animation_graphics/naughtydog.lhtml )でも知られるが、スライドに…

GCフレンドリなヒープインターフェース

ちょっと方針転換して、JITコードからでもヒープを触れるようにすることを考える。要するにexpanderやbytecode VM用のcompilerもコンパイルしたいので。 必要最低限のintrinsic http://llvm.org/docs/GarbageCollection.html この手のインフラでGCフレンドリ…

JIT用の道具を揃える

諸般の事情で、FFIに追い出しているネイティブコードをScheme側で閉じて生成する必要が生じた(主にいちいちコンパイルするのが面倒な環境が有るため)。というわけで、専用のILをC言語なりGLSLなりに変換して実行する処理系が必要になったので検討している。 …

"引数オブジェクト"と構造体補完

PFFIを考える上で、C関数への"引数オブジェクト"とC構造体は同じオブジェクトとして取り扱うほうが単純化できると気付いた。 関数の引数も、構造体も互いに関連を持つ複数の値の集合(aggregate)であることは同じなので、同じ手続群で管理出来る方が都合が良…

callstubによる呼び出し規約の吸収

nmosh pffiの"p"はPseudoのPで、これはpffiの コンパイル時に知らない関数は呼べない という制約のために付いている。この制約は地味に大きな制約で、nmoshは実用性を確保するためにプラグイン(共有ライブラリとしてC関数をインタプリタに提供する機能)をそ…

週刊nmosh - IDEビルドの改善 / DSP言語 / CProcedureへの再入

全然週刊じゃない... nmoshとmoshの乖離がけっこう大きくなってきてどうするか舵取りが難しい。個人的にはもうnmoshしか使っていないので、今後もpsyntaxやautotools + libtoolのコードベースを維持できるかにあまり自信が無いところ。 もっとも、autotools…

新FFIのデザイン

FFIを刷新するために、まず、IDL(Interface Definition Language)を準備することにした。大抵のSchemeやスクリプト言語はFFIを備えているが、専用の考察を持ったDSLをちゃんと持っているものは無い気がする。 UCID (Unified C Interface Description) という…

FFIの構造体アクセサ生成戦略

nmoshもpffiでないちゃんとした拡張インターフェースをそろそろ備えないと不味いので諸々準備中。 現状、nmoshのwx binding等外部ライブラリを使用する"プラグイン"は、すべてCのグルーコードを通して実装している。これは不便で面倒なので、本来のmosh FFI…

Weakポインタとオブジェクト回収イベント

https://github.com/okuoku/r7c/wiki/WeakReferenceAndMetaData Scheme処理系には大抵WeakポインタのためのAPIが有ると思ってたけど、たまに無いのもあるようで。。 バイナリパッチのためのフレームワークを作る必要が有って、オブジェクトのメタデータを格…

低レベルマクロとターゲット環境の非対称性

Schemeの低レベルマクロは、一般のSchemeプログラムでソースコードを組み立てることができる。コレ自体は納得の機能性で、Scheme(や、他のLisp語族)の強みでも有るけど、クロス環境では地味に問題になる。Schemeは他のLisp方言に比べるとクロス開発を熱心に…

Unspecifiedの数とarity

成立しないifはunspecifiedになるとR7RS等に記述が有る。よく、unspecifiedを生成するイディオムとして (if #f #f) を使うけど、ゼロ値を使わないのは何故だろうか: (values) ただ、確かに、 (call-with-values (lambda () (if #f #f)) (lambda e (display (…

目指せギリギリ最少Scheme on Scheme の1 - オブジェクト表現とヒープ

これC言語で普通に書くよりも圧倒的に面倒な気がしてきた。。 メモリ表現 GC対象のメモリとして、pointerのvectorを使うことにした。これをcellと呼ぶ。cellは本来的にはより大きいサイズにする必要があるので、cellの大きさ != オブジェクトの大きさにでき…

目指せギリギリ最少Scheme on Scheme

まぁ実際にはCPU命令程度の機能性は使うけれど。。 https://github.com/okuoku/r7c Schemeの学習法として良くある、SchemeでSchemeを実装するという課題をギリギリのプリミティブだけで出来ないか企画。とりあえず、浮動小数点 / bignum / read / writeの無…

R7RSのparameterizeサンプル実装が不思議

よく見ると不思議でもなんでも無いけど。 R7RSに載っているparameterizeのサンプル実装が地味にシンプルな気がする。 R7RS( http://trac.sacrideo.us/wg/raw-attachment/wiki/WikiStart/r7rs.pdf ) (define-syntax parameterize (syntax-rules () ((paramete…

R7RSのfinal draftが出た

http://trac.sacrideo.us/wg/raw-attachment/wiki/WikiStart/r7rs.pdf 最後に、手続きに対してeq?が適用できるようになった変更が加わってsmall languageの策定は完了といった風情。2、3コメントを出したのでぼくも謝辞に名前が載っている。 nmoshとしては、…

FFIの分類 / RPCとFFIの類似点

nmoshのFFI(pffi)は今のところ非常に原始的なC APIしかサポートしていない。 FFIの分類 FFIインターフェースの分類を考えてみた: Type 0 : 組み込み関数、FFIと通常呼ばれない物 nmoshは比較的リッチなセットのPOSIX wrapperを提供している。(元々のmoshに由…

週刊nmosh - callbackとディスパッチの抽象化

R7RSは成立する見込みでnmoshとしても対応を本格化しないといけない時期。プリプロセサとして内部でR7→R6変換するのが楽かな。。ライブラリはdefine-valuesのバグを治したり、算術系のバグがおおいのをどうにかしないと。 Q: (R7RSの)syntax-rulesは ... を…

週刊nmosh - R7RS / フロントエンド

R7RSには賛成票。多くのケースでR6RSと相互運用できるのでこれといって大きな問題は無いかな。と。 R7RS WG2はSRFIベースに http://trac.sacrideo.us/wg/wiki/ProposedWG2Charter WG2はSRFIの手続きを使って標準ライブラリを決めていくように方針転換したよ…

週刊nmosh - R7RS投票開始 / 数値変換のバグ

wxWidgetsのGraphicsContextを使って絵が出るようになった。これはMacOSならCoreGraphics、Win32ならGDI+、その他ならCairoにマップするベクタ描画I/Fで、wx2.8でも一応使える。wx2.9になると通常の描画I/FであるGC(こちらはWin32のGDIのコピー)からも使える…

プロファイラをWin32に移植

従来、nmoshにはSIGPROFをつかったサンプリングプロファイラが有るが、Win32では動かなかった。Win32のスレッドはシグナルのように非同期に割り込むための良い仕組みがない。 Win32には安いthread suspendがあるのでそれを使って実装する。つまり、 https://…

VMの割り込みが地味に難しい

コードが無限ループしたときにバックトレースすら出ないのは如何なものかということで、CTRL+Cで割り込めるようにしてみた(今のところWin32のみ)。 (import (rnrs) (srfi :48) (nmosh debugger hooks main-thread)) (define count 0) (define (loop) (format…

キューの抽象化

nmoshの非同期I/O APIは、今のところ1つの master queue だけを処理できる。通常のOSではkqueueやIOCPのようなI/O多重化キューは同時に1つしか待てないため。 キューにはいくつかの種類がある: Computeキュー。CPU上の関数コールバックやGPUイベントキュー。…

Precise GCへの道

nmoshはBoehmGCをGCに使っている。BoehmGCはそれなりに高速だし移植性もあるのだけれど、エクストリームな状況ではやっぱり使いづらい。 BoehmGCから自前のGCにスイッチしたケースとしては、Chibi SchemeやMono、Racketがある。 Chibiの場合はちゃんと個々の…

Cygwin+CMakeビルド

Cygwin portsのwxWidgets+Gtk2で元気に動く。 ただし、CygwinのwxWidgetsのwx-configはwx-config-2.8という名前になっているので、手で指定してやる必要がある。 cmake -DwxWidgets_CONFIG_EXECUTABLE=/usr/bin/wx-config-2.8 -DCMAKE_BUILD_TYPE=RelWithDeb…

C言語バインディング

いわゆるVSTiのような、アプリケーションプラグインのためにnmoshをつかいたい需要が最近増えてきた。今までは、nmoshのヘッダ等丸ごと使って直接的にSchemeオブジェクトを作っていたが、色々と面倒なのでpure CなAPIで簡単に使えるように整備する。 たとえ…