القيود
تطوير البرامج على بلوكتشين سولانا يحتوي على بعض القيود المتأصلة المرتبطة بها. فيما يلي قائمة بالقيود الشائعة التي قد تواجهها.
مكتبات 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
تسمح استدعاءات البرامج المتقاطعة للبرامج باستدعاء برامج أخرى مباشرة، ولكن العمق
مقيد حاليًا بـ 4
عندما يتجاوز البرنامج عمق استدعاء البرامج المتقاطعة المسموح
به، سيتلقى خطأ CallDepth
دعم أنواع Float في Rust
تدعم البرامج مجموعة فرعية محدودة من عمليات الفاصلة العائمة في Rust. إذا حاول البرنامج استخدام عملية فاصلة عائمة غير مدعومة، فسيبلغ وقت التشغيل عن خطأ رمز غير محلول.
يتم تنفيذ عمليات الفاصلة العائمة عبر مكتبات برمجية، وتحديداً الدوال المدمجة للفاصلة العائمة في LLVM. نظرًا لأنها محاكاة برمجية، فإنها تستهلك وحدات حسابية أكثر من العمليات الصحيحة. بشكل عام، يوصى باستخدام عمليات النقطة الثابتة حيثما أمكن ذلك.
ستقوم اختبارات مكتبة الرياضيات في سولانا بالإبلاغ عن أداء بعض العمليات الرياضية. لتشغيل الاختبار، قم بمزامنة المستودع وتشغيل:
cargo test-sbf -- --nocapture --test-threads=1
تظهر النتائج الحديثة أن عمليات الفاصلة العائمة تستغرق تعليمات أكثر مقارنة بالعمليات المكافئة للأعداد الصحيحة. قد تختلف تطبيقات النقطة الثابتة ولكنها ستكون أيضًا أقل من مكافئات الفاصلة العائمة:
u64 f32Multiply 8 176Divide 9 219
البيانات القابلة للكتابة الثابتة
لا تدعم كائنات البرامج المشتركة البيانات المشتركة القابلة للكتابة. يتم مشاركة البرامج بين عمليات تنفيذ متوازية متعددة باستخدام نفس الشفرة والبيانات المشتركة للقراءة فقط. هذا يعني أنه لا ينبغي للمطورين تضمين أي متغيرات ثابتة قابلة للكتابة أو متغيرات عامة في البرامج. في المستقبل، يمكن إضافة آلية النسخ عند الكتابة لدعم البيانات القابلة للكتابة.
القسمة الموقعة
لا تدعم مجموعة تعليمات SBF القسمة الموقعة.
Is this page helpful?