nmosh

MIT Schemeでdefine-macroする

yuniのレガシーなビルドシステムと決別する最後の壁になっていたMIT Schemeも、define-macro を手作りすることでサポートできた。というわけで、これで従来のビルドシステムから新しいビルドシステムに置き換えられる。。 新しいビルドシステムではLarceny、…

処理系間で共通にできるeval APIのサブセット

小ネタ。処理系毎にevalやそれに与えられる環境の機能性が微妙に違うので共通APIを考える会。 eval APIの移植性 Lisp、Schemeと言えばeval。JavaScriptや他の言語でもAPIとして存在するが、Lispではその場でS式を組み立てて使えるのでそれなりに利便性が高い…

yuniのselfboot

もう当分Racket触りたくねェ... (後述) nmoshの互換ライブラリ層を分離した yuni は、どんなScheme実装でもR6RS風のライブラリシステムとR7RS-smallのサブセットを提供することを目的としている。で、従来はCMakeを使ったビルドシステムで一旦ビルドしないと…

define-macro処理系をできるだけHygieneにする

追記: これsyntax-rulesに展開されるsyntax-rulesがダメなんじゃないかという気がする。もっとも、何度リネームしても実害は無い気がするけど。。 前回( http://d.hatena.ne.jp/mjt/20181209/p1 )、define-macro処理系上のsyntax-rulesでシンボルのリネーム…

"Generic Scheme"仕様を考える

yuniのBiwaScheme対応を進める上で用意した"Generic Scheme"仕様が意外と便利な気がしてきたので一般化してSRFI-96( https://srfi.schemers.org/srfi-96/srfi-96.html )のようなrequirement仕様にできないか考えてみる。 "Generic Scheme"はexpanderが簡略化…

BiwaSchemeでReactNativeする

というわけで、BiwaSchemeでReactNativeできるようになった。 左はMS Edgeで動作するreact-native-domで、右はWindows版のReactNative( https://github.com/Microsoft/react-native-windows )となっている。(React Nativeの方に出ている"000 000"はFPSカウン…

BiwaSchemeでReactする

諸般の事情でMithrilではなくReactに乗り換えた。 ...単にMaterial-UI( https://material-ui.com/ )が使いたかっただけだけど、最近のReactNativeにはreact-native-domというかなりアツいプロジェクトが有り( https://github.com/vincentriemer/react-native…

BiwaSchemeでWebアプリを作る の2

とりあえずMithrilでイベントをScheme側に渡し、値を更新してビューをアップデートするところまで実装できた。 https://github.com/okuoku/biwasyuni-editortest/tree/175a298e14ee2e530cbb3ff197573ba8f4c92f23 リポジトリにはyuniとbiwasyuniをsubmoduleと…

"アプリケーションのビルド"をSDKとして抽象化できるのか問題

追記: Racket 7は--embed-dllsで完全にstandaloneな.exeを生成できるようになった https://blog.racket-lang.org/2018/07/racket-v7-0.html 実は意外に多くのScheme処理系が単体アプリケーションのビルドを機能としてサポートしている。 Gaucheは最新リリー…

hashtablesとserializeライブラリ

久々にyuniに新しいライブラリを足すことにした。どちらも他所でライブラリにしていたけどyuni本体に有った方が何かと便利なんじゃないかということで移動。 hashtables https://github.com/okuoku/yuni/commit/8ff3723af6f744e3a63d057e98fc30fe7c811ffc#di…

BiwaSchemeで同期I/Oもしたい

ゲームの細かいデータハンドリングはSchemeで書いているので、Webアプリ側でも同じロジックを使いたい。というわけでBiwaSchemeにyuniを適当に移植した。で、適当に移植してみると、やっぱり普通のScheme処理系としても使えた方が便利...というわけでbytevec…

BiwaSchemeでWebアプリを書きたい

https://github.com/okuoku/biwaapp-test/tree/ac3c4e9503493f5a72b4b0f1af597a8e2d4ca0a9 今回のコード BiwaSchemeでyuniのライブラリシステムを導入する目処が立ったので、BiwaSchemeを使ってWebアプリのロジック部分を書けないか検討することにした。 Biw…

Scheme雑記

なんか今週schemeトピック多くない? 今週のyuni/yunibase 処理系ブリッジフレームワークであるところのyuniではs7( https://ccrma.stanford.edu/software/snd/snd/s7.html )をサポートしてみた。yuniffi等もそのうち入れる予定。 yuniでサポートしている処…

CMakeをSchemeにする -- S式のtokenize

意外な伏兵。。 CMakeはそれなりに高速なスクリプティング機能が有るため、やる気になればそれなりに実用的なScheme処理系にできるんじゃないかという気がしている。が、適当にやったらやっぱり遅かったのである程度は真面目にやる必要がありそうだ。 適当な…

define-macroのみ備える処理系のsyntax-rulesサポートは可能か?

追記: 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テン…

さよならcall/ccとwith-exception-handlerやguardへの置き換えの検討

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ヒープで動くアプリを用意する必要…

chibi-scheme 0.8 / Sagittarius + MinGW / Racketは7でChezに移行する?

小ネタ3つ。 chibi-scheme 0.8.0 https://groups.google.com/forum/#!topic/comp.lang.scheme/ibidwHuuwxA いくつかWin32対応を入れたchibi-scheme 0.8.0がリリースされた。 組込み言語として現状欠けているのはWin64サポートなのでどうしたもんか考え中。bi…

1パスS式アセンブラCOMFY-65を読む

S式をベースにした言語はそれこそLisp/Schemeのような高級言語からWeb Assemblyのテキスト表現( https://webassembly.github.io/spec/core/text/index.html )のようなある種の中間表現まで巾が有るが、一番ギリギリのラインは、COMFY-65やSassyのようなS式ア…

非同期I/O APIの設計がなかなか難しい

yuniで実用的なプログラムを書くためには、どうしても非同期I/Oライブラリが必要になる。というわけで黙々と設計しているけれど、これがなかなか難しい。 非同期I/Oライブラリの難しさ そもそもOS/処理系毎に別物が必要 "非同期I/Oライブラリなんてlibuv一択…

chibi-schemeのWin32サポート

今作っているゲームは基本的にWin32で制作していて、それを各プラットフォームに持っていくという方式にしている。なので基本的に処理系はWin32で動いて欲しい → とりあえずWin32で困らない程度にPRしてパッチした: https://github.com/ashinn/chibi-scheme/…

各種Scheme処理系でFFIコールバックを実装する

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インタプリタを使うのはちょっと厳しそうなのでインタプリタをサブスレッドに置けるよう…

Windows、ついにスレッドに名前が(安全に)付けられるようになる

prev: http://d.hatena.ne.jp/mjt/20150823/p2 Solaris、最新ベータでついにスレッドに名前が付けられるようになる Windows 10 Creators Updateの目玉機能として、SetThreadDescription()が搭載されている。 https://msdn.microsoft.com/library/windows/des…

SECDV Schemeの実装 - 意外に遅い問題と小手先の最適化

というわけでGCヒープも一通り実装が完了し、そろそろ他の言語への移植を考えるフェーズに移ってきた。大体ネイティブ実行、つまり普通のSchemeインタプリタで実行した速度の100倍程度の遅さ(= インタプリタの実行速度ギャップ20倍 x PCと実機のIPC比5倍)な…

SECDV Schemeの実装 - メモリ管理の基本設計

多分Scheme処理系を作る上で面白いパートの上位3位くらいには入るであろうヒープの設計に入る。 今回もとりあえず動くものを作ることに集中するため、パフォーマンスに関する考察は基本的に後回しにする。 制約と割り切り 今回の企画では最終的に"高級言語上…

SECDV Schemeの実装 - writeとapplyとcall-with-values

...readは無いゾ readに関してはまぁ後回しでも良いんじゃないかということで。。readは特に浮動小数点のreadどうすんのか問題が有り、http://www.ryanjuckett.com/programming/printing-floating-point-numbers/ のような記事に引いてある論文の著者を見て…

SECDV Schemeの実装 - port入出力

撃墜率高すぎ。。https://github.com/okuoku/yuni/issues SECDVでR7RSライブラリを実装するついでに同じテストをR6RS/R7RS処理系でも走らせているけど、意外と問題が出る。yuniにはR6RSで使うためのR7RS語彙がいくつか実装されていて、そのライブラリの不具…

SECDV Schemeの実装 - その他基本ライブラリ

というわけでSchemeの基本要素だけで実装できるものは一通り実装を終えてテストも書いた。 ... 本当に書くことが無いな。。ライブラリを他所からパチって来ずに自前で実装しているのは、ゲームに組込むのにパブリックドメインなランタイムが欲しいため。expa…