القيود
تطوير البرامج على بلوكتشين سولانا يحتوي على بعض القيود المتأصلة المرتبطة بها. فيما يلي قائمة بالقيود الشائعة التي قد تواجهها.
مكتبات Rust
نظرًا لأن برامج Rust التي تعمل على السلسلة يجب أن تكون حتمية أثناء تشغيلها في بيئة محدودة الموارد وأحادية المسار، فإنها تواجه بعض القيود على مختلف المكتبات.
تدعم برامج Rust التي تعمل على السلسلة معظم مكتبات Rust مثل libstd وlibcore وliballoc، بالإضافة إلى العديد من المكتبات الخارجية.
هناك بعض القيود لأن هذه البرامج تعمل في بيئة محدودة الموارد وأحادية المسار، بالإضافة إلى كونها حتمية:
- لا يمكن الوصول إلى
rand
std::fs
std::net
std::future
std::process
std::sync
std::task
std::thread
std::time
- وصول محدود إلى:
std::hash
std::os
- Bincode مكلف للغاية من حيث الدورات وعمق الاستدعاء ويجب تجنبه
- يجب تجنب تنسيق السلاسل النصية لأنه أيضًا مكلف من الناحية الحسابية.
- لا يوجد دعم لـ
println!
وprint!
، استخدمmsg!
بدلاً من ذلك. - تفرض بيئة التشغيل حدًا على عدد التعليمات التي يمكن للبرنامج تنفيذها أثناء معالجة تعليمة واحدة. انظر ميزانية الحوسبة لمزيد من المعلومات.
ميزانية الحوسبة
لمنع إساءة استخدام موارد الحوسبة في البلوكتشين، يتم تخصيص ميزانية حوسبة لكل معاملة. تجاوز ميزانية الحوسبة هذه سيؤدي إلى فشل المعاملة.
راجع وثائق قيود الحوسبة لمزيد من التفاصيل المحددة.
عمق مكدس الاستدعاء - خطأ CallDepthExceeded
برامج سولانا مقيدة بالتشغيل السريع، ولتسهيل ذلك، يتم تقييد عمق مكدس استدعاء البرنامج إلى 64 إطارًا كحد أقصى.
عندما يتجاوز البرنامج حد عمق مكدس الاستدعاء المسموح به، سيتلقى خطأ
CallDepthExceeded
عمق استدعاء CPI - خطأ CallDepth
تسمح الاستدعاءات بين البرامج (Cross-program invocations) للبرامج باستدعاء برامج
أخرى مباشرة، ولكن العمق مقيد حاليًا بـ 4
عندما يتجاوز البرنامج عمق استدعاء بين البرامج المسموح به،
سيتلقى خطأ CallDepth
دعم أنواع Float في Rust
تدعم البرامج مجموعة فرعية محدودة من عمليات الفاصلة العائمة (float) في Rust. إذا حاول البرنامج استخدام عملية فاصلة عائمة غير مدعومة، فسيبلغ وقت التشغيل عن خطأ رمز غير محلول.
يتم تنفيذ عمليات الفاصلة العائمة عبر مكتبات برمجية، وتحديداً الوظائف المدمجة للفاصلة العائمة في LLVM. نظرًا لأنها تُنفذ برمجيًا، فإنها تستهلك وحدات حوسبة أكثر من عمليات الأعداد الصحيحة. بشكل عام، يوصى باستخدام عمليات النقطة الثابتة حيثما أمكن ذلك.
ستقوم اختبارات مكتبة الرياضيات في Solana Program Library بالإبلاغ عن أداء بعض العمليات الرياضية. لتشغيل الاختبار، قم بمزامنة المستودع وتشغيل:
cargo test-sbf -- --nocapture --test-threads=1
تظهر النتائج الحديثة أن عمليات الفاصلة العائمة تستغرق تعليمات أكثر مقارنة بمكافئاتها من الأعداد الصحيحة. قد تختلف تطبيقات النقطة الثابتة ولكنها ستكون أيضًا أقل من مكافئات الفاصلة العائمة:
u64 f32Multiply 8 176Divide 9 219
البيانات القابلة للكتابة الثابتة
لا تدعم الكائنات المشتركة للبرنامج البيانات المشتركة القابلة للكتابة. تتم مشاركة البرامج بين عمليات تنفيذ متوازية متعددة باستخدام نفس الشفرة والبيانات المشتركة للقراءة فقط. هذا يعني أنه لا ينبغي للمطورين تضمين أي متغيرات ثابتة قابلة للكتابة أو متغيرات عامة في البرامج. في المستقبل، يمكن إضافة آلية النسخ عند الكتابة لدعم البيانات القابلة للكتابة.
القسمة الموقعة
لا تدعم مجموعة تعليمات SBF القسمة الموقعة.
Is this page helpful?