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

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…

Amazon Fireタブレット(2015) でMali Graphics Debuggerする

Maliなデバイスを入れ替。普通にAmazonで購入。標準のカバーは何故かかなり高価だが、横と縦の両方で立てることができる。ただしフタを閉じても自動でスリープにならない。 UIはAndroid標準のものにかなり近付いた。個人的には旧Kindle Fire時代のスライダー…

CMakeでAndroidアプリを作る

https://github.com/okuoku/grpcore0 リポジトリ http://d.hatena.ne.jp/mjt/20160421/p1 前々回(XboxOne) http://d.hatena.ne.jp/mjt/20160511/p1 前回(EmscriptenによるJavaScript) Androidは基本的に全てのアプリは何らかのJavaクラスでなければならない…

CMakeでemscriptenアプリを作る

http://d.hatena.ne.jp/mjt/20160421/p1 前回(XboxOne) https://github.com/okuoku/grpcore0 リポジトリ 前回のXboxOneに引き続き、今度は同じコードをEmscriptenでビルドしてみた。EmscriptenはC/C++コードをJavaScriptやasm.jsにコンパイルするコンパイラ…

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

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

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

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

CMakeでXboxOneのUWPアプリを作る

https://msdn.microsoft.com/en-us/windows/uwp/xbox-apps/index 公式 https://github.com/okuoku/grpcore0/tree/383e2bfcb5461b247ed272c74c5742ef3c62a81f 今回用意したサンプル: 1000個の矩形をSDL2のRenderを使ってランダムに書くだけ - GPUデバッガを使…

BASIC/簡易言語によるScheme実装を考える会

追記: 図のコメントが間違ってたので修正 teslawireではゲームロジックの記述は基本的にSchemeで行おうと思っている。というのは、ネイティブコードを受け付けない2Dゲームエンジン、要するに HSP3 (の、HSP3Dish) プチコン3号 GameMaker (の、HTML5/JavaScr…

CygwinのnanosleepはECHILDを返すことがある"疑惑"

yuniのフロントエンド実装を進めるにあたって、core Scheme処理系としてはGambitを選ぶことにした。別にR5RSかつ非R6RS/R7RSであればMIT-SchemeなりSCMなりなんでも良いが、GitHubにリポジトリが有り、かつ、他と違ってコンパイラなので。 で、Gambitはその…

ネイティブコードインターフェースの抽象化

初めて?yunibaseがビルドの失敗を検出した。というわけで報告して直した: Larceny: https://github.com/larcenists/larceny/commit/725603ec8cef011dec656c9577a35dab5bc058b7 Kawa: https://sourceware.org/viewvc/kawa?limit_changes=0&view=revision&rev…

yuniの目標設定をする会

yuniはかなり複雑なプロジェクトなので、ちょっと目標をブレークダウンして他の処理系に影響しそうな項目を先に済ませることにした。 ここに入れていない重要な問題はドキュメンテーションのインフラで、良いエディタが見当たらないまま今に至る。もうSeamon…

ギリギリまでsyntax-rulesを使ってexpanderを書けないか問題

追記: $quoteの定義を修正。($quote syms ...) => (syms ...)だとシンボル単体のquoteができない。なので($quote (syms ...)) => (syms ...)。 prev: http://d.hatena.ne.jp/mjt/20160223/p1 yuniフロントエンドの設計 目的 目下、R6RS/R7RSライブラリである…

yuniフロントエンドの設計 - expander設計方針

フロントエンドというかexpanderもyuniの枠でポータブルに書くことにした。というのも、これをやるとGambit、MIT/GNU SchemeやSCMのようなモジュールシステムの無いScheme処理系も同時にサポートできるため。 yuniフロントエンドは、ライブラリとアプリケー…

yunibase計画

なんかDockerのバージョンを変えたらログインできないなと思っていたら"docker login"コマンドで生成される認証トークンが間違っているからだった。 https://github.com/docker/distribution/issues/985#issuecomment-165392245 手で"docker.io"を"https://i…

Vagrantでのテスト環境に対応 / docker build諦め / Kawa対応

DockerだとAMD64なLinuxばっかりになってしまうので、Vagrantを使って仮想マシンを使用したyuniのビルドとテストに対応してみた。 CygwinからWindowsネイティブというか何というかのVagrantを使うのもかなり微妙だが。。基本的にup / halt / ssh-configにだ…

DockerのAlpine化に向けて / Guile対応と実装WARの管理

Cygwin64ビルドのためのパッチをBoehmGCに投げました( https://github.com/ivmai/bdwgc/commit/4e24d219d29abb2b111bb9a9ccb13c3f149a855a )。Gauche由来のパッチが溜っていくね。。(e.g. https://github.com/ivmai/bdwgc/pull/91 ) 基本的にアンダースコア…

GaucheでNCCC API呼び出しに対応 / Guileで補助キーワードの扱いが変わった?

ちょっとこっぴどい風邪をひいてしまっていて、ここ数日は家で明治の文豪みたいになりながらコードを書いたりしていた。クッソ寝不足なことを除けば大分快復したので明日からは平常営業の予定。。 GaucheでNCCC呼び出しに対応 今まで実装したものと思い込ん…

Dockerでも再現できない環境 / gauche-packageに対応 / Windows対応

というわけでDockerベースのテスト環境をTravisCIで始めた。基本的にはライブラリのbootstrapやFFIライブラリのビルドも含んだ完全なビルド過程の再現を含んでいる。もっとも、まだFFIテストは統合していない(まだ事故ったときにコアダンプとか回収できない…

Cygwinのfork()はプロセスにロードされているDLLを消すと失敗する

コネタ。 https://github.com/ashinn/chibi-scheme/issues/302 make test-all` will fail at `tests/ffi/ffi-tests.scm` on Cygwin yunibaseをCygwinに移植していてchibi-schemeのtest-allがCygwinで通らないのを見つけた。これは端的に言えばCygwinあるある…

各種Scheme処理系をまとめてDocker上にビルドする

yuniはR6RS/R7RSで移植性を担保するためのライブラリなので、そのテストも当然各種のScheme処理系でやらないと意味がない。 ... というわけで各種Scheme処理系をトラックするためのリポジトリとビルドスクリプトを用意しました。 https://github.com/okuoku/…

yuniのChicken-schemeサポート / AppVeyorでCI

- よく有るやつ OSS側を触るのはなんか普通に半年ぶりになってしまった。。 今年はちょっと計画立てられるような状況でもないので、まぁノンビリと。。 Chicken-scheme上のsyntax-rulesの制限 諸般の事情でyuniから(yuni shorten)ライブラリを外すことにした…

Amazon FireTV stick

というわけで事実上キャリアバインドの無い端末を全部揃えてしまった(WiiU以外)。。 http://d.hatena.ne.jp/mjt/20150923/p1 Nexus Player http://d.hatena.ne.jp/mjt/20151103/p1 AppleTV gen4 http://d.hatena.ne.jp/mjt/20151210/p1 FireTV gen2(箱型) Fi…