تبعيات حزمة المتسللين والمكتبات المقاومة في المستقبل

StackOverflow https://stackoverflow.com/questions/2823522

  •  26-09-2019
  •  | 
  •  

سؤال

في قسم التبعيات في ملف cabal:

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

هل يجب أن أفعل شيئًا مثل

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

(وضع الحدود العليا على إصدارات الحزم التي أعتمد عليها)

أم لا؟

سأستخدم مثالًا حقيقيًا: حزمة "القائمة" الخاصة بي على Hackage (قائمة Monad Transformer و Class)

  • إذا لم أضع الحد الأقصى - يمكن أن تنكسر الحزمة عن طريق تغيير في "المحولات"
  • إذا وضعت الحد الأقصى - المستخدم الذي يستخدم "محولات" ولكنه يستخدم إصدارًا جديدًا منه ، فلن يتمكن من استخدامه lift و liftIO مع ListT لأنها مجرد مثيل لهذه الفئات من المحولات-0.2.x

أعتقد أن التطبيقات يجب أن تضع دائمًا حدود علوية حتى لا تنكسر أبدًا ، لذا فإن هذا السؤال يتعلق فقط بالمكتبات:

هل يمكنني استخدام حد الإصدار العلوي على التبعيات أم لا؟

هل كانت مفيدة؟

المحلول

هناك صريح سياسات التوصية بالحدود العليا - انظر على وجه الخصوص القسم 3 ("التبعيات في cabal"). الإجابات الأخرى تعطي بعض التبريرات هذه السياسة.

باختصار - يجب أن يكون الحد الأعلى في شكل < A.(B+1) حيث A و B هما العناصر الأولى من الإصدار الحالي (A.B.C...). هذا لأن الزيادة A.B ينبغي أن يعني أن الإصدار يكسر واجهات برمجة التطبيقات القديمة.

نصائح أخرى

فكر في أوضاع الفشل:

  • مع الحد الأعلى ، إما أن تبني الحزمة الخاصة بك أو نبهات cabal حول تبعية بناء غير راضية. تم تعيين اللوم بوضوح.

  • بدون الحد الأعلى ، لدى العميل نسخة حديثة من Transformers وهي غير متوافقة مع الوراء. فشل برنامجك في البناء ؛ GHC Bleats حول كيفية عدم تجميع الكود الخاص بك. يبدو برنامجك رديئًا.

وضعت في الحد الأعلى.

IMO وضع الحدود العليا على أرقام الإصدار المقبولة هو الشيء الصحيح الذي يجب القيام به. بالنظر إلى دلالات أرقام الإصدار المستخدمة من قبل Hackage ، لا يوجد بالتأكيد ضمان بأن الحزمة الخاصة بك ستعمل ، في هذه الحالة ، Transformers 0.3.0.

لم أر أي مناقشة حقيقية حول هذا الأمر ، ولا يبدو أن هناك توصية عامة لاستخدام الحدود العليا باستثناء الحزمة الأساسية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top