سؤال

لنفترض أن لدي برنامجًا أو مكتبة Haskell أود أن أجعلها في متناول غير Haskellers ، وربما المبرمجين C. هل يمكنني تجميعه إلى C باستخدام GHC ثم توزيع هذا كمصدر C؟

إذا كان هذا ممكنًا ، فهل يمكن لشخص ما تقديم مثال أدنى؟ (على سبيل المثال ، Makefile)

هل من الممكن استخدام GHC لتحديد علامات ورؤوس البرامج المترجم تلقائيًا ، وربما تجمع هذا في مجلد واحد؟

أنا مهتم بشكل أساسي بالقدرة على كتابة أجزاء من البرامج في C و Haskell ، ثم توزيعها على أنها لعبة Tarball ، ولكن دون الحاجة إلى الهدف من تثبيت GHC و Cabal.

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

المحلول

أنا مهتم بأن أكون قادرًا على كتابة أجزاء من البرامج في C و Haskell ، ثم توزيعها على أنها لعبة Tarball ، ولكن دون الحاجة إلى الهدف من تثبيت GHC و Cabal.

أنت تطلب الكثير من البنية التحتية التي من غير المرجح أن تجدها. تذكر ذلك أي برنامج Haskell ، حتى لو كان سيتم تجميعه إلى C ، من المؤكد تقريبًا أن يعتمد على نظام تشغيل كبير ومعقد لعمليتها الصحيحة. على الأقل ، يجب أن يدعم نظام وقت التشغيل هذا جمع القمامة والتقييم البطيء. لذلك لديك أكثر من مجرد مشكلة ترجمة.

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

نصائح أخرى

يمكنك القيام بذلك مع JHC. إنه برنامج كامل لتحسين برنامج التحويل البرمجي الذي يجمع إلى C. لا يحتوي على جميع الامتدادات الفاخرة التي تدعمها GHC.

حتى لو استطعت ، لن أسميها "مصدر C". يمكن لـ GHC استخدام C كجزء من نظام التجميع الخاص به ، لكن رمز C الذي تم إنشاؤه غير قابل للقراءة قليلاً. حتى لو كان من الممكن قراءتها وفهمها ، فلن يكون من المنطقي تعديلها لأنه لا توجد طريقة (بصرف النظر عن استخدام التغييرات في هاسكل) لدمج أي تعديلات قام بها المتسللين في الإصدارات المستقبلية من برنامجك.

مصطلح "المصدر" يعني الكود الذي كتبه الإنسان ويستخدم لإنشاء البرنامج. في هذه الحالة ، هذا هو هاسكل. C الذي تم إنشاؤه بواسطة برنامج التحويل البرمجي ليس "رمز المصدر" ، إنه تمثيل وسيط.

لا يمكنك الوصول إلى هناك مع GHC. حتى عندما يتم تجميعه عبر C ، يعتمد GHC على معالجة التجميع الناتج لخلط الأجزاء حولها ، ونظام وقت تشغيل ضخم والكثير من الأمتعة.

من ناحية أخرى ، قد يكون لديك حظ أفضل إذا كان ما تريده مدعومًا بمجموعة ميزة محدودة إلى حد ما من برنامج التحويل البرمجي JHC's John Meacham ، والذي يولد الإخراج C المدمج إلى حد ما.

أعلم أن هذا منشور قديم ، لكنني ما زلت أرغب أيضًا في ذكره AJHC. قام AJHC Forked JHC مع خطط إضافة ميزات جديدة وبعد ذلك دفع التحديثات إلى JHC.

لنفترض أن لدي برنامجًا أو مكتبة Haskell أود أن أجعلها في متناول غير Haskellers ، وربما المبرمجين C. هل يمكنني تجميعه إلى C باستخدام GHC ثم توزيع هذا كمصدر C

يمكنك تجميع C ، لكن C الناتجة غير قابلة للقراءة البشرية. من الأفضل لك كتابة ملفات رأس واستخدام C FFI الممتاز إلى جانب ذلك. في أي حال ، يبدو أن توزيع C تم إنشاؤه C وكأنه مهمة أحمق.

أنا مهتم بشكل أساسي بالقدرة على كتابة أجزاء من البرامج في C و Haskell ، ثم توزيعها على أنها لعبة Tarball ، ولكن دون الحاجة إلى الهدف من تثبيت GHC و Cabal.

لا أعرف أي حلول لا تنطوي على GHC. يجب أن توزع على الأقل Haskell RTs.

هل يمكنني تجميعه إلى C باستخدام GHC ثم توزيع هذا كمصدر C؟

لا ، هذا غير ممكن ولكن يمكنك بسهولة إنشاء واجهة بين Haskell و C باستخدام واجهة الوظيفة الأجنبية (FFI) من Haskell.

يمكنك الحصول على المزيد من المثال هنا.

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