2010-05-12 30 views
6

Trong phần phụ thuộc của một tập tin cabal:gói phụ thuộc hackage và các thư viện trong tương lai chống

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

Tôi có nên làm một cái gì đó giống như

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

(đặt những giới hạn trên các phiên bản của gói tôi phụ thuộc trên)

hay không?

tôi sẽ sử dụng một ví dụ thực tế: "Danh sách" của tôi gói trên Hackage (biến Danh sách đơn nguyên và lớp)

  • Nếu tôi không đặt giới hạn - gói của tôi có thể phá vỡ bởi một sự thay đổi trong " máy biến áp "
  • Nếu tôi đặt giới hạn - người dùng sử dụng" máy biến áp "nhưng đang sử dụng phiên bản mới hơn thì sẽ không thể sử dụng liftliftIO với ListT vì nó chỉ là phiên bản của các loại máy biến áp-0.2 này .x

Tôi đoán rằng các ứng dụng nên luôn đặt giới hạn trên để chúng không bao giờ bị vỡ, vì vậy câu hỏi này chỉ là về thư viện:

Tôi có nên sử dụng giới hạn phiên bản cao hơn về phụ thuộc hay không?

Trả lời

4

Có một giới hạn rõ ràng policy đề xuất giới hạn trên - xem trong phần 3 cụ thể ("Phụ thuộc trong Cabal"). Các câu trả lời khác đưa ra một số biện minh cho chính sách này.

Tóm lại - giới hạn trên phải ở dạng < A.(B+1) trong đó A và B là phần tử đầu tiên của phiên bản hiện tại (A.B.C...). Điều này là do việc tăng A.B nên có nghĩa là phiên bản này phá vỡ các API cũ.

+2

Tôi đã thêm một bản tóm tắt nhanh về chính sách được đề cập vào câu trả lời của bạn. Tôi hy vọng bạn không phiền, nhưng nếu bạn làm, hãy thay đổi/rephrase/hoàn nguyên nó. – yairchu

1

IMO đặt giới hạn trên số phiên bản được chấp nhận là điều đúng đắn cần làm. Với ngữ nghĩa của các số phiên bản được sử dụng bởi Hackage, chắc chắn không đảm bảo rằng gói của bạn sẽ làm việc với, trong trường hợp này, máy biến áp 0.3.0.

Tôi chưa thấy bất kỳ cuộc thảo luận thực sự nào về điều này và dường như không có đề xuất chung nào để sử dụng giới hạn trên ngoại trừ gói cơ sở.

2

Hãy suy nghĩ về các phương thức thất bại:

  • Với sự ràng buộc trên, một trong hai gói của bạn xây dựng hoặc cabal bleats về một phụ thuộc xây dựng không hài lòng. Đổ lỗi được phân công rõ ràng.

  • Nếu không có giới hạn trên, khách hàng có phiên bản máy biến áp gần đây và không tương thích ngược. Phần mềm của bạn không thể xây dựng; GHC bleats về cách mã của bạn không biên dịch. Phần mềm của bạn trông có vẻ kém chất lượng.

Đặt trong giới hạn trên.

+0

Với giới hạn trên, cabal sẽ không bị mờ về phụ thuộc xây dựng không hài lòng, tôi đã thử nghiệm và in ra "Cảnh báo: Gói này gián tiếp phụ thuộc vào nhiều phiên bản của cùng một gói . Điều này rất có khả năng gây ra lỗi biên dịch. ".Sau đó, gói khách hàng có thể sẽ không biên dịch vì thiếu một ví dụ – yairchu

+1

@yairchu: điều đó có nghĩa là một gói bạn đã nhập vào gói của bạn phụ thuộc vào 'máy biến áp', nhưng có các ràng buộc phiên bản khác nhau không? – jberryman

+0

@jberryman: chính xác. gói thử nghiệm của tôi phụ thuộc vào Danh sách phụ thuộc vào máy biến áp> = 0.2.0 và trên máy biến áp có thể phụ thuộc vào máy biến áp 0.1. * – yairchu

Các vấn đề liên quan