ما هي أفضل الممارسات لإدارة حزم الكابال ذات الصلة؟
سؤال
أنا أعمل على مكتبة تحسين قائمة على البيانات المكتوبة في هاسكل. يبدو من المحتمل الآن أن يتم تقسيم المكتبة إلى قطعتين:
أ جوهر قطعة مع الحد الأدنى من تبعيات البناء. نسميها
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 القطع المطلوبة وإعداد إطار قابلة لإعادة الاستخدام ، على الرغم من ...
نصائح أخرى
ضع الحزمتين في دلالة فرعية منفصلة لإعادة التحكم في المصدر ، واستخدم ملفين كابال منفصلين.
تأكد من استخدام تشغيل نظام التحكم في المصدر عند تحريك الملفات ، بحيث يتتبع السجل بشكل صحيح.