كيف تتكاثر:
.
├── 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.
قد تكون المشكلة في حد ذاتها مقصورة على فئة معينة ، لكنني أعتقد أنها مثيرة للاهتمام باعتبارها لمحة عن عالم هياكل المشروع المستنتج من نظام الملفات ، والذي تتم مناقشته حاليًا في العديد من مقترحات إصلاح نظام الوحدات النمطية.
يمكن أن يبدو إصلاح "محامي اللغة" للمشكلة
إذا كان كل من
modname.rs
وmodname\mod.rs
كلاهما موجودًا ، فلن يتم تحديد أي منهما سيتم استخدامه ، فسيتم الإبلاغ عن خطأ على أساس أفضل جهد.
التعليق الأكثر فائدة
يمكن أن يبدو إصلاح "محامي اللغة" للمشكلة