Darcs - Darcs

Darcs
logotipo darcs
Autor (es) original (is) David Roundy
Desenvolvedor (s) Guillaume Hoffmann, et al.
lançamento inicial 3 de março de 2003 ; 18 anos atras ( 2003-03-03 )
Versão estável
2.16.4 / 20 de maio de 2021 ; há 4 meses ( 2021-05-20 )
Repositório
Escrito em Haskell
Sistema operacional Unix , Linux , BSD , Apple macOS , MS Windows
Modelo Controle de versão
Licença GPL-2.0 ou posterior
Local na rede Internet darcs .net Edite isso no Wikidata

Darcs é um sistema de controle de versão distribuído criado por David Roundy . Os principais recursos incluem a capacidade de escolher quais alterações aceitar de outros repositórios, interação com outros repositórios locais (em disco) ou repositórios remotos via SSH , HTTP ou e-mail e uma interface incomumente interativa. Os desenvolvedores também enfatizam o uso de ferramentas de software avançadas para verificar a exatidão: o sistema de tipos expressivo da linguagem de programação funcional Haskell impõe algumas propriedades e o teste aleatório via QuickCheck verifica muitas outras. O nome é um acrônimo recursivo para Darcs Advanced Revision Control System .

Modelo

Darcs trata os patches como cidadãos de primeira classe . Para o usuário, um repositório pode ser visto como um conjunto de patches, onde cada patch não é necessariamente ordenado em relação a outros patches, ou seja, o conjunto de patches é apenas um conjunto parcialmente ordenado . Em muitos casos, os patches podem ser transmitidos de forma independente entre vários repositórios.

Muitas operações de ramificação, fusão e seleção seletiva que exigiriam comandos adicionais com sistemas baseados em instantâneos como Git ou Mercurial podem ser feitas diretamente com Darcs com os comandos usuais "puxar" e "empurrar". Em termos de interface do usuário, isso significa que Darcs tem menos comandos. Esses comandos são mais interativos: é possível escolher com mais precisão quais patches desejam trocar com os repositórios remotos.

Os patches de um repositório são ordenados linearmente. O Darcs calcula automaticamente se os patches podem ser reordenados (uma operação chamada comutação) e como fazê-lo. Esses cálculos implementam a chamada "teoria do patch".

Um patch Darcs pode conter alterações dos seguintes tipos:

  • mudanças de linha,
  • criação e exclusão de arquivos e diretórios,
  • movimentação de arquivos e diretórios,
  • substituição de palavra (normalmente usada na refatoração de código, por exemplo, renomear todas as ocorrências de "foo" para "bar" em um determinado arquivo).

A noção de dependência entre patches é definida sintaticamente. Intuitivamente, um patch B depende de outro patch A se A fornecer o conteúdo que B modifica. Isso significa que os patches que modificam diferentes partes do código são considerados, por padrão, independentes. Para resolver os casos em que isso não é desejável, o Darcs permite que o usuário especifique dependências explícitas entre os patches.

Desde a versão 2.10, Darcs usa a diferença de paciência por padrão.

História

Darcs evoluiu a partir dos esforços de David Roundy para projetar um novo formato de patch para o GNU arch em junho de 2002. Essas discussões não levaram a nenhum código sendo comprometido com o Arch, mas levaram à concepção da teoria dos patches. Depois de escrever uma versão inicial do Darcs em C ++ , a versão Haskell foi escrita no outono de 2002 e lançada ao público em abril de 2003. Darcs 2.0 foi lançado em abril de 2008 e introduziu um formato de repositório mais robusto, bem como uma nova semântica de patch chamada "darcs-2", que visa minimizar problemas de mesclagem exponencial. A estratégia de desenvolvimento atual se concentra na implementação de otimizações e na adição de novos recursos, enquanto mantém o mesmo formato de repositório.

Deficiências

Darcs foi criticado com base no desempenho. Um dos problemas mais notáveis ​​estava relacionado ao algoritmo de mesclagem no Darcs 1.x, que poderia fazer um trabalho exponencial para mesclar alguns conflitos. Embora o problema não tenha sido completamente corrigido no Darcs 2, a frequência de fusões exponenciais foi reduzida. Os bugs ainda permanecem nos quais a fusão de conflitos recursivos falha.

Veja também

Referências

links externos