Package Images

توفر حزمة جوليا images ذاكرات كائن (كود أصلي) لحزم جوليا. إنها مشابهة لـ system image في جوليا وتدعم العديد من نفس الميزات. في الواقع، تنسيق التسلسل الأساسي هو نفسه، وصورة النظام هي الصورة الأساسية التي تُبنى عليها صور الحزم.

High-level overview

حزم الصور هي مكتبات مشتركة تحتوي على كل من الشيفرة والبيانات. مثل ملفات التخزين المؤقت .ji، يتم إنشاؤها لكل حزمة. يحتوي قسم البيانات على كل من البيانات العالمية (المتغيرات العالمية في الحزمة) بالإضافة إلى البيانات الوصفية اللازمة حول ما هي الطرق والأنواع المعرفة بواسطة الحزمة. يحتوي قسم الشيفرة على كائنات أصلية تخزن الناتج النهائي لمجمع جوليا القائم على LLVM.

يمكن استخدام خيار سطر الأوامر --pkgimages=no لإيقاف تخزين الكائنات مؤقتًا لهذه الجلسة. لاحظ أن هذا يعني أنه من المحتمل أن يتم إعادة توليد ملفات التخزين المؤقت. انظر JULIA_MAX_NUM_PRECOMPILE_FILES للحد الأقصى من المتغيرات التي تخزنها جوليا بشكل افتراضي.

Note

بينما تظهر صور الحزمة كأنها مكتبات مشتركة أصلية، إلا أنها ليست سوى تقريبات لذلك. لن تتمكن من الربط ضدها من برنامج أصلي ويجب تحميلها من جوليا.

Linking

نظرًا لأن حزم الصور تحتوي على كود أصلي، يجب علينا تشغيل رابط عليها قبل أن نتمكن من استخدامها. يمكنك تعيين متغير البيئة JULIA_VERBOSE_LINKING إلى true لجعل عملية ربط صورة الحزمة مفصلة.

علاوة على ذلك، لا يمكننا افتراض أن المستخدم لديه رابط نظام يعمل مثبت. لذلك، تقوم جوليا بتضمين LLD، رابط LLVM، لتوفير تجربة عمل جاهزة. في base/linking.jl، نقوم بتنفيذ واجهة محدودة لنتمكن من ربط صور الحزم على جميع المنصات المدعومة.

Quirks

على الرغم من أن LLD هو رابط متعدد المنصات، إلا أنه لا يوفر واجهة متسقة عبر المنصات. علاوة على ذلك، من المفترض استخدامه من clang أو برنامج تشغيل مترجم آخر، لذلك نعيد تنفيذ بعض المنطق من llvm-project/clang/lib/Driver/ToolChains. لحسن الحظ، يمكن للمرء استخدام lld -flavor لضبط lld على المنصة الصحيحة.

Windows

لتجنب الحاجة للتعامل مع link.exe نستخدم -flavor gnu، مما يحول lld بشكل فعال إلى رابط عابر من بيئة mingw32. تتطلب مكتبات Windows DLL أن تحتوي على دالة _DllMainCRTStartup ولتقليل اعتمادنا على مكتبات mingw32، نقوم بحقن تعريف stub بأنفسنا.

MacOS

تحتاج المكتبات الديناميكية على macOS إلى الربط مع -lSystem. في إصدارات macOS الحديثة، يتوفر -lSystem فقط للربط عندما يكون Xcode متاحًا. لهذا السبب نقوم بالربط مع -undefined dynamic_lookup.

Package images optimized for multiple microarchitectures

مماثل لـ multi-versioning لصور النظام، تدعم صور الحزم تعدد الإصدارات. إذا كنت في بيئة غير متجانسة، مع ذاكرة تخزين موحدة، يمكنك تعيين متغير البيئة JULIA_CPU_TARGET=generic لتعدد إصدارات ذاكرات الكائنات.

Flags that impact package image creation and selection

هذه هي علامات سطر الأوامر في جوليا التي تؤثر على اختيار التخزين المؤقت. سيتم رفض صور الحزمة التي تم إنشاؤها بعلامات مختلفة.

  • -g، --debug-info: يتطلب تطابقًا دقيقًا لأنه يغير توليد الشيفرة.
  • --check-bounds: يتطلب تطابقًا دقيقًا لأنه يغير توليد الشيفرة.
  • --inline: يتطلب تطابقًا دقيقًا لأنه يغير توليد الشيفرة.
  • --pkgimages: للسماح بالتشغيل بدون تمكين تخزين الكائنات.
  • -O، --optimize: رفض صور الحزم التي تم إنشاؤها لمستوى تحسين أقل، ولكن السماح بتحميل مستويات تحسين أعلى.