- 755 名前:デフォルトの名無しさん mailto:sage [2022/11/01(火) 00:01:33.71 ID:Jzc3CN/20.net]
- >>726
ファイルフォーマットというか、 Gitのキモはオブジェクトをハッシュでツリーにして管理すれば全て行けたって事だろ。 そして末端のファイルはblobだけど(既に言ったが)ディレクトリやJSONでもいいし、 中間のファイルフォーマットも実はどうでも良くて、 結局はメモリ上のオブジェクトツリーをどうやってファイルシステムにマッピングするかでしかないんだよ。 traverseさえ出来れば何も問題ないわけでさ。 例えば今のGitはハッシュ上2文字でディレクトリを作って分けてるが、 実は3文字の方が速い場合とかもあるはずだが、そこで階層を正しく切ってないと対応出来ないだろ。 まあこれについてはGitはおそらく対応出来てて、traverseエンジンは多分一つしかないから、それを交換すればいいだけ。 多分DBだとフラットの方が速い。(DB内に高性能のハッシュが実装されてる、というかDBってそれがキモなので) 或いは昔のNTFS(2000かXPの頃)だと、ディレクトリ内にハッシュがなかったので、 同一ディレクトリに20,000個とかファイルを置くととんでもなく遅くなったから、上8文字とか多めにしないと死ぬ。 この辺、つまり上何文字でディレクトリ切った方が速いかは、その下の階層のハッシュの実装によるでしょ。 こういうとき、ちゃんと階層を切ってれば、簡単に切り替えられる、ということ。 そんなの変数で~#defineで~ってのがC流かもしれんが、そういう事じゃないんだよ。 そこでぶった切ることによって、その先が、ファイルシステムであっても、ネットワークであっても、DBであっても、圧縮されてても、 要はtraverseさえ出来れば何でもいい、同じコードで走行出来るし、設定も自由に変えられるし、という自由度が得られる。 代償は関数コールが一段増えることだが、今はこれは問題にされないわけでね。 まあとにかく、後日にしようぜ。 ソフトウェアの階層の切り方についてはゆっくり考えてみてくれ。 基本的には、上記の通り、関数コールが一段増えるだけで無限の自由度が得られるだけ。 Cの場合は#defineマクロで実体を呼ぶかラッパを呼ぶか簡単に切換可能なので、 実際どうするかはともかく、
|

|