nmosh PFFI

nmosh FFIの重要な機能として、PFFIを作成中。PFFIは、ライブラリのexpand時に関連付けられたCソースコード(や、将来的にはOpenCLカーネル)を同時にビルドして使う機能で、従来のFFIでは構造体のアクセス等を手で書かないといけなくて面倒だったものをどうにかする機能。
構文はnmosh FFIのそれとほぼ同様。

(library (ext posix terminal)
         (export 
           echo_on
           winsize_y)
         (import 
           (rnrs)
           (nmosh ext))
         (import-c (source "terminal.c"))
(c-function void echo_on)
(c-function int winsize_y))

今のところは全く不健全なマクロで実装されている。構文を整理したあとexpanderに統合してlibrary言語の一部になる予定。
"P"FFIのPはPseudo(疑似)のPで、本来は諸般の事情でFFIをサポートしていないARMのようなアーキテクチャでもFFIをサポートするために、"R6RSライブラリにwrapされたCソースコードを書いてnmoshのビルド時に一緒にリンクする"仕組みだった。
現在のところキャッシュやinclude directoryの追加等はサポートしていない。キャッシュはnmosh自体のキャッシュ機構を流用する予定だけど、複数アーキテクチャでキャッシュディレクトリを共有したらどうすんのか等の問題があるので微妙かもしれない。
rishではこれをもっと積極的に使うつもりで、OSとのインターフェースは全部PFFIで書くことで実行対象のスクリプトに応じた最小構成のインタプリタを自然に生成させたい。