ما هي أفضل الممارسات لإدارة حزم الكابال ذات الصلة؟

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

  •  26-09-2019
  •  | 
  •  

سؤال

أنا أعمل على مكتبة تحسين قائمة على البيانات المكتوبة في هاسكل. يبدو من المحتمل الآن أن يتم تقسيم المكتبة إلى قطعتين:

  • أ جوهر قطعة مع الحد الأدنى من تبعيات البناء. نسميها hoopl-core.

  • أ ممتلئ قطعة ، نسميها hoopl, ، والتي قد تحتوي على تبعيات إضافية على حزم مثل prettyprinter و QuickCheck وما إلى ذلك.

والفكرة هي أن مترجم غلاسكو هاسكل سيعتمد فقط على hoopl-core, ، بحيث لن يكون من الصعب للغاية الحصول على المترجم. سوف يحصل المترجمون الآخرون على الأشياء الجيدة الإضافية hoopl. طَرد hoopl سوف يعتمد على hoopl-core.

يمكن لأدوات حزمة Debian إنشاء حزم متعددة من شجرة مصدر واحدة. للأسف لم يصل كابال بعد إلى هذا المستوى من التطور. ولكن يجب أن يكون هناك مصممي مكتبة أو تطبيقات أخرى لديهم مشكلات مماثلة (على سبيل المثال ، حزمة واحدة لمكتبة أساسية ، وآخر لواجهة سطر الأوامر ، وآخر لواجهة واجهة المستخدم الرسومية).

ما هي أفضل الممارسات الحالية لبناء وإدارة حزم هاسكل المتعددة ذات الصلة باستخدام Cabal؟

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

المحلول

كنت أضع الحزمتين في الدلائل الفرعية منفصلة ، ولدي أ Makefile مع شيء مثل هذا:

.PHONY: all hoopl hoop-core
all : hoopl

hoopl : hoopl-core
       cd hoopl && cabal build && cabal register --inplace

hoopl-core
       cd hoopl-core && cabal build && cabal register --inplace

هذا يفترض أنك قمت بتمهيد العملية عن طريق بناء أول نواة وتسجيلها (--inplace) ثم البناء hoopl. يمكنك أتمتة المزيد من هذا باستخدام Makefile.

كما تعلمون ، عندما أردنا وظائف مماثلة لـ GHC ، كتبنا نظام البناء الخاص بنا بدلاً من ذلك ؛-) لا أوصي بذلك. من الناحية الفنية ، أفترض أنه سيكون من الممكن استخراج من نظام إنشاء GHC القطع المطلوبة وإعداد إطار قابلة لإعادة الاستخدام ، على الرغم من ...

نصائح أخرى

ضع الحزمتين في دلالة فرعية منفصلة لإعادة التحكم في المصدر ، واستخدم ملفين كابال منفصلين.

تأكد من استخدام تشغيل نظام التحكم في المصدر عند تحريك الملفات ، بحيث يتتبع السجل بشكل صحيح.

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