Rust: مشكلة معلومات التبعية للوحدات النمطية التي تم تحميلها من الملفات ذات `` modname ''

تم إنشاؤها على ٦ أغسطس ٢٠١٧  ·  1تعليق  ·  مصدر: rust-lang/rust

كيف تتكاثر:

  • قم بإنشاء مشروع Cargo مع شجرة مصدر تبدو هكذا
.
├── lib.rs
└── modname.rs

و lib.rs يبدو هكذا

mod modname;
  • تشغيل cargo build
  • إضافة دليل وملف جديدين حتى تصبح شجرة المصدر
.
├── lib.d
├── lib.rs
├── modname
│   └── mod.rs
└── modname.rs
  • قم بتشغيل cargo build مرة أخرى

من الناحية النظرية ، يجب أن يبدأ cargo build تشغيل البنية والإبلاغ عن الخطأ

error[E0584]: file for module `modname` found at both modname.rs and modname\mod.rs

ولكن لم يتم بدء البناء لأن شركة Cargo تعتقد أن كل شيء محدث.

يستخدم Cargo depinfo الذي تم إنتاجه بواسطة rustc للتحقق من حداثة الملف ، وفي هذا المثال ، يبدو depinfo الذي تم إنتاجه أثناء الإنشاء الأول هكذا

lib.d: lib.rs modname.rs

lib.rs:
modname.rs:

، لذلك تتحقق Cargo من lib.rs و modname.rs للحداثة ، لكنها لا تعرف أي شيء modname/mod.rs .


يمكن إصلاح ذلك عن طريق إصدار Depinfo إضافي - modname/mod.rs لكل modname.rs و modname.rs لكل modname/mod.rs .
تكمن المشكلة في أنها ستتطلب أنظمة بناء (بما في ذلك Cargo) تقضي ما يقرب من ضعف الوقت في التحقق من حداثة الملف في عمليات إعادة البناء لجميع المشاريع ، حتى لو لم يفعل أي منها الجنون الموصوف في فقرة الاستنساخ.
لذلك ، قد يكون من المعقول إغلاق هذا باسم WONTFIX.


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

C-bug I-needs-decision T-lang

التعليق الأكثر فائدة

يمكن أن يبدو إصلاح "محامي اللغة" للمشكلة

إذا كان كل من modname.rs و modname\mod.rs كلاهما موجودًا ، فلن يتم تحديد أي منهما سيتم استخدامه ، فسيتم الإبلاغ عن خطأ على أساس أفضل جهد.

>كل التعليقات

يمكن أن يبدو إصلاح "محامي اللغة" للمشكلة

إذا كان كل من modname.rs و modname\mod.rs كلاهما موجودًا ، فلن يتم تحديد أي منهما سيتم استخدامه ، فسيتم الإبلاغ عن خطأ على أساس أفضل جهد.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات