* Sat Apr 23 21:04:30 JST 2016 Naoyuki Sawa
- C言語から使えるJSONパーサ「parson」をライブラリに取り込ませて頂きました。
- 当アーカイブは、関連資料を保存したものです。
  ①オリジナル版保存/parson by kgabis.pdf
  │「parson」の本家サイト(http://kgabis.github.io/parson/)の、2016/04/23時点の内容を、pdfで保存しました。
  │「parson」の概要と、簡単な使い方のサンプルコードが載っています。
  │詳細なAPIドキュメントは存在せず(?)、上記のサンプルコードやライブラリに含まれているサンプルコードを見て使うしかないようです。
  │ただし、「parson」のAPIは自然で判り易いので、それで十分なのかも知れません。
  │概念としては、C言語移植版の/clip/tixml.c や、自作の/clip/clipreg.c のAPIと、だいたい似たような感じです。
  ②オリジナル版保存/kgabis-parson-0c04a7e.zip
  │「parson」の本家サイトからダウンロードした、2016/04/23時点のライブラリソースです。
  │ダウンロードURLは、「https://github.com/kgabis/parson/zipball/master」(2016/04/23時点)です。
  │今回は、P/ECE用としてもWindows用としても、オリジナル版「parson」のソースに一切手を加えずに、そのまま.lib化させて頂きました。
  ③参考資料/Big Sky __ C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。.
  │今回「parson」を知るきっかけとなった、「Big Sky」(http://mattn.kaoriya.net/)さんの、
  │2012/11/05の記事『C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。』(http://mattn.kaoriya.net/software/lang/c/20121102175736.htm)を、pdfで保存しました。
  │本家サイトとはまた別のサンプルコードが載っているので、参考になります。
  │尚、「Big Sky」さんの2013/07/10の記事『C言語から使えるJSONパーサ、jansson がとても直感的で良い』(http://mattn.kaoriya.net/software/lang/c/20130710214647.htm)によると、
  │「parson」よりもさらに使い易い、「Jansson」(http://www.digip.org/jansson/)というJSONパーサーが有る事が判りました。
  │しかし「Jansson」を少し調べてみた所、「parson」よりも「Jansson」の方がかなりソースコードの量が多いようです。
  │僕はコード量の少ないライブラリの方が好きである事と、「parson」でも充分な機能を持っていると思うので、今回は「Jansson」ではなく「parson」を使わせて頂く事にしました。
  │もし今後「parson」で機能不足等の問題が生じた場合は、改めて「Jansson」を検討する予定です。
- 当フォルダのファイルについて
  ・README.TXT			このファイル。
  ・parson.c,parson.h		上記①から取り出したファイル。一切変更していません。
  ・Makefile			P/ECE用のライブラリを作成するMakefile。
  ・parson.dsw,parson.dsp	Windows用のライブラリを作成するVC++6.0プロジェクトファイル。
  ・オリジナル版保存/,参考資料/	上記①②③を参照して下さい。
- ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  ┃【重要】今後「parson」が更新された時に、ライブラリを再作成する方法は、以下の通りです。┃
  ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  ┃1. 「parson」の本家サイトから新しいライブラリをダウンロードして、/clip/parson/オリジナル版保存/kgabis-parson-*******.zipを置き換えて下さい。
  ┃   必要に応じて、本家サイトのページもpdfで保存し直して、/clip/parson/オリジナル版保存/parson by kgabis.pdfを置き換えて下さい。(必須ではない)
  ┃2. 新しいライブラリのアーカイブから、parson.c,parson.hを取り出して、/clip/parson/parson.c,parson.hに上書きして下さい。
  ┃3. Windows用のライブラリを更新する:
  ┃   3-1. VC++6.0で、parson.dswを開いて下さい。
  ┃   3-2. 「ビルド」→「アクティブな構成の設定」→「parson - Win32 Release」を選択し、「ビルド」→「ビルド」を実行して下さい。
  ┃   3-3. 「ビルド」→「アクティブな構成の設定」→「parson - Win32 Debug」を選択し、「ビルド」→「ビルド」を実行して下さい。
  ┃   3-4. VC++6.0を終了して下さい。
  ┃   3-5. コマンドプロンプトを開いて下さい。
  ┃   3-6. 以下のコマンドを実行して下さい。
  ┃        │CD /D C:\Home\Share\Piece\clip\parson
  ┃        │make clean
  ┃        これで、VC++6.0が生成したファイルのうち、不要なファイルが削除されます。
  ┃        残るファイル(必要なファイル)は、/clip/parson/Release/parson.lib,/clip/parson/Debug/parson.lib,/clip/parson/Debug/vc60.pdb です。
  ┃4. P/ECE用のライブラリを更新する。
  ┃   4-1. 3-6.の続きで、以下のコマンドを実行して下さい。
  ┃        │make
  ┃        これで、/clip/parson/parson.lib が生成されます。
  ┃        parson.lib 以外にも中間ファイルが残りますが、P/ECEの場合はデバッグのために中間ファイルを読む事が時々有るので、残しておく事にしました。
  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  「parson」のGitHubリポジトリ(https://github.com/kgabis/parson)を見ると、年数回ぐらい更新が行われているので、時々チェックするのが良いと思います。
- 【注意】Windows版ライブラリを使用する時の、「parson」内でのメモリ確保・開放についての注意点
  デフォルトでは、「parson」内で行われるメモリ確保・開放に対して、ガーベージコレクタは効きません。
  「parson」のオブジェクトを適切に開放しないと、メモリを消費したままになるので注意して下さい。
  デフォルトでは、「parson」内で行われるメモリ確保・開放に対して、ガーベージコレクタが効かない理由は、二つの理由が有ります。
  │理由1. 根本的な理由として、Windows用の「parson」ライブラリをlibclipに含めず単体でビルドしているので、/clip/tool/gc/leak_detector.hのmalloc/freeの置き換え対象外だからです。
  │理由2. 仮にもし、libclipに含めたとしても、「parson」ライブラリはmalloc/freeを関数呼び出しでなく関数アドレス経由で呼び出しているので、関数マクロの置き換え対象外になります。
  │       詳細は、/clip/garray.cの、g_array_set_clear_func()の、2016/04/20のコメントを参照して下さい。
  対策方法としては、以下の二つの方法が有ります。
  │方法1. 「parson」のオブジェクトの開放は、ガーベージコレクタに頼らず、明示的にきちんと開放する。これが正攻法です。
  │方法2. malloc/freeを呼び出す中継関数を定義して、json_set_allocation_functions()に指定する。こうすれば、「parson」のオブジェクトに対してもガーベージコレクタが効くはずです。(未検証)
  │       尚、malloc/freeを直接json_set_allocation_functions()に指定してはいけない理由は、/clip/garray.cの、g_array_set_clear_func()の、2016/04/20のコメントを参照して下さい。
  尚、P/ECEで使用する場合は、ガーベージコレクタを有効にしておけば、特に意識しなくても「parson」のオブジェクトに対してもガーベージコレクタが効きます。
  P/ECE用のガーベージコレクタ(clipgc.c,又は,clipbmgc.c)は、malloc/freeをマクロ関数で置き換える仕組みではないからです。
