Avatar ·

لماذا في Rust تحتوي println! والماكرو الأخرى على علامة تعجب؟

مرحباً بالجميع! بدأت تعلم Rust منذ أسبوع حرفياً وواجهت سؤالاً يحيرني قليلاً. لماذا في Rust عند الطباعة على الكونسول نكتب `println!` بعلامة تعجب؟ أنا معتاد على Python وJava وC++، حيث استدعاء الدوال دائماً بدون علامة تعجب، مثلاً `print()` أو `System.out.println()` أو `std::cout <<`. نظرت إلى الأمثلة — في كل مكان يكتبون `println!("Hello, world!");`. جربت أن أكتب فقط `println("Hello");` — فأعطاني المترجم خطأ: ``` error[E0423]: expected function, found macro `println` --> src/main.rs:2:5 | 2 | println("Hello"); | ^^^^^^^ not a function ``` لماذا هكذا؟ هل هذه دالة خاصة؟ أم أنها ميزة في اللغة؟ قرأت أن في Rust هناك ماكرو، لكني لا أفهم تماماً كيف تختلف عن الدوال العادية. وأيضاً: `format!` و `vec!` — أيضاً بعلامة تعجب. هل هذه كلها ماكرو؟ متى أحتاج لاستخدام علامة التعجب ومتى لا؟ اشرحوا لي، من فضلكم، بكلمات بسيطة للمبتدئ.