nmosh

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)ライブラリを外すことにした…

S式サブセットとそのリーダを考える会

ここ3ヶ月くらい殆どnmosh関連の開発ができていないが、そろそろゲーム(teslawire)作りの方がコーディングに戻ってくるので。。 teslawireでは、細かいコンフィグやシナリオ上のスクリプトデータをS式で表現する - メモリの都合でリリース時には専用のバイナ…

ucontext.hはなぜPOSIXから廃止されたか

基本的に大抵のLinuxやBSD、CygwinはPOSIXに概ね準拠しているということになっている。今のところ最新のPOSIXはIssue 7(2008年 - 2013年が最新のedit)で、これはIssue 6からいくつかAPIを削減している(STREAMSのようにせっかく標準になったのに速攻でOBSOLET…

Solaris、最新ベータでついにスレッドに名前が付けられるようになる

http://docs.oracle.com/cd/E53394_01/html/E54847/gpqnh.html#scrolltoc Named Threads In Oracle Solaris 11.3, you can now label an application's threads to simplify debugging the application. Observability tools like ps, prstat, and, DTrace c…

syntax-rules実装への道

そろそろ自前のsyntax-rules実装を持った方が良いんじゃないかということで検討をしている。というのは、Google codeのSVNホスティングがそのうち終わってしまう都合でpsyntaxのbootstrapを自前で行う必要があるため。 方針 大きな方針としては: yuni上に実…

EIODのquasiquoteの謎

追記: dをdepthのdとしてコメントを追加。RnRS用法( http://practical-scheme.net/wiliki/wiliki.cgi?R6RS%3A%E7%BF%BB%E8%A8%B3%3AR6RS%3A11.17%20Quasiquotation )。see comment. EIOD( https://github.com/okuoku/eiod-r6rs/blob/master/eiod.scm )のquas…

定数テーブルの取得 - nmosh / larceny / guile / sagittarius / racket / chibi-scheme

chibi-schemeとnmoshで同じライブラリ(yuniffi yunistub graphics SDL2-constants)を読み込み、SDL2の定数SDL_TRUEとSDL_FALSEをクエリしたところ。 というわけで、nmosh / larceny / guile / sagittarius / racket / chibi-schemeの各種R6RS/R7RSでFFIする…

ライブラリサーチパスの取得 - nmosh / Racket / Gauche / chibi-scheme / Sagittarius

DLLのソースコード生成は完成してGitHubにpushしたが特に書くことが無かった。。 というわけで淡々と続きを作っていく。今回はライブラリサーチパスの取得。 どこにDLLを配置するか問題 そろそろyuniFFIについてもテスト環境を構築する必要が有る。yuniFFIが…

スタブDLLの作成 - NCCCとは

前回: http://d.hatena.ne.jp/mjt/20150601/p1 - 定数テーブル 既にGithubには定数スタブのコード生成を完成させてコミットしているが、それについて書くのはDLLの準備が整ったタイミングに延期してcall stubの生成に話を進める。 以前( http://d.hatena.ne.…

スタブDLLの作成 - 定数テーブル

前回: http://d.hatena.ne.jp/mjt/20150523/p1 - データベースの構成 というわけで、DLLが提供すべき定数テーブルのコードをStubIRから生成する。 定数テーブルとは 定数テーブルとは、"ABIを構成する定数"の表を示す。要するにFFIバインディングの関数定義…

R7RS→R5RSへのlowerが可能なのか問題

nmoshはR7RSライブラリをR6RSに変換することでR7RSライブラリを読み取れるようにしている。同様のことをモジュールシステムの無いR5RS相当の実装、例えばMIT SchemeやSchluesselで行なってR7RSを実装できないかと思った。 つまり: R7RSコードとライブラリの…

スタブDLLの作成 - データベースの構成

前回: http://d.hatena.ne.jp/mjt/20150322/p1 - FFIブリッジを作ろう 移植性のある"FFIブリッジ"ライブラリを作成したことで、Scheme処理系間で共通のFFI関数呼び出しフレームワークができた。もっとも、これだけでは役に立たないので実用性のあるFFIフレー…

Schemeファンのための『ゲームエンジン・アーキテクチャ』立ち読みガイド

(本文p292。) ゲームエンジン・アーキテクチャはノーティドッグ(NDI)のエンジニアが書いたゲーム開発のかなり広範なトピックを扱った書籍の日本語訳。 http://www.sbcr.jp/products/4797377484.html http://minahito.hatenablog.com/entry/2015/03/28/183822…

今月の"今なにやってんの"

先月: http://d.hatena.ne.jp/mjt/20150311/p1 先月からは半月強しか経ってないのであんまり進捗が。。今月からはもうちょっとこまめに記録して、この欄はスピーディーに書けるようにしたい。 teslawireは進捗なし。。ちょっと方針を考えないと不味いかもし…

例外はポータブルにdisplayできない

そろそろyuniライブラリを各種処理系で自動テストできる環境を作ろうとしている。個々のテストはevalに渡してその例外を記録していくことになるが、例外オブジェクトはwriteで書き出せないため何らかの可読形式に変換する必要がある。 R7RSには、error-objec…

list?と手続きの停止性

追記: predicateは常に値を返すとなっているので停止すると言ってよさそうですね。。(いや、"停止する場合に値を返す"とも言えなくもない気もするけど) R7RS 1.3.5. Naming conventions By convention, ? is the final character of the names of procedures…

R6RSとR7RSライブラリの比較 - trivialに同じ(と見做す)もの

prev: http://d.hatena.ne.jp/mjt/20150327/p1 - とりあえずリストを作る というわけで、今度は追加実装の必要が無さそうなものを消していく。ここでは、R6RSとR7RSで等価なものと、R7RSの方がスーパーセットになっているもの。 https://gist.github.com/oku…