Даркс
![]() | |
Оригинальный автор(ы) | Дэвид Раунди |
---|---|
Разработчик(и) | Гийом Хоффманн и др. |
Первоначальный выпуск | 3 марта 2003 г [1] |
Стабильная версия | 2.18.2 [2] ![]() |
Репозиторий | |
Написано в | Хаскелл |
Операционная система | Unix , Linux , BSD , Apple MacOS , MS Windows |
Тип | Контроль версий |
Лицензия | GPL-2.0 или новее |
Веб-сайт | дарки ![]() |
Darcs — распределенная система контроля версий, созданная Дэвидом Раунди . Ключевые функции включают в себя возможность выбирать, какие изменения принимать из других репозиториев, взаимодействие с другими локальными (на диске) репозиториями или удаленными репозиториями через SSH , HTTP или электронную почту, а также необычно интерактивный интерфейс. Разработчики также подчеркивают использование передовых программных инструментов для проверки правильности: экспрессивная система типов функционального языка программирования Haskell обеспечивает соблюдение некоторых свойств, а рандомизированное тестирование с помощью QuickCheck проверяет многие другие. [3] Название представляет собой рекурсивную аббревиатуру от Darcs Advanced Revision Control System . [4]
Модель
[ редактировать ]Даркс относится к патчам как к гражданам первого сорта . Для пользователя репозиторий может рассматриваться как набор патчей, где каждый патч не обязательно упорядочен по отношению к другим патчам, т.е. набор патчей представляет собой лишь частично упорядоченный набор . Во многих случаях патчи могут независимо передаваться между различными репозиториями.
Многие операции ветвления, слияния и выбора элементов, которые требуют дополнительных команд в системах на основе моментальных снимков, таких как 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++ осенью 2002 года была написана версия на Haskell и выпущена для публики в апреле 2003 года. Darcs 2.0 был выпущен в апреле 2008 года и представил более надежный формат репозитория, а также новый семантический патч под названием «darcs-2», направленный на минимизацию экспоненциальных конфликтов слияния . [5] Текущая стратегия развития направлена на реализацию оптимизаций и добавление новых функций при сохранении того же формата репозитория.
Недостатки
[ редактировать ]Darcs подвергался критике за проблемы с производительностью. [6] [7] Сюда входят проблемы, связанные с алгоритмами слияния Darcs 1.x, которые продемонстрировали экспоненциальную работу по слиянию определенных конфликтов. Хотя это и не было полностью решено в последующих версиях Darcs, [8] частота экспоненциальных слияний действительно заметно снизилась.
Все еще остаются ошибки, из-за которых не удается объединить рекурсивные конфликты. [9]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Журнал изменений для дарков» . Хакадж . Проверено 24 июня 2018 г.
- ^ «darcs: распределенная, интерактивная, интеллектуальная система контроля версий» .
- ^ Раунди 2005 , с. 2: «Одна из проблем, с которыми я столкнулся при работе над первоначальными документами на C++, заключалась в том, что у меня не было кода модульного тестирования. В течение двух недель после первой записи darcs я начал использовать QuickCheck для проверки функций патча и в тот же день исправил ошибку, обнаруженную QuickCheck. QuickCheck позволяет очень легко определить свойства, которыми должны обладать функции, которые затем проверяются на случайно сгенерированных данных».
- ^ Раунди, Дэвид (21 октября 2008 г.), «предпочитаю рекурсивную аббревиатуру (так в оригинале) смущающей», Darcs (Commit), Darcs Hub .
- ^ «Два», Даркс
- ^ Марлоу, Саймон (7 марта 2007 г.), «Текущий статус Darcs», Пользователи Darcs (список рассылки), OSUOSL .
- ^ Фендт, Роберт (9 января 2009 г.), «Обзор DVCS: одна система, которая будет управлять всеми?», Developer Network , vol. 1, Linux Foundation, заархивировано из оригинала 28 февраля 2009 г.
- ^ «КонфликтыFAQ», Wiki , Darcs .
- ^ «Проблема 1520. Неопровержимый шаблон не выполнен для шаблона Data.Maybe.Just a2», Bug Tracker , Darcs .
- Раунди, Дэвид (2005), «Darcs: управление распределенными версиями в Haskell», Материалы семинара ACM SIGPLAN 2005 года по Haskell , Таллинн, Эстония, стр. 1–4, doi : 10.1145/1088348.1088349 , ISBN 1-59593-071-Х , S2CID 13932981
Внешние ссылки
[ редактировать ]