* persistent-C のページ -(by [[K]], 2016.02.17) ** 基本的なアイデア -(1) C言語を少しだけ拡張し、以下の構文を使えるようにします。 persistent int a; // こうすると、変数aは「永続変数」になる。 --永続変数は、persistent_save(0); や persistent_load(0); という命令によって、外部ファイルに書きだされたり読み戻されたりする。それ以外のタイミングでは同期されない。 --基本的にはこれだけ。 -(2) この拡張によって、以下のことができるようになります。 --(2-1) ゲームにおけるhigh-scoreなどの処理が非常に簡単になる。初心者がfopenとかで悩まずに済む。 --(2-2) 処理を一度中断しても再開できるようなプログラミングが可能になる。 [例] persistent int sum = 0, i = 0; persistent_load(0); for (; i <= 100; i++) { sum += i; persistent_save(0); } --(2-3) データ書き換えのundoができる。 ---つまり、変数に値を代入している途中で、「あ、やっぱり元に戻そう」と思ったら persistent_load(0); してしまえばいい。そうすれば直前のpersistent_save()時点に戻る。 ---ただし永続変数以外は戻らないけど。 --(2-4) 永続変数を後から参照できる。 ---簡単な外部ツールを使うことで、永続変数の値をいつでも確認できる。 ---プログラムが実行中でも変数を参照できる。 ---なんなら値を書き換えることもできる。 ---デバッグには非常に有効。 --(2-5) 他のプログラムの永続変数にアクセスできる。 ---これでプログラム間の通信をすることができる。 ---高度なデバックにも使えるかも。 -(3) この拡張は便利な反面、バグの温床やセキュリティホールもたくさんありそうです。 --それを片っ端から列挙して、一緒に考えましょう。 --どうすれば、便利と安全が共存できますか? --さらに拡張するとしたら、どんな機能を加えますか? --(このセクションはセキュリティキャンプ2016を想定しています) -(4) このpersistentを使って、適当なプログラムを作って遊びましょう。 --blikeライブラリも提供するので、C言語からグラフィックやキー入力も簡単に扱えますよー。 ---blikeライブラリは、BASICのグラフィック命令やINKEY的なことを、C言語でやるための簡易ライブラリ。 --(このセクションはセキュリティキャンプ2016を想定しています) -(5) 補足 int persistent_save(double sec); // sec秒以上の間隔をあけて保存する。 // あまり高い頻度で保存するとさすがに遅くなるので、クリティカルでないのなら30秒とかのほうがいいかも。 // 戻り値が-1なら保存を実行した。0なら高頻度だったので今回は保存しなかった。という意味。 int persistent_load(double sec); // 読み込む。secや戻り値についてはsaveと同様。 --ポイントとしては、こんな簡単な拡張で、こんなにできることが広がるということを分かってほしい。 --だから柔軟な発想を! --・・・そして課題も増える。しかし課題があっても簡単にはあきらめないで。 ** 仕様と実装 -persistent-C は仕様というかコンセプトなので、様々な実装があってよい。細部は処理系ごとに違っていてもいい。 -さまざま実装が試みられて、良いものが生き残ればよい。 -[[K]]もひとまず簡易な実装を作るけれど、それはKHPCと名乗らせることにする。→[[KHPC]] * こめんと欄 #comment