nmosh

DITA-OT 2.0M4でHTML helpを作るメモ

"DITA-OT2.0.M4_client_bin.zip"をダウンロード / 展開する。full_installのようなzipも存在するが、実はclient側のZIPにしかditaコマンドが無いため、clientを利用する。これはちゃんとドキュメントにも有る( https://dita-ot.github.io/2.0/quickstartguid…

C API ブリッジのデザイン

で、作ったジェネレータ( http://d.hatena.ne.jp/mjt/20141019/p1 )を使ってnccc( http://d.hatena.ne.jp/mjt/20141001/p1 )へのブリッジソースジェネレータを作る。 yuniFFIにおけるC API呼び出しの考え方 yuniFFIでは、C API呼び出しをパケットの送受信と…

ついにbootstrap不能になる

追記: 結局workaroundした。 https://github.com/okuoku/mosh/commit/9b694f84bd9bda3891914c2fdf0ffe153d81d332 git HEADのGaucheだとbootstrap不能なようだ。いつか来るとは思っていたが。。 VMはgaucheとvanilla-moshのある種polygotになっており、vanill…

週刊nmosh - string-fill!が無い事件 / 移植計画

https://github.com/okuoku/yuni/issues/22 なんとこの期に及んでnmoshにはstring-fill!が無いことが発覚した。RacketのR6RS test suiteに何故か無いので見落していたようだ。まぁ普通mutable stringsは使わないんで。。 Solaris タイムリーにvanilla-moshに…

Solarisをサポートしよう

というわけでSolarisをサポートするために多少努力する。 将来的にはSolaris studio(NetBeansベースの公式IDE)でビルドする必要が有るが、とりあえずは公式pkgのgccで。公式pkgのgccはi386のようだ。 ターゲットの準備 Solaris studioは基本的にクロス開発を…

健全でないマクロクロージャー問題

ふだんSchemeのプログラムを書いていて、たまに使うのがマクロクロージャー(今名付けた)。このテクニックをどうやって各種Scheme処理系で実現するかというのが現在の難問。 (Syntax-caseでは問題なく実現できるが、他の不健全/健全マクロシステムではできた…

Microsoft Visual C++ Compiler for Python 2.7 で CMakeする

(注: nmoshのビルドはできない。) MSはPython2.7のモジュール(*.pyd)をビルドするためのSDKを配布している。 https://mail.python.org/pipermail/python-dev/2014-September/136499.html 告知メール http://www.microsoft.com/en-us/download/details.aspx?i…

週刊nmosh - 0.2.8進捗

いろいろと年を跨ぎそうになってきたけど。。作業量見積りのために目標設定等を具体化する作業。 リリースクライテリア 何をもってリリースとするのかは微妙なポイントだけど、以下を満たしたときにリリースにしましょうということで。ビルド関連は自動化し…

FFI関数呼び出し規約の正規化(Normalized C Calling Convention)

(同じことを何度も書いている。何度も書くとだんだんと内容が洗練されるんじゃないかということで) http://d.hatena.ne.jp/mjt/20130818/p1 http://d.hatena.ne.jp/mjt/20140720/p1 ucid時代はgcccと呼んでいたが紛らわしいのでncccに改名した 目的 yuniFFI…

週刊nmosh - issue管理行き

yuniの移植過程で出た問題をGitHubのissueに入れていくことに。 https://github.com/okuoku/yuni/issues 現時点で12件有るこの前途多難ぶり。。これからFFIを入れはじめたらどうなってしまうことか。。 例えば https://github.com/okuoku/yuni/issues/1 とか…

週刊nmosh - 対応scheme追加の会

なんだか各種Scheme処理系のコーナーケースを突く嫌なコーナーになりつつ有るような。。 とにかくyuniは移植できそうなところには全て移植していく心意気でやっていきます。 picrin https://github.com/picrin-scheme/picrin R7RS + 各種ライブラリ https://…

週刊nmosh - 低レベル構文プリミティブを考える会

nmoshのexpanderは積極的には低レベルマクロをサポートしないようにしたいので、適当なプリミティブを用意する必要がある。 低レベルマクロをサポートしないのは、1) 低レベルマクロのエラーによって生成されたdiagが通常の人間には理解しづらいため 2) synt…

たまにdefine-macroすると間違える

http://d.hatena.ne.jp/mjt/20140914/p1#c1410723011 er-macroが早ければ次もしくは次の次のバージョンに入るのでそれを待ってください。 なんと。。(そんなに直ぐ入るとは思っていなかったので) 前回( http://d.hatena.ne.jp/mjt/20140914/p1 )のdefine-inj…

たまにsyntax-rulesでも間違える

前のエントリ( http://d.hatena.ne.jp/mjt/20140914/p2 )でsyntax-rulesは得意みたいなことを書いておきながら、Gaucheはこれが違法なのに今気付いた: (import (scheme base) (scheme write)) (define-syntax defPlusOne (syntax-rules () ((_ nam) (begin (…

週刊nmosh - パーサ作り

というわけで今週はパーサ作り(とかいいつつ先週は1ミリも作業できなかったので今更)。 ステート出し パーサは基本的に有限状態機械なので、作るためには状態を定義しないといけない。状態を手でつくるのとlexとかyaccで作ったものに手を加えるのとどちらが…

週刊nmosh - 0.2.8計画

長いことやってるのかやってないのか微妙な状況でしたが、ロードマップを作った上で0.2.8は年末を目標に。基本的にteslawire(個人的に制作中のゲーム)のシナリオや他の仕事が有るのであんまし時間は掛けられないですが。。 あと今回から可能な限りちゃんと週…

R7RSライブラリの読み取りに対応

yuniFFIをGaucheやchibiに移植するにあたって、R7RS形式のライブラリがnmoshで読めないと色々と不便(普段の開発はnmoshでやってるので)。というわけで、お手軽な方法でR7RSライブラリの読み取りに対応してみた。 従来から、R6RSライブラリからR7RS small言語…

インスタンシエートできないマクロをどうすんのか問題

yuniFFIはPOSIX(より正確にはいわゆるlibc)の記述を重要な目標としている。つまり、POSIXプログラムをC言語で書く状況に近いユーザビリティをScheme上に実現することが要求される。 POSIXの中には、マクロと関数のどちらで実装しても良いシンボルがいくつか…

Gauche対応への道

yuniFFIはyuniライブラリの一部なので移植性が要求される(API記述から生成したbindingを各種scheme処理系で使い回す)。 一つのscheme処理系に移植するにあたって、トピックはいくつか有る: C bridge: DLLロード/呼び出し DLLからシンボルを解決する generic …

stubIR変換処理の作成

(諸般の事情でUCID/pFFIはyuniFFIに改名される。GenericなAPI記述はC++サポートのために再検討を入れ、yuniFFIはSchemeに一旦特化する。) stubIRはCコードに変換され、Cコンパイラで処理されて呼び出し用のstub(DLL)となる。stubはScheme処理系固有の方法で…

ucid-stubIRの設計

ucid処理系はC API記述から"ABIを抽出する"ためのCコードを出力する必要が有る。従来はUCID記述のS式から直接出力していたが、メンテナンス性がかなりダメだったのでちゃんとIR(intermediate representation)を決めてやりなおすことにした。 ucid処理系がCコ…

Windows上でスレッドトレースする

(おおきいの - http://storage.osdev.info/pub/idmjt/diaryimage/1405/neta140509l1.png ) ETW(Event Tracing for Windows)を使用するとDTraceやftraceのようなスケジューリングトレースを(比較的低いオーバヘッドで)取得することができる。ETWのログビュー…

週刊nmosh - Cygwin64対応 / mini-gmpバックエンド / 多倍長ビット演算の難しさ

諸般の事情で環境を移行しているので細かい修正が続く。。冷静に考えると、pffiへの移行によりnmosh pluginは一度もリリースされないまま消えるのか。。まぁ開発期間が長いとそういう事も有るよね。(ちなみにGStreamer SDK対応もリリースされずに消える見込)…

週刊nmosh - システムのBoehmGC利用 / Win8+Cygwinで動かない問題 / スリム化

世間的な要求のために、システムにインストールされた(大抵Shared libraryの)BoehmGCを使用するconfigureオプション --with-system-bdwgc を追加した。特にFedoraのようなRPM系ディストリビューションへの収録のためには事実上必須なので。。 これに伴い、ク…

ライブラリ互換レイヤの制作 - pFFI overview

prev: http://d.hatena.ne.jp/mjt/20130818/p1 callstubによる呼び出し規約の吸収 とりあえず、Racket、Gauche、chibi-schemeとnmoshでR6RS(-light)ライブラリを共有する環境は整ったので、pFFIのランタイムを個々の処理系について実装していくことにする。 …

ライブラリ互換レイヤの制作 - Gauche/R7RS stub library

Gaucheとchibi-schemeではR7RS形式のライブラリを使用する。もともとR7RS対応を念頭にデザインしているシステムなので、大きな問題は無く対応できる。 生成されるstub libraryは: (define-library (yuni base shorten) (export ^) (import (scheme base) (yu…

Schemeライブラリ互換レイヤの制作 - Racket stub library編

prev: http://d.hatena.ne.jp/mjt/20131231/p1 nmoshの今年と来年 → yuni: 基盤ライブラリのポータビリティ Teslawire用の組み込みインタプリタを作るにあたって、pFFIとその他の細かいユーティリティに移植性を持たせて色々なR6RS/R7RS実装で使いまわそうと…

ビルドシステム、CIとCMSの統合

ゲームを作る上でCIシステムとCMSは不可欠になっている。teslawireは使用するコンパイル環境だけでも3種(Win32/Mac+iOS/Android)あり、GPU毎に数えると2桁になる。今回はシナリオ等アセットの制作を一切アウトソースしないので、他人の作業がビルドを壊すこ…

APIトレーシングへの応用

API記述の重要なユースケースはAPIトレーサの生成と言える。API記述というと、BridgesupportやIDLのように言語ブリッジとしての役割が主に注目されるが(ucidも本来はそちらが基本的なユースケースだが)、C/C++しか使用しないようなpure native環境でも価値が…

alexpanderを読む

expanderのインターフェースを検討するために、既存のexpanderを改造してライブラリ対応にしてみることにした。 nmoshのbootstrapにはR5RSが必要なので、alexpanderを使用している。 https://github.com/okuoku/mosh/blob/master/boot/runtimes/srfi-mosh/bo…