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

yuniではfull-continuationの提供を止めることにした。単純な理由はKawaがこれを提供していないことだが、じゃあこれに代えるプリミティブを何にするのかという点がちょっと悩ましい。 call/ccに対する批判はOlegのページが詳しい( http://okmij.org/ftp/con…

キラッとプリ☆チャン はどうなるのか

http://d.hatena.ne.jp/mjt/20180324/p1 prev: プリパラ オールアイドルパーフェクトステージ (NS, 1.0.0) Switch版のプリパラを速攻で買ったのは、1.0.0がヤバいというだけでなく、これが初のキラッとプリ☆チャンコンテンツであるという理由もある。 来週か…

SDL用の1ソース完結OpenAL実装 MojoAL

久々に新しいOpenAL実装が現われた気がする。 https://hg.icculus.org/icculus/mojoAL リポジトリ http://openal.org/pipermail/openal/2018-March/000675.html アナウンス投稿 MojoALはSDL作者のRyan C. GordonによるステレオOpenAL実装で、1ソースでOpenAL…

プリパラ オールアイドルパーフェクトステージ (NS, 1.0.0)

http://pripara.jp/switch_allidol/index.html 公式サイト http://pripara.jp/news/detail?seq=1374 公式サイトのアップデート告知 普段ゲームはDL版を買っているけど、これの1.0.0がなかなかなキているということでパッケージ版を入手してみた。 強調してお…

言語処理系間でライブラリを共用する難しさ

comp.lang.schemeにも書いた https://groups.google.com/d/msg/comp.lang.scheme/GuHmoUNBplA/dykAeuE3CQAJ けど、処理系間でライブラリを共用するのはそれなりに難しい。 nmoshの次代ライブラリフレームワークであるyuniはこの問題に正面から取り組んでいる…

シェルスクリプトでゲーム制作は可能か? - タイマ編

現状の結論: Bashじゃないと無理 シェルスクリプトでゲームを作る試みはいくつか有る。例えば、ChessbashはBashで書かれたチェスプログラムで、Unicodeを使って視認性の高い盤面を出力し、ある程度の"実用性"も確保している https://github.com/thelazt/ches…

マイコン向け処理系の実装戦略を調べる会

追記: mruby/c 1.1にはGCが有るらしい http://www.s-itoc.jp/news/notice/726 C向けにヒープ実装を用意するにあたって、まぁ富豪的にガツンとやってしまえば良いんじゃないかと適当に考えていたけど、営業上どうしても32KiBヒープで動くアプリを用意する必要…

KeycloakとGitBucketとRocketChatをリバースプロクシ以下に置いて認証させる

ちょっと諸般の事情で製作中のゲーム(teslawire)で使うゲームサーバのコンポーネントを可能な限り既製品で構成することになった。 元々はゲームAPIサーバと自前のOpenID Connect認証ブローカーで済ませるつもりだったのが、既存の企画を生かしたまま既製品を…

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一択…

ビルドトレースツールの制作 の1 - 準備

諸般の事情でnmosh製のビルドトレースツールをネイティブコードで書き直すことにした。週に10万回と起動されるツールなので、オーバーヘッドと安定性がそろそろ気になってきた。 ビルドトレースとは何か? ビルドトレースとは、要するに"プロダクトのビルド…

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

Cygwin/Xがキーボード配列を英語(ENG)に設定する現象

Cygwin/Xを使うとキーボード配列をENG - いわゆる英語配列と呼ばれるUSキーボードのロケールに設定してしまう現象が起こることが有る。手元だと Xwin -multiwindowのようにMultiwindow WMを使うと何故か発生しない。 ...個人的には-rootlessを使いたいのでち…

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

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

ANGLEによるOpenGL ESを静的リンクしてXboxOneで使う

- WinRT上でGLES版のSDL renderを使っているところ 従来のANGLE(GoogleによるOpenGL ES2/3実装)は基本的にDLLでないと使用できず、MSによる配布でもDLLを使っていた。が、実は今年に入ってからANGLE側に変更が入り、静的リンクできるようになっている。 http…

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…

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程度…