nmosh
yuniのレガシーなビルドシステムと決別する最後の壁になっていたMIT Schemeも、define-macro を手作りすることでサポートできた。というわけで、これで従来のビルドシステムから新しいビルドシステムに置き換えられる。。 新しいビルドシステムではLarceny、…
小ネタ。処理系毎にevalやそれに与えられる環境の機能性が微妙に違うので共通APIを考える会。 eval APIの移植性 Lisp、Schemeと言えばeval。JavaScriptや他の言語でもAPIとして存在するが、Lispではその場でS式を組み立てて使えるのでそれなりに利便性が高い…
もう当分Racket触りたくねェ... (後述) nmoshの互換ライブラリ層を分離した yuni は、どんなScheme実装でもR6RS風のライブラリシステムとR7RS-smallのサブセットを提供することを目的としている。で、従来はCMakeを使ったビルドシステムで一旦ビルドしないと…
追記: これsyntax-rulesに展開されるsyntax-rulesがダメなんじゃないかという気がする。もっとも、何度リネームしても実害は無い気がするけど。。 前回( http://d.hatena.ne.jp/mjt/20181209/p1 )、define-macro処理系上のsyntax-rulesでシンボルのリネーム…
yuniのBiwaScheme対応を進める上で用意した"Generic Scheme"仕様が意外と便利な気がしてきたので一般化してSRFI-96( https://srfi.schemers.org/srfi-96/srfi-96.html )のようなrequirement仕様にできないか考えてみる。 "Generic Scheme"はexpanderが簡略化…
というわけで、BiwaSchemeでReactNativeできるようになった。 左はMS Edgeで動作するreact-native-domで、右はWindows版のReactNative( https://github.com/Microsoft/react-native-windows )となっている。(React Nativeの方に出ている"000 000"はFPSカウン…
諸般の事情でMithrilではなくReactに乗り換えた。 ...単にMaterial-UI( https://material-ui.com/ )が使いたかっただけだけど、最近のReactNativeにはreact-native-domというかなりアツいプロジェクトが有り( https://github.com/vincentriemer/react-native…
とりあえずMithrilでイベントをScheme側に渡し、値を更新してビューをアップデートするところまで実装できた。 https://github.com/okuoku/biwasyuni-editortest/tree/175a298e14ee2e530cbb3ff197573ba8f4c92f23 リポジトリにはyuniとbiwasyuniをsubmoduleと…
追記: Racket 7は--embed-dllsで完全にstandaloneな.exeを生成できるようになった https://blog.racket-lang.org/2018/07/racket-v7-0.html 実は意外に多くのScheme処理系が単体アプリケーションのビルドを機能としてサポートしている。 Gaucheは最新リリー…
久々にyuniに新しいライブラリを足すことにした。どちらも他所でライブラリにしていたけどyuni本体に有った方が何かと便利なんじゃないかということで移動。 hashtables https://github.com/okuoku/yuni/commit/8ff3723af6f744e3a63d057e98fc30fe7c811ffc#di…
ゲームの細かいデータハンドリングはSchemeで書いているので、Webアプリ側でも同じロジックを使いたい。というわけでBiwaSchemeにyuniを適当に移植した。で、適当に移植してみると、やっぱり普通のScheme処理系としても使えた方が便利...というわけでbytevec…
https://github.com/okuoku/biwaapp-test/tree/ac3c4e9503493f5a72b4b0f1af597a8e2d4ca0a9 今回のコード BiwaSchemeでyuniのライブラリシステムを導入する目処が立ったので、BiwaSchemeを使ってWebアプリのロジック部分を書けないか検討することにした。 Biw…
なんか今週schemeトピック多くない? 今週のyuni/yunibase 処理系ブリッジフレームワークであるところのyuniではs7( https://ccrma.stanford.edu/software/snd/snd/s7.html )をサポートしてみた。yuniffi等もそのうち入れる予定。 yuniでサポートしている処…
意外な伏兵。。 CMakeはそれなりに高速なスクリプティング機能が有るため、やる気になればそれなりに実用的なScheme処理系にできるんじゃないかという気がしている。が、適当にやったらやっぱり遅かったのである程度は真面目にやる必要がありそうだ。 適当な…
追記: Redditの投稿 https://www.reddit.com/r/lisp_ja/comments/8kttfy で、Common Lispでの実装 http://www.ccs.neu.edu/home/dorai/mbe/mbe-lsp.html に言及がある。 追記: (最後の段はあんまり正しくない。 __ でgensymする場合、単一のsyntax-rulesテン…
yuniではfull-continuationの提供を止めることにした。単純な理由はKawaがこれを提供していないことだが、じゃあこれに代えるプリミティブを何にするのかという点がちょっと悩ましい。 call/ccに対する批判はOlegのページが詳しい( http://okmij.org/ftp/con…
comp.lang.schemeにも書いた https://groups.google.com/d/msg/comp.lang.scheme/GuHmoUNBplA/dykAeuE3CQAJ けど、処理系間でライブラリを共用するのはそれなりに難しい。 nmoshの次代ライブラリフレームワークであるyuniはこの問題に正面から取り組んでいる…
追記: mruby/c 1.1にはGCが有るらしい http://www.s-itoc.jp/news/notice/726 C向けにヒープ実装を用意するにあたって、まぁ富豪的にガツンとやってしまえば良いんじゃないかと適当に考えていたけど、営業上どうしても32KiBヒープで動くアプリを用意する必要…
小ネタ3つ。 chibi-scheme 0.8.0 https://groups.google.com/forum/#!topic/comp.lang.scheme/ibidwHuuwxA いくつかWin32対応を入れたchibi-scheme 0.8.0がリリースされた。 組込み言語として現状欠けているのはWin64サポートなのでどうしたもんか考え中。bi…
S式をベースにした言語はそれこそLisp/Schemeのような高級言語からWeb Assemblyのテキスト表現( https://webassembly.github.io/spec/core/text/index.html )のようなある種の中間表現まで巾が有るが、一番ギリギリのラインは、COMFY-65やSassyのようなS式ア…
yuniで実用的なプログラムを書くためには、どうしても非同期I/Oライブラリが必要になる。というわけで黙々と設計しているけれど、これがなかなか難しい。 非同期I/Oライブラリの難しさ そもそもOS/処理系毎に別物が必要 "非同期I/Oライブラリなんてlibuv一択…
今作っているゲームは基本的にWin32で制作していて、それを各プラットフォームに持っていくという方式にしている。なので基本的に処理系はWin32で動いて欲しい → とりあえずWin32で困らない程度にPRしてパッチした: https://github.com/ashinn/chibi-scheme/…
http://d.hatena.ne.jp/mjt/20170211/p1 prev: 各種処理系のFFIコールバック仕様を見てみる会 yuniではコールバックのシグネチャも一種類に絞ることにしている。yuniのFFI互換層はNCCCなC関数しか呼び出せないが、コールバックとして書けるのもNCCCに絞るこ…
追記: Racketはracoでライブラリのコンパイルが可能 https://docs.racket-lang.org/inside/embedding.html 色々と試してみたところゲームのメインスレッドとしてSchemeインタプリタを使うのはちょっと厳しそうなのでインタプリタをサブスレッドに置けるよう…
prev: http://d.hatena.ne.jp/mjt/20150823/p2 Solaris、最新ベータでついにスレッドに名前が付けられるようになる Windows 10 Creators Updateの目玉機能として、SetThreadDescription()が搭載されている。 https://msdn.microsoft.com/library/windows/des…
というわけでGCヒープも一通り実装が完了し、そろそろ他の言語への移植を考えるフェーズに移ってきた。大体ネイティブ実行、つまり普通のSchemeインタプリタで実行した速度の100倍程度の遅さ(= インタプリタの実行速度ギャップ20倍 x PCと実機のIPC比5倍)な…
多分Scheme処理系を作る上で面白いパートの上位3位くらいには入るであろうヒープの設計に入る。 今回もとりあえず動くものを作ることに集中するため、パフォーマンスに関する考察は基本的に後回しにする。 制約と割り切り 今回の企画では最終的に"高級言語上…
...readは無いゾ readに関してはまぁ後回しでも良いんじゃないかということで。。readは特に浮動小数点のreadどうすんのか問題が有り、http://www.ryanjuckett.com/programming/printing-floating-point-numbers/ のような記事に引いてある論文の著者を見て…
撃墜率高すぎ。。https://github.com/okuoku/yuni/issues SECDVでR7RSライブラリを実装するついでに同じテストをR6RS/R7RS処理系でも走らせているけど、意外と問題が出る。yuniにはR6RSで使うためのR7RS語彙がいくつか実装されていて、そのライブラリの不具…
というわけでSchemeの基本要素だけで実装できるものは一通り実装を終えてテストも書いた。 ... 本当に書くことが無いな。。ライブラリを他所からパチって来ずに自前で実装しているのは、ゲームに組込むのにパブリックドメインなランタイムが欲しいため。expa…