MAD Designer iconMAD

6. 別のリーダー実装が対処すべき注意点(ハザード)

以下は主観的な意見ではなく、現行フォーマットに存在する欠陥です。それぞれについて、何が問題になるかを明記します。

# ハザード 影響
H1 マジックバイトがない。 ファイルは拡張子のみで判別されます(MADocument.m:459)。 Windowsには標準の.mad関連付けがなく、リネームされたファイルは判別不能になります。§7を参照。
H2 WALおよびSHMが同梱されている。 516 KBのデータベースに対してanalyitics-walが313 KBを占めています。 WALを無視するリーダーは古いデータを読むことになります。CLIはWALをリプレイするか、アーカイブ前にチェックポイントを要求しなければなりません。
H3 内部がCore Dataスキーマである(レガシーv0)。 すべてのリーダーがAppleプラットフォーム以外に存在しないCore Dataに縛られます。これを解消しない限り、フォーマットをポータブルと呼ぶことはできません。
H4 隠しファイルがスキップされる(MADArchiveManager.m:111)。 将来ドットから始まる隠しメンバが追加された場合、警告なしにアーカイブから脱落します。
H5 ディスク上のanalyiticsのスペルミス。 既存のドキュメントとの互換性を壊さずに修正することはできません。
H6 versionがライターではdouble、サンプルでは整数。 コンシューマは両方を受け入れる必要があります。
H7 SQLiteのコンパイルフラグが統一されていなかった。 build_sqlite3.shは20個のdefineを宣言していましたが、MADSqlite3ターゲットは1つしか適用していませんでした。 .maddbを書き込むエンジンが、スクリプト側で指定された8192バイトではなく4096バイトのページサイズを使用しており、FTS5とSTAT4も欠落していました。ページサイズはファイルヘッダーに書き込まれるため、フォーマットが偶発的に決まっていました。現在は修正済み:define定義はCompressor/sqlite3.xcconfigに集約され、ターゲットとスクリプトの双方がこれを参照します。修正後に書き込まれたキャッシュは8192バイトページを持ちますが、SQLiteはヘッダーからページサイズを読み取るため、古いキャッシュも引き続き開くことができます。docs/project/LIBRARIES.md §4を参照。

このページは英語原文の日本語翻訳です。内容に相違がある場合は、英語原文が優先されます。