Package Images
توفر حزمة جوليا images ذاكرات كائن (كود أصلي) لحزم جوليا. إنها مشابهة لـ system image في جوليا وتدعم العديد من نفس الميزات. في الواقع، تنسيق التسلسل الأساسي هو نفسه، وصورة النظام هي الصورة الأساسية التي تُبنى عليها صور الحزم.
High-level overview
حزم الصور هي مكتبات مشتركة تحتوي على كل من الشيفرة والبيانات. مثل ملفات التخزين المؤقت .ji
، يتم إنشاؤها لكل حزمة. يحتوي قسم البيانات على كل من البيانات العالمية (المتغيرات العالمية في الحزمة) بالإضافة إلى البيانات الوصفية اللازمة حول ما هي الطرق والأنواع المعرفة بواسطة الحزمة. يحتوي قسم الشيفرة على كائنات أصلية تخزن الناتج النهائي لمجمع جوليا القائم على LLVM.
يمكن استخدام خيار سطر الأوامر --pkgimages=no
لإيقاف تخزين الكائنات مؤقتًا لهذه الجلسة. لاحظ أن هذا يعني أنه من المحتمل أن يتم إعادة توليد ملفات التخزين المؤقت. انظر JULIA_MAX_NUM_PRECOMPILE_FILES
للحد الأقصى من المتغيرات التي تخزنها جوليا بشكل افتراضي.
بينما تظهر صور الحزمة كأنها مكتبات مشتركة أصلية، إلا أنها ليست سوى تقريبات لذلك. لن تتمكن من الربط ضدها من برنامج أصلي ويجب تحميلها من جوليا.
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
: رفض صور الحزم التي تم إنشاؤها لمستوى تحسين أقل، ولكن السماح بتحميل مستويات تحسين أعلى.