لماذا في 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!` — أيضاً بعلامة تعجب. هل هذه كلها ماكرو؟ متى أحتاج لاستخدام علامة التعجب ومتى لا؟
اشرحوا لي، من فضلكم، بكلمات بسيطة للمبتدئ.