Pergunta

Na secção de dependências de um cabal do arquivo:

Build-Depends: base >= 3 && < 5, transformers >= 0.2.0

Devo estar fazendo algo como

Build-Depends: base >= 3 && < 5, transformers >= 0.2.0 && < 0.3.0

(colocar limites superior em versões de pacotes que dependem)

ou não?

Vou usar um exemplo real:a minha "Lista" pacote em Hackage (Lista de monad transformer e classe)

  • Se eu não colocar o limite - o meu pacote poderia quebrar por uma alteração na "transformers"
  • Se eu não colocar o limite - um usuário que usa de "transformers", mas está usando uma versão mais recente de que ele não será capaz de usar lift e liftIO com ListT porque é apenas um exemplo de uma destas classes de transformadores-0.2.x

Eu acho que os aplicativos devem sempre colocar limites superiores para que eles nunca quebrar, então, esta pergunta é de apenas cerca de bibliotecas:

Eu uso a versão superior de limite de dependências ou não?

Foi útil?

Solução

Há um explícito política Recomendando os limites superiores - consulte em particular a Seção 3 ("Dependências na Cabala"). As outras respostas dão mais uma justificativa para esta política.

Em resumo - o limite superior deve estar na forma de < A.(B+1) onde A e B são os primeiros elementos da versão atual (A.B.C...). Isso ocorre porque aumentando A.B deve significar que a versão quebra APIs antigas.

Outras dicas

Pense nos modos de falha:

  • Com o limite superior, o seu pacote constrói ou balas de cabala sobre uma dependência de construção insatisfeita. A culpa é claramente atribuída.

  • Sem o limite superior, o cliente possui uma versão recente dos Transformers e não é compatível com versões anteriores. Seu software não consegue construir; GHC BLATS sobre como seu código não compila. Seu software parece ruim.

Coloque no limite superior.

IMO colocar limites superior no aceitos números de versão é a coisa certa a fazer.Dada a semântica dos números de versão utilizado por Hackage certamente não existe nenhuma garantia que o pacote irá trabalhar, neste caso, transformadores 0.3.0.

Eu não vi nenhum debate real sobre isso embora e não parece ser uma recomendação geral para usar limites superiores, exceto para o pacote base.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top