Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Darcs - это распределенная система контроля версий, созданная Дэвидом Раунди . Ключевые функции включают возможность выбора, какие изменения принимать из других репозиториев, взаимодействие с другими локальными (на диске) репозиториями или удаленными репозиториями через SSH , HTTP или электронную почту, а также необычный интерактивный интерфейс. Разработчики подчеркивают также использование передовых программных средств для проверки правильности: выразительный тип системы в функциональном языке программирования Haskell претворяет некоторые свойства и рандомизированное тестирование с помощью QuickCheck проверяет многие другие. [2] Название - рекурсивная аббревиатура.для системы управления версиями Darcs Advanced . [3]

Модель [ править ]

Darcs относится к заплатам как к первоклассным гражданам . Для пользователя репозиторий можно рассматривать как набор исправлений, где каждый исправление не обязательно упорядочено по отношению к другим исправлениям, то есть набор исправлений является лишь частично упорядоченным набором . Во многих случаях патчи могут независимо передаваться между различными репозиториями.

Многие операции ветвления, слияния и выборки, которые потребуют дополнительных команд с системами на основе моментальных снимков, такими как Git или Mercurial, могут быть выполнены напрямую с помощью Darcs с помощью обычных команд «pull» и «push». С точки зрения пользовательского интерфейса это означает, что в Darcs меньше команд. Эти команды более интерактивны: можно более точно выбрать, какими патчами они хотят обмениваться с удаленными репозиториями.

Патчи репозитория упорядочены линейно. Darcs автоматически вычисляет, можно ли переупорядочить патчи (операция, называемая коммутацией), и как это сделать. Эти расчеты реализуют так называемую «теорию пятен».

Патч Darcs может содержать изменения следующих типов:

  • изменения строки,
  • создание и удаление файлов и каталогов,
  • перемещение файлов и каталогов,
  • подстановка слов (обычно используется при рефакторинге кода, например, переименование всех вхождений «foo» в «bar» в данном файле).

Понятие зависимости между патчами определяется синтаксически. Интуитивно понятно, что патч B зависит от другого патча A, если A предоставляет контент, который изменяет B. Это означает, что патчи, изменяющие различные части кода, по умолчанию считаются независимыми. Чтобы устранить случаи, когда это нежелательно, Darcs позволяет пользователю указывать явные зависимости между патчами.

Начиная с версии 2.10, Darcs по умолчанию использует настройку терпения .

История [ править ]

Darcs развился из усилий Дэвида Раунди по разработке нового формата патчей для GNU arch в июне 2002 года. Эти обсуждения не привели к передаче какого-либо кода в Arch, но привели к концепции теории патчей. После написания первоначальной версии Darcs в C ++ , то Haskell версия была написана осенью 2002 года и выпущена общественности в апреле 2003 года Darcs 2.0 была выпущена в апреле 2008 года и представила более надежный формат хранилище, а также новую семантику патча под названием "darcs-2", направленный на минимизацию проблем с экспоненциальным слиянием. [4] Текущая стратегия развития фокусируется на внедрении оптимизации и добавлении новых функций при сохранении того же формата репозитория.

Недостатки [ править ]

Darcs подвергался критике за производительность. [5] [6] Одна из наиболее заметных проблем была связана с алгоритмом слияния в Darcs 1.x, который мог выполнять экспоненциальную работу по слиянию некоторых конфликтов. Хотя проблема не была полностью исправлена ​​в Darcs 2 [7], частота экспоненциальных слияний была уменьшена. По-прежнему остаются ошибки, при которых не удается объединить рекурсивные конфликты. [8]

См. Также [ править ]

  • Сравнение программного обеспечения для контроля версий

Ссылки [ править ]

  1. ^ a b "Список изменений для darcs" . Взлом . Проверено 24 июня 2018 .
  2. ^ Roundy 2005 , стр. 2: «Одна из проблем, с которыми я столкнулся с начальными дарами C ++, заключалась в том, что у меня не было кода модульного тестирования. В течение двух недель после первой записи darcs я начал использовать QuickCheck для тестирования функций исправлений и в тот же день исправил ошибку, обнаруженную QuickCheck. QuickCheck позволяет очень легко определить свойства, которые должны иметь функции, которые затем проверяются с использованием случайно сгенерированных данных.
  3. ^ Раунди, Дэвид (2008-10-21), «предпочитаю рекурсивное сокращение (sic) смущающему», Darcs (Commit), Darcs Hub.
  4. ^ "Два", Darcs
  5. Марлоу, Саймон (7 марта 2007 г.), «Текущее состояние Darcs», пользователи Darcs (список рассылки), OSUOSL.
  6. ^ Fendt, Роберт (9 января 2009), "DVCS Round-Up: Одна система Правилу Them All?", Developer Network , 1 , Фонд Linux, архивируются с оригинала на 2009-02-28.
  7. ^ "ConflictsFAQ", Wiki , Darcs.
  8. ^ "Проблема 1520 Неопровержимый шаблон не удалось для данных шаблона. Может быть, просто a2", Bug Tracker , Darcs.
  • Раунди, Дэвид (2005), «Darcs: управление распределенными версиями в Haskell», Труды семинара ACM SIGPLAN 2005 года на Haskell , Таллинн, Эстония, стр. 1–4, doi : 10.1145 / 1088348.1088349 , ISBN 1-59593-071-X, S2CID  13932981

Внешние ссылки [ править ]

  • Официальный веб-сайт