الأسئلة الشائعة
الأسئلة الشائعة
Section titled “الأسئلة الشائعة”أسئلة عامة
Section titled “أسئلة عامة”ما هي لغة كنوز؟
Section titled “ما هي لغة كنوز؟”كنوز هي لغة برمجة عربية حديثة مصممة لتكون:
- سهلة التعلم: بناء جملة واضح وبديهي
- قوية الأداء: تُترجم إلى كود آلة عبر LLVM
- آمنة: نظام أنواع قوي يمنع الكثير من الأخطاء
- عربية بالكامل: الكلمات المفتاحية والتوثيق بالعربية
ما هي الأنظمة المدعومة؟
Section titled “ما هي الأنظمة المدعومة؟”- Linux (x86_64, aarch64)
- macOS (x86_64, aarch64/Apple Silicon)
- Windows (x86_64)
هل كنوز مجانية؟
Section titled “هل كنوز مجانية؟”نعم، كنوز مفتوحة المصدر ومجانية للاستخدام.
التثبيت
Section titled “التثبيت”كيف أثبت كنوز؟
Section titled “كيف أثبت كنوز؟”# Linux/macOScurl -fsSL https://sh.knoz.dev | sh
# Windows - حمّل من الموقعظهر خطأ “knoz: command not found”
Section titled “ظهر خطأ “knoz: command not found””تأكد من إضافة كنوز إلى PATH:
# أضف هذا إلى ~/.bashrc أو ~/.zshrcexport PATH="$HOME/.knoz/bin:$PATH"
# ثم أعد تحميل الملفsource ~/.bashrcكيف أحدّث كنوز؟
Section titled “كيف أحدّث كنوز؟”knoz تحديث# أوcurl -fsSL https://sh.knoz.dev | shكتابة الكود
Section titled “كتابة الكود”ما هو امتداد ملفات كنوز؟
Section titled “ما هو امتداد ملفات كنوز؟”الامتداد الرسمي هو .كنز (أو .knoz للتوافق).
هل يمكن استخدام أسماء متغيرات إنجليزية؟
Section titled “هل يمكن استخدام أسماء متغيرات إنجليزية؟”نعم، كنوز تدعم الأحرف العربية والإنجليزية:
دع counter = 10; // إنجليزي - يعملدع عداد = 10; // عربي - يعملدع mixed_متغير = 10; // مختلط - يعملكيف أطبع نص مع متغيرات؟
Section titled “كيف أطبع نص مع متغيرات؟”دع اسم = "أحمد";دع عمر = 25;
// استخدم ماكرو الطباعة مع {}اطبع_سطر!("الاسم: {} والعمر: {}", اسم, عمر);لماذا لا يتغير المتغير؟
Section titled “لماذا لا يتغير المتغير؟”تحتاج متغير لتعريف متغير قابل للتغيير:
// خطأ - ثابت افتراضياًدع س = 5;س = 10; // ❌ خطأ!
// صحيحدع متغير س = 5;س = 10; // ✅ يعملالأنواع
Section titled “الأنواع”ما الفرق بين صحيح و ص64؟
Section titled “ما الفرق بين صحيح و ص64؟”| النوع | الحجم | الاستخدام |
|---|---|---|
صحيح | يعتمد على النظام | للاستخدام العام |
ص64 | 64 بت دائماً | للأعداد الكبيرة |
كيف أحول بين الأنواع؟
Section titled “كيف أحول بين الأنواع؟”// صحيح إلى نصدع نص = صحيح_لنص(42);
// عشري إلى صحيح (يقطع الكسور)دع ص = عشري_لصحيح(3.7); // = 3ما الفرق بين اختياري و نتيجة؟
Section titled “ما الفرق بين اختياري و نتيجة؟”// اختياري: قيمة موجودة أو لااختياري<صحيح> // بعض(42) أو عدم
// نتيجة: نجاح أو فشل مع سببنتيجة<صحيح, نص> // موافق(42) أو فشل("خطأ")الهياكل والتعدادات
Section titled “الهياكل والتعدادات”كيف أنشئ “constructor”؟
Section titled “كيف أنشئ “constructor”؟”هيكل شخص { اسم: نص, عمر: صحيح}
نفذ شخص { دالة جديد(اسم: نص, عمر: صحيح) -> ذاتي { أرجع ذاتي { اسم: اسم, عمر: عمر }; }}
// الاستخدامدع ش = شخص::جديد("أحمد", 25);ما معنى ذاتي؟
Section titled “ما معنى ذاتي؟”ذاتي(بحرف صغير): المثيل الحاليذاتي(في نوع الإرجاع): نوع الهيكل نفسه
نفذ شخص { دالة جديد() -> ذاتي { // ذاتي = شخص أرجع ذاتي { ... }; }
دالة اسم(&ذاتي) -> نص { // ذاتي = المثيل أرجع ذاتي.اسم; }}معالجة الأخطاء
Section titled “معالجة الأخطاء”متى أستخدم جرب/التقط ومتى نتيجة؟
Section titled “متى أستخدم جرب/التقط ومتى نتيجة؟”نتيجة: للأخطاء المتوقعة والقابلة للمعالجةجرب/التقط: للأخطاء الاستثنائية
// نتيجة - للعمليات التي قد تفشل بشكل طبيعيدالة قسمة(أ: صحيح, ب: صحيح) -> نتيجة<صحيح, نص> { إذا ب == 0 { أرجع فشل("قسمة على صفر"); } أرجع موافق(أ / ب);}
// جرب/التقط - للأخطاء الاستثنائيةجرب { اتصل_بالخادم();} التقط خ { اطبع("فشل الاتصال");}التزامن
Section titled “التزامن”كيف أنشئ خيطاً؟
Section titled “كيف أنشئ خيطاً؟”دع خيط = أطلق || { // كود الخيط اطبع("في خيط منفصل");};
// انتظار انتهاء الخيطخيط.انضم();كيف أشارك بيانات بين الخيوط؟
Section titled “كيف أشارك بيانات بين الخيوط؟”استخدم قفل_تبادلي أو قناة:
// قفل تبادليدع قفل = قفل_تبادلي(0);
أطلق || { دع متغير م = قفل.أقفل(); *م += 1;};
// قناةدع (مرسل, مستقبل) = قناة();
أطلق || { مرسل.أرسل(42);};
دع قيمة = مستقبل.استقبل();الأداء
Section titled “الأداء”كيف أجعل برنامجي أسرع؟
Section titled “كيف أجعل برنامجي أسرع؟”-
استخدم البناء للإنتاج:
Terminal window knoz ابنِ --release -
تجنب النسخ غير الضروري:
// بطيء - ينسخ البياناتدالة معالجة(بيانات: متجه<صحيح>) { }// أسرع - يستخدم مرجعدالة معالجة(بيانات: &متجه<صحيح>) { } -
استخدم الخوارزميات المناسبة:
- القاموس للبحث السريع
- البحث الثنائي للبيانات المرتبة
لماذا برنامجي بطيء؟
Section titled “لماذا برنامجي بطيء؟”تحقق من:
- هل تستخدم
--releaseفي البناء؟ - هل هناك حلقات غير ضرورية؟
- هل تستخدم هياكل البيانات المناسبة؟
حل المشكلات
Section titled “حل المشكلات””خطأ: النوع غير معروف”
Section titled “”خطأ: النوع غير معروف””تأكد من تعريف النوع أو استيراده:
// خطأ إذا لم يُعرَّف هيكلدع ش: شخص = ...; // ❌
// عرّف الهيكل أولاًهيكل شخص { }دع ش: شخص = ...; // ✅“خطأ: لا يمكن تغيير قيمة ثابتة”
Section titled ““خطأ: لا يمكن تغيير قيمة ثابتة””أضف متغير:
دع متغير س = 5; // بدلاً من: دع س = 5;“خطأ: الاستعارة تتعارض”
Section titled ““خطأ: الاستعارة تتعارض””لا يمكن وجود مرجع قابل للتغيير ومرجع آخر في نفس الوقت:
دع متغير س = 5;دع مرجع١ = &س;دع مرجع٢ = &متغير س; // ❌ خطأ!
// الحل: أنهِ استخدام المرجع الأول أولاًدع متغير س = 5;{ دع مرجع١ = &س; // استخدم مرجع١}دع مرجع٢ = &متغير س; // ✅ يعملالبرنامج يتوقف بدون سبب
Section titled “البرنامج يتوقف بدون سبب”تحقق من:
- حلقات لا نهائية بدون
أوقف - استدعاءات متكررة بدون حالة توقف
- انتظار على قناة فارغة