darcs はどこが気持ち良いか、あるいは darcs が遅いわけ

This entry was posted by on Friday, 15 September, 2006
>昨日のつづき。昨日は darcs の心地良さについて「すべてがパッチベースであること」を挙げたけど、よくよく考えるともうひとつある。それは「すべてのワーキングコピーがレポジトリであること」。 > >正確に言うと、ワーキングコピーがレポジトリなのではなく、「すべてのワーキングコピーにはレポジトリ」が付随していて、それぞれ独立にバージョン管理可能な状態になっている。分散バージョン管理といっても、 GNU arch とかは(マニュアルを読むかぎり)まずユーザは自分のレポジトリを作るようだから、そのような構成にはなっていないようだ。一方、 monotone は db ファイルを指定するから、ワーキングコピーごとにレポジトリが存在するという構成になっているのだろう。 > >で、この構成の何が良いかというと、細かいことをいろいろ考えなくて良いのである。 > >たとえば「ブランチを切る」という行為。これは「新しいワーキングコピーを1コつくる」ということに相当する。ブランチ間で変更を移すのは、レポジトリ間で変更を伝達するのと同じこと。 darcs には、いわゆる「チェックアウト」という考え方すら(そういう意味では)存在しない。チェックアウト相当の動作は、ただ単に、 > > >手元に空のレポジトリを作成し、 > > > >リモートのレポジトリからパッチをコピーして、 > > > >そのパッチを前から順番に実行する > > > > >ことしかしなくて、これはようするにレポジトリの複製を作っているのと同じなのだ。そして、こういう考え方はパッチベースととても相性が良い……と、思う。もっとも、 monotone はパッチベースではないようだから、そうでもないのかもしれない。 > >ところで、この「心地良さ」は実はパフォーマンスと表裏一体になっていると言える。上のような手順を踏まないとレポジトリをコピーできないため、チェックアウトには常に、 svk でいうところの mirror の手間がかかる……といってもネットワーク越しでなければ大したコストは必要ないのだけど。 > >darcs は、「パッチの理論」なるモノがあってなんだかややこしそうなのと、実装言語が Haskell である点に特殊性がありそうだが、そういうことはぜんぜんない。私はパッチの理論についてはよく知らないし、 Haskell であるかどうかはあんまり関係ないように思える。遅いといっても、処理系に由来する遅さは特にないし。 >

Comments are closed.