Habr AI→ المصدر

نماذج LLM تكتب Rust مع سبع فئات من الأخطاء الخفية التي لا يلتقطها المصرّف

استخدم مطور Claude وGPT وCursor لمدة ستة أشهر كمطور ثانٍ لـ Rust. وجمع سبعة أنواع من الأخطاء الخفية: lifetime laundering وMutex في async وDrop في المعاملات وuna

نماذج LLM تكتب Rust مع سبع فئات من الأخطاء الخفية التي لا يلتقطها المصرّف
المصدر: Habr AI. كولاج: Hamidun News.
◐ استمع للمقال

قضى أحد المطورين ستة أشهر باستخدام Claude و GPT و Cursor كمبرمج Rust متمرس في كود الإنتاج. خلال هذه الفترة، تابع الأخطاء بعناية وجمع قائمة مثيرة للإعجاب: سبع فئات من الأخطاء التي ترتكبها نماذج اللغات الكبيرة بشكل منهجي. الجزء الأكثر إزعاجاً — هذه الأخطاء تمر عبر المترجم واختبارات الوحدة وحتى محلل clippy الثابت. لكنها تنتهك سلامة الذاكرة أو تدمر معمارية التطبيق.

سبع فئات من الأخطاء المخفية

فيما يلي الفئات التي تكسرها نماذج اللغات الكبيرة مراراً وتكراراً:

  • Lifetime laundering — المتغيرات تعيش لفترة أطول مما يسمح به نظام أنواع Rust. هذا يؤدي إلى use-after-free في وقت التشغيل.
  • Mutex through await — قفل يحافظ على mutex أثناء الانتظار غير المتزامن. انسداد مضمون.
  • Drop في المعاملات — ينسون استدعاء drop عند الحاجة لإغلاق المورد (إغلاق ملف، الرجوع عن معاملة). تسريب الموارد.
  • Unaligned read — إلغاء إشارة الذاكرة مع محاذاة غير صحيحة. يتعطل المعالج على ARM، ينكسر بصمت على x86.
  • Async cancellation — إلغاء غير صحيح للعمليات غير المتزامنة. يترك حالات معلقة.
  • Orphan rule — انتهاك قاعدة الطفل عند تنفيذ traits. يتم الترجمة في مشروع واحد، ينكسر عند إضافة تبعية.
  • المصفوفات على المكدس — تخصيص مصفوفات ضخمة على المكدس (بدلاً من الكومة). تجاوز المكدس، segfault.

لماذا هذا خطير للإنتاج

النقطة الأساسية في Rust هي أن المترجم يكتشف الأخطاء أثناء التطوير، وليس في الإنتاج. لكن هذه الأخطاء السبعة تتجاوز المترجم — لأنها لا تنتهك الصيغة أو قواعد الكتابة الرسمية. نتيجة لذلك، يتم ترجمة الكود بدون تحذيرات، يمر اختبارات الوحدة، يتم تشغيله عبر clippy وينشر في الإنتاج. كل شيء ينكسر هناك، لكن الوقت انتهى. هذا أسوأ من خطأ مترجم صريح، لأن المطور واثق من أن كل شيء على ما يرام.

لماذا تكسر نماذج اللغات الكبيرة هذا

Rust هي لغة هامشية في مجموعة بيانات نماذج اللغات الكبيرة. Python و JavaScript و Java تمثل 70% من الكود الذي تم تدريب النماذج عليه. Rust — ربما 2-3%. علاوة على ذلك، تتطلب Rust فهماً عميقاً للملكية والعمر الافتراضي ونظام الأنواع، الذي تفهمه نماذج اللغات الكبيرة بشكل سطحي فقط. ترى النماذج الأنماط وتنسخها. تعرف أن 'تكتب عادة بهذه الطريقة'، لكنها لا تعرف لماذا تعمل في Java وتنكسر في Rust. لذا فهي تعيد إنتاج الأنماط بشكل غير صحيح، مما يخلق وهم الكود القابل للترجمة.

Rust تكسر نماذج اللغات الكبيرة لأنها لغة يجب أن تفكر بها، وليس فقط نسخ الأنماط.

الاستنتاجات العملية

لا ينصح المطور بالتخلي تماماً عن نماذج اللغات الكبيرة، لكنه يوصي بـ:

  • لا تعتمد على نماذج اللغات الكبيرة للأقسام الحرجة: التشفير، عمليات الذاكرة، التزامن
  • اطلب مراجعة رسمية للكود حتى لو لم يشتك المترجم
  • استخدم Miri — محاكي يكتشف السلوك غير المعرّف أثناء التطوير
  • تعلم Rust بشكل كافٍ لكتابة الكود بنفسك أو تكون قادراً على العثور على الأخطاء في كود نماذج اللغات الكبيرة

ماذا يعني هذا

نماذج اللغات الكبيرة هي أداة مفيدة، لكنها ليست بديلاً للبشر. في اللغات الديناميكية، تعمل بشكل جيد (Python و JavaScript)، لأن هناك قواعد أقل تحتاج إلى فهم حدسي. في Rust، عليك التحقق من كل سطر أو الاحتفاظ بالبشر في حلقة القرار. بالنسبة للأطر مثل Next.js أو Django، مساعد نموذج اللغة الكبيرة هو مسرع قوي. بالنسبة إلى Rust في الإنتاج، فهو أكثر من مسودة للمراجعة البشرية بدلاً من زميل كامل.

ZK
Hamidun News
أخبار الذكاء الاصطناعي بدون ضوضاء. اختيار تحريري يومي من أكثر من 400 مصدر. منتج من جمال حميدون، رئيس الذكاء الاصطناعي في Alpina Digital.
ما رأيك؟
جارٍ تحميل التعليقات…