nmosh

SECDV Schemeの実装 - listライブラリ

というわけで比較的退屈な標準ライブラリの実装作業....え?appendってリスト以外も返すの? https://github.com/okuoku/yuni/blob/35c8c7d814b36c11f91969b06ea595cbae5de757/lib-r7c/r7c-basic/lib/lists.sls 実装したライブラリ https://github.com/okuok…

SECDV Schemeの実装 - ランタイムライブラリの構成

ヒープはとりあえず適当にfakeして(= Scheme上のオブジェクトで同等機能を実装することにして)ランタイムライブラリの実装に進む。ヒープ実装はバグりやすいので、一旦他の部分の品質が担保できる状態になってからネットリと進めるのが良い気がしている。 ラ…

SECDV Schemeを実装する - ヒープがサポートすべき型の洗い出し

ちょっと考えたけど、vectorとpairだけ先行実装するよりも、最初から全部の型を用意してしまった方が簡単そうな気がしてきた。というわけで、型階層を設計して実装すべき型を洗い出す。 (SECDVをホストSchemeのヒープシステムで動かしたり、これから実装して…

SECDV Schemeを実装する - ホストSchemeコールバックの実装

...ちょっと休憩。というわけで、ホストSchemeのコールバックを実装し、Alexpanderも繋いだので"Schemeで実装したSECDV VMとコンパイラでyuniのコードが走る"環境は作ることができた。ついでに、S式リーダはyuniのライブラリに(yuni miniread reader)として…

SECDV Schemeを実装する - VMとcore schemeコンパイラ

というわけで今月集中して取り組んでいるSECDV Schemeの制作。前回はVM命令セットを考えた( http://d.hatena.ne.jp/mjt/20170512/p1 )。 次回予告 とりあえずVMとcore schemeコンパイラが揃ったので、次は: Alexpanderと統合してyuniのR6RS-lite形式プログラ…

MIT Schemeの多値が多値じゃない問題

SECDV VMのインタプリタできた。後で何か書く。https://github.com/okuoku/yuni/commit/42b819b3ca09f716eb2f180d54065a4291e313e3 基本的にスムースに動いて後はヒープとかコンパイラを残すのみだけど、MIT Schemeの微妙な多値の実装に半日悩んだ。 MIT Sch…

SECDV Schemeを考える - VM命令セット

前回( http://d.hatena.ne.jp/mjt/20170505/p1 )はVMで使用するレジスタと実行時の用法を考えた。今回はVMの根幹になるVM命令セットを決める。 今回のVMのコンセプトとして: ゲームのスクリプティングに使うので多少は効率的 - 少くとも元のSECDR Scheme程度…

SECDV Schemeを考える - レジスタ構成と呼び出しプロトコル

前回( http://d.hatena.ne.jp/mjt/20170501/p1 )はVMの基本的なコンセプトを考えた。今回はとにかくVMコンパイラを作る上で最初に必要になる、レジスタの構成と手続きの呼び出しプロトコルを考える。 SECDV VM のレジスタ SECDVのレジスタ構成は、SECDR Sche…

多値を扱えるシンプルなVMが欲しい会

というわけで、前回( http://d.hatena.ne.jp/mjt/20170321/p1 )見たSECDRマシンをベースに、多値を扱えるVM(SECDVマシン?)を考えていく。 多値を直接的に扱うことで、メモリ効率が改善できるのではないかと考えている。SECDRマシンでは環境(Environment)を表…

SECDRマシンのコンパイラを読む

コンパクトなVMベースのScheme処理系としてはSECDR Schemeが有る。というわけで、SECDR Schemeのコンパイラを読んでみる。 http://www.maroon.dti.ne.jp/nagar17/mulasame/ SECDR-Scheme https://gist.github.com/okuoku/3f2e469497bbf12575e8 SECDR scheme…

MIT SchemeにR7RS bytevectorが登場

yuniが急にMIT/GNU Schemeで動かなくなったので調べてみると、どうも最近のMIT Scheme(9.4になるバージョン)にはbytevector関連の手続きが一通り用意されているようだ。 https://github.com/okuoku/yuni/commit/ea9d9737ea3b4e08c7228eb0aad56a0e32963ccf yu…

インストール不要のEWDKにVisualStudio 2013のビルド環境を追加する

追記: IncludePathは別にWindowsSDK_IncludePathで良いみたいなので変更 Visual Studio 2015以降、MSは.zipを展開するだけで使えるビルド環境であるEWDK(Enterprise WDK)を提供している。 https://msdn.microsoft.com/windows/hardware/drivers/develop/inst…

いろいろ諦めてobject→integerを用意する

前回( http://d.hatena.ne.jp/mjt/20170211/p1 )書いたように、FFIのコールバックでScheme手続きを呼び出すためには、Cオブジェクト、要するにCポインタを通してScheme手続きを受け渡す必要がある。 例えばnmoshにはobject→pointerが有ったり、Chez schemeに…

各種処理系のFFIコールバック仕様を見てみる会

YuniFFIは今のところ10くらいの処理系のScheme→C呼び出しを抽象化している。しかし、コールバックを取るC APIは地味に多いため、コールバックにも真面目に対応しないといけない。。 YuniFFIではScheme→Cの呼び出しAPIをNCCCと呼んでいる特定のCプロトタイプ…

ARM版のyuniもamd64のDockerでCIする

追記: RunaboveのようなARM VPSを使えば良いじゃんというツッコミ( https://twitter.com/nalsh/status/827884020591505408 )が有った。ごもっとも。。 諸般の事情でARM版のCI環境が必要になったので、ついでにyunibaseでも同様に用意した。 http://blog.hypr…

各処理系向けのアプリケーション実行環境生成

前回: http://d.hatena.ne.jp/mjt/20160831/p1 Schemeで作ったゲームをどうやって配布するか考える 今のところyuniのアプリケーションはCMakeのスクリプトで書かれたランチャ経由で起動される。単体で動作させるためには、これをなんとかScheme側に持ってく…

R7RS smallをSDK用にサブセットする

yuniは基本的にR7RSを基盤としている。が、ゲームエンジンなりなんなりを書いていく上で互換性の維持が難しかったり、マイナーであったりする機能は削って移植性を確保したい。他のScheme共通ライブラリ、例えばslibはもっと心が広い( http://srfi.schemers.…

matchを廃止/改名したい

なんだか偶にLarcenyでコンパイルしたライブラリが動作しない現象が発生するようになった(Larcenyのバイナリを使ったテストがAppVeyorでだけ失敗する)。常に(yuni base match)ライブラリで起こるので、たぶんLarceny側のexpanderにバグが有るんじゃないかと…

不正なテクニックを駆使してdefine-valuesもR5RSサポートする

追記: SCM自体にはdynamic loadingは有るが、Win32向けのバイナリディストリビューションでは有効にされていない 前回( http://d.hatena.ne.jp/mjt/20160825/p1 )、結局R5RSでのdefine-valuesは諦めた雰囲気を出していたが、結局サポートした。...実際には偶…

メソッド呼び出しをポータブルかつ高速に書けないか問題

FFIの考察が大分進んできたので、次の課題。yuniライブラリの重要なターゲットはゲームなので、プラットフォームAPIに最適化されたコードを書けるようにしておく必要がある。このとき、Scheme側のAPIは同じだけど呼び出すDLLが違うライブラリをホットなパス…

MIT/GNU SchemeでどうやってYuniFFIをサポートするか問題

http://d.hatena.ne.jp/mjt/20160318/p1 prev: ネイティブコードインターフェースの抽象化 せっかくyuniがGambitでも動いているので、同じR5RSであるMIT-SCHEMEにも移植したいのが人情。 が、MIT/GNU Schemeは他のyuniが動作する処理系とは違って、 そもそも…

yuniの設計とCI戦略

yuniのようなマルチ処理系なライブラリは開発戦略がなかなか難しい。C言語ライブラリをVisual Studioとgccの両方に対応させるようなもので、各種Scheme処理系をどうやって並べ、どうやってCIを回すかという点に考察が必要になる。 ... 幸い、Scheme処理系は…

Schemeで作ったゲームをどうやって配布するか考える

追記: Gaucheのパス挙動部分をstrike。see comment。 かなり気の早い話しだけど、どうやってSchemeで書いたゲームを配布するかどうかを考える。実はpygameとかDXRuby、Love( https://love2d.org/ )のような既存のフレームワークでもこの部分をあまりリッチに…

BASICで実装するヒープ構造を考える

prev: http://d.hatena.ne.jp/mjt/20160329/p1 BASIC/簡易言語によるScheme実装を考える会 というわけで、プチコン3号の制約に合わせてSchemeヒープの構造を考える。実装はC→BASICと移動させていく積りで、Cでも真面目なScheme処理系として使いたい(yuniライ…

yuniをR5RSに対応させる

今までyuniはR6RS/R7RSの互換ライブラリということにしていたが、これにR5RSを加えられないか検討することにした。 本家Schemeであるところのmit-schemeがR5RS Bones(amd64のアセンブリを吐くコンパイラ https://bitbucket.org/bunny351/bones/ )とかBigloo…

yunibase構成変更 / yuniFFIでChickenとGambitとPicrinをサポート

Windows10のAnniversary Updateで超クッソ激烈に面倒な状況になってしまい本来の作業が全然進まないので、その隙にyunibaseをアップデートした。いろいろとbacklogが有ったので纏めて。 yunibaseのディレクトリ構成を変更 yunibaseはyuniをビルドするように…

rapid-schemeをGambitのR4RSに移植する

rapid-scheme(R7RSで実装されたR7RSフロントエンド)がリリースされたので、Gambitに移植してみた。 https://github.com/okuoku/rapid-gambit rapid schemeはR7RSプログラムを入力し、マクロが展開された一本のR7RSプログラムを出力する。GambitはR5RSだけど…

syntax-rulesとbindingの可視性

たしかにコレ納得が難しい気がする https://twitter.com/yhara/status/745652903256305664 そろそろsyntax-rulesでも実装するかー、と思ったのだけど、この仕様実装するの面倒すぎる…どうやったらいいんだ https://gist.github.com/yhara/427e46376e4d20dc1c…

syntax-rulesの中間表現を考え直す会

実装まで落とし込むまで行けなかったのでもうちょっと真面目に考える。 パタン / テンプレート要素表現 の改善 とりあえず、 パタン要素が空リストで終端されるケースを特別扱いする テンプレート要素は複数のellipsisを内包できるようにしてsplice要素を廃…

syntax-rulesの中間表現を考える会

これすっげぇ難しい。。 中間表現の概要と必要性 自前のSchemeフロントエンドを実装する上ではsyntax-rulesの実装はどうしても避けて通れない。syntax-rulesは一応Scheme標準(R6RSとかR7RS)的には唯一のマクロ機構なので、これが無いとマクロが書けない。 今…