今月の"今なにやってんの"

どういう形式でアップデートを挙げていくのが良いのかはまだまだ模索中。nmosh Retrocomputing editionはしばらく報告なし。

nmosh / yuni

nmoshはR6RS/R7RS Schemeインタプリタ。常識的な速度で動作するのと、それなりに使いやすいフロントエンド(マクロの展開トレース等が出る)やアプリケーション組込みサポート(Win32上のnmoshのみ)がウリ。yuniはR6RS/R7RS Scheme用の移植性ライブラリ。Racket / Gauche / Chibi-Scheme / nmoshで同じアプリケーションを実行できるように共通のライブラリ基盤を実装しようというもの。
当面の目標は0.2.8のリリース。moshとしてリリースすべきかnmoshとしてforkすべきかは悩みどころ。0.2.8の目標は 1) OS依存部のscheme化とそれに伴なう現行nmosh/yuniライブラリの廃止 2) 日本語マニュアル(CHM) の2つ。残りは0.2.9に持ち越し。例えば完全なR7RSサポート等は0.2.8ターゲットにしてもメリットが薄そうなので。。
先月は、nmosh / Gauche / Racket用のFFIブリッジを作成した( http://d.hatena.ne.jp/mjt/20150213/p1 )。
今月は... "OS依存部のyuni化"に必要な作業を全部挙げて順番にやっていく:

  1. yuni FFIランタイムを制作する
    1. FFIランタイムライブラリに必要なものを列挙する
    2. 手書きで作成した疑似stub IR出力のテストを通す程度にランタイムライブラリを実装する
      1. nmosh
      2. Gauche
      3. Racket
      4. chibi-scheme
    3. stub IR処理系を制作して各言語のソースコードを生成する
      1. C
      2. Scheme
    4. OSディスパッチ構文を実装し、Windows版ライブラリとPOSIX版ライブラリを自動的に切り替えられるようにする
      1. ディスパッチ用の中継ライブラリを自動生成する
      2. ディスパッチ用の低レベル構文プリミティブを設計する
  2. yuni OS抽象化レイヤを実装する
    1. Windows APIのstub IRを手書きして、現状のnmoshと同程度のstubライブラリを生成する
      1. そもそも現状のnmoshがどの程度のWindows APIを使用しているのかを調査する
      2. GetLastError() shimを実装する
    2. POSIX API / Linux API / FreeBSD APIのstub IRを手書きして、現状のnmoshと同程度のstubライブラリを生成する
      1. そもそも現状のnmoshがどの程度のPOSIX APIを使用しているのかを調査する
      2. errno shimを実装する
  3. 現行のnmoshライブラリを削除する
    1. 移行対象でないライブラリをnmosh-legacyに一旦移動する
    2. 非同期I/O APIをyuniで実装する
      1. Windows
      2. Linux
      3. FreeBSD / MacOS X
    3. pffi(旧nmoshプラグインシステム)を削除する
    4. 既存のnmoshバインディング(curseswxWidgetsなど)を独立したプロジェクトとしてspinoutする
    5. yuniをnmoshのビルドに統合する

こうして並べてみるとかなり果てしない。。3項目を3ヶ月かけてやってようやくQ2でのリリースを達成できる。。とにかく、これから暫くは上記のToDoを消化していく。

teslawire

  • (まだwebサイトは無い)

teslawireは、アクションRPG。男の子と女の子が宝捜しをするオーソドックスなシナリオとロックオンシューティングの融合。現在企画段階の調査中。
簡単なベンチマークをあるプラットフォーム上で動かしてみると想定外にパフォーマンスが出なかったので、技術検証を先にやらないと不味い(企画想定を実現するにはハードウェアスペックが相当足りない)という結論に。イベントシーンは最悪紙芝居で良いので、キャラクタの描画とアクションシーン3種を先に適当なアセットで制作する。というわけでnmoshの用意ができるまで一時停止。
次の作業は、スプライト版とポリゴン版をどうやって同時に制作するかを考察すること。それに耐えるオーサリングツールを制作しないといけない。