* KHPCのページ -(by [[K]], 2016.02.18) ** KHPCとは? -KHPCは persistent-C の実装のひとつ。 -基本方針としては、手抜き。 -persistent-Cがどんなものなのかある程度実感できればよく、処理系としての優秀さは追求しない。 -さまざまな仕様を試すためにも、厳密さにこだわって試行錯誤を遅らせるのは得策ではない。 ** ver.0.00 -最初のバージョン。 -ソース・トランスレータ部と、ランタイムライブラリ部に分かれる。 -とにかくできるだけ手抜きをする。次のバージョンでまともにすればいい。手抜きは美徳である。 --とりあえず保存するファイルのファイル名も固定にしてしまおう(本来の仕様には反しているけど)。 -ソーストランスレータ部: --極端なことを言えば、ソースからpersistentの語を消せば、ソースのトランスレートはほぼ終了である(笑)。 --あとは下記のpersistent_init()に必要な情報を生成する。 --今回は手抜きのため、行頭の「persistent」にしか反応しないし、関数内のstatic変数のpersistentには対応しない(エラーになるか、誤作動する)。 -ランタイムライブラリ部: --persistent_load()およびpersistent_save()はまず最初にpersistent_init()を呼び出す。 --persistent_init()はランタイム部が既に初期化済みなら何もせずにreturnする。 --初期化に当たっては、ソーストランスレータ部が生成した永続変数情報を内部テーブルに展開する。 --とりあえず面倒なので、256個程度が登録できればよい。 -save動作: --まずイメージファイルを全部読みこんでしまう。適当に上限64MBとかでいいと思う。 --ファイルが存在しなければ、空っぽのイメージを構築する。 --次に永続変数テーブルを参照して、該当する物があれば上書きする。なければ追加する。 --サイズが違ったら、旧サイズのものはイメージ上から削除する(上書き動作なので)。 --そしてイメージファイルを全部出力する。 -load動作: --ファイルが存在しなければ何もしなくてよい。 --まずイメージファイルを全部読みこんでしまう。適当に上限64MBとかでいいと思う。 --ファイルの中身を参照して、対応する永続変数があればコピーする。なければそれは何もしない。 * こめんと欄 #comment