إنشاء ملف تنفيذي لبرامج الأسس

#1

قمت بتقديم PR لتمكين المستخدم من إنشاء ملف تنفيذي من برنامج الأسس. الآن سيكون بإمكان المستخدم الاختيار ما بين التنفيذ المباشر بتقنية JIT أو بإنشاء شفرة تنفيذية. هذا المثال يشرح الطريقة:

اشمل "مـتم/طـرفية.أسس"؛
اشمل "مـتم/مـحارف.أسس"؛
اشمل "بـناء.أسس"؛

عرف مـضروب: وحدة
{
  عرف مضروب: دالة (ع: صـحيح) => صـحيح
  {
    إذا ع <= 0 أرجع 1؛
    أرجع ع * مضروب(ع - 1)؛
  }؛

  @تصدير[main] دالة ابدأ (عدد_المعطيات: صـحيح، معطيات: مؤشر[مصفوفة[مؤشر[مصفوفة[مـحرف]]]]) => صحيح
  {
    عرف م: صحيح؛
    عرف المعطى: مؤشر[محرف] = معطيات~محتوى(عدد_المعطيات - 1)؛
    إذا المعطى~محتوى >= '0' و المعطى~محتوى <= '9' {
    مـتم.مـحارف.امسح(المعطى، "%d"، م~مؤشر)؛
    مـتم.طـرفية.اطبع("مضروب %d = %d\ج"، م، مضروب(م))؛
    } وإلا {
      مـتم.طـرفية.اطبع("الاستخدام: مضروب <رقم>\ج")؛
    }؛
    أرجع 0؛
  }؛
}؛

إذا الـعملية.عدد_المعطيات == 3 {
  عرف المعطى: مؤشر[مصفوفة[مـحرف]] = الـعملية.المعطيات~محتوى(الـعملية.عدد_المعطيات - 1)؛
  إذا المعطى~محتوى(0) >= '0' و المعطى~محتوى(0) <= '9' {
    مـضروب.ابدأ(الـعملية.عدد_المعطيات، الـعملية.المعطيات)؛
  } وإلا {
    إذا بـناء.أنشئ_تنفيذي(مـضروب.ابدأ~شبم، المعطى) {
      مـتم.طـرفية.اطبع("اكتمل البناء.\ج")؛
    }؛
  }
} وإلا {
  مـتم.طـرفية.اطبع("الاستخدام المباشر: الأسس مضروب.أسس <رقم>\ج")؛
  مـتم.طـرفية.اطبع("إنشاء ملف تنفيذي: الأسس مضروب.أسس <اسم الملف التنفيذي>\ج")؛
}؛
1 Like
#2

مارأيك بدمج وظيفة البناء مع Apm؟

#3

ما الهدف من دمجهما؟

#4

Apm يتعامل مع الحزم لنجعله يتعامل مع وظائف البناء لتقليل التشتت بسبب كثرة المكتبات

1 Like
#5

لا أحبذ الفكرة لأن مدير الحزم وحزمة البناء كلاهما مرشحتان للنمو كثيرًا، فإذا دمجناهما سينتج لنا حزمة ضخمة.

2 Likes
#6

فكرة جيدة ، هناك أمثلة ناجحة لمدراء حزم اخرين تعمل نفس المهمة :

لغة Rust تستخدم مدير الحزم cargo
لكن لديه العديد من الوظائف مثل بناء المشروع وتصديره لعدة انظمة
cargo run

وهناك مدير الحزم npm يعمل نفس المهمه في بعض الأحيان ، وهو غير مختص للغة واحدة
npm start

1 Like
#7

@sarmad كما قال @suliman هذا المفترض
أن تكون اوامر البناء من اختصاص Apm وليس وحدة مستقل

1 Like
#8

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

1 Like