ucid

stubIR変換処理の作成

(諸般の事情でUCID/pFFIはyuniFFIに改名される。GenericなAPI記述はC++サポートのために再検討を入れ、yuniFFIはSchemeに一旦特化する。) stubIRはCコードに変換され、Cコンパイラで処理されて呼び出し用のstub(DLL)となる。stubはScheme処理系固有の方法で…

ucid-stubIRの設計

ucid処理系はC API記述から"ABIを抽出する"ためのCコードを出力する必要が有る。従来はUCID記述のS式から直接出力していたが、メンテナンス性がかなりダメだったのでちゃんとIR(intermediate representation)を決めてやりなおすことにした。 ucid処理系がCコ…

APIエラーのパターン

UCIDを使ってAPIトレーサを生成するにあたって、エラーのハイライト機能を付けたいと考えた。APIのエラー表現にはいくつかの類型が有り、これらをシステムとしてサポートすることで、UCID記述自体はコンパクトにすることができる。 (今のところ、UCIDはC++ A…

API 定義のグルーピング

C 言語ライブラリにおいて、ライブラリインターフェースは一般的にヘッダファイルを通じて定義される。このため、UCIDも基本的にはヘッダファイルの単位で記述し、UCIDのライブラリとしてグルーピングされることになる。 ただし、いわゆる ports や pkgsrc …

ライブラリ互換レイヤの制作 - pFFI overview

prev: http://d.hatena.ne.jp/mjt/20130818/p1 callstubによる呼び出し規約の吸収 とりあえず、Racket、Gauche、chibi-schemeとnmoshでR6RS(-light)ライブラリを共有する環境は整ったので、pFFIのランタイムを個々の処理系について実装していくことにする。 …

APIトレーシングへの応用

API記述の重要なユースケースはAPIトレーサの生成と言える。API記述というと、BridgesupportやIDLのように言語ブリッジとしての役割が主に注目されるが(ucidも本来はそちらが基本的なユースケースだが)、C/C++しか使用しないようなpure native環境でも価値が…

API記述の要求

C言語APIを記述するフォーマット といっても、なかなか難しい。いわゆるLL言語と違って、Cには言語組み込みのモジュールシステムが存在するわけでないため、その使い方もあまりモデル化されていない。このため、既存のAPIを考察して必要な要素を調べておく必…