تخطَّ إلى المحتوى

الأسئلة الشائعة

كنوز هي لغة برمجة عربية حديثة مصممة لتكون:

  • سهلة التعلم: بناء جملة واضح وبديهي
  • قوية الأداء: تُترجم إلى كود آلة عبر LLVM
  • آمنة: نظام أنواع قوي يمنع الكثير من الأخطاء
  • عربية بالكامل: الكلمات المفتاحية والتوثيق بالعربية

ما هي الأنظمة المدعومة؟

Section titled “ما هي الأنظمة المدعومة؟”
  • Linux (x86_64, aarch64)
  • macOS (x86_64, aarch64/Apple Silicon)
  • Windows (x86_64)

نعم، كنوز مفتوحة المصدر ومجانية للاستخدام.


Terminal window
# Linux/macOS
curl -fsSL https://sh.knoz.dev | sh
# Windows - حمّل من الموقع

ظهر خطأ “knoz: command not found”

Section titled “ظهر خطأ “knoz: command not found””

تأكد من إضافة كنوز إلى PATH:

Terminal window
# أضف هذا إلى ~/.bashrc أو ~/.zshrc
export PATH="$HOME/.knoz/bin:$PATH"
# ثم أعد تحميل الملف
source ~/.bashrc
Terminal window
knoz تحديث
# أو
curl -fsSL https://sh.knoz.dev | sh

ما هو امتداد ملفات كنوز؟

Section titled “ما هو امتداد ملفات كنوز؟”

الامتداد الرسمي هو .كنز (أو .knoz للتوافق).

هل يمكن استخدام أسماء متغيرات إنجليزية؟

Section titled “هل يمكن استخدام أسماء متغيرات إنجليزية؟”

نعم، كنوز تدعم الأحرف العربية والإنجليزية:

دع counter = 10; // إنجليزي - يعمل
دع عداد = 10; // عربي - يعمل
دع mixed_متغير = 10; // مختلط - يعمل

كيف أطبع نص مع متغيرات؟

Section titled “كيف أطبع نص مع متغيرات؟”
دع اسم = "أحمد";
دع عمر = 25;
// استخدم ماكرو الطباعة مع {}
اطبع_سطر!("الاسم: {} والعمر: {}", اسم, عمر);

لماذا لا يتغير المتغير؟

Section titled “لماذا لا يتغير المتغير؟”

تحتاج متغير لتعريف متغير قابل للتغيير:

// خطأ - ثابت افتراضياً
دع س = 5;
س = 10; // ❌ خطأ!
// صحيح
دع متغير س = 5;
س = 10; // ✅ يعمل

النوعالحجمالاستخدام
صحيحيعتمد على النظامللاستخدام العام
ص6464 بت دائماًللأعداد الكبيرة
// صحيح إلى نص
دع نص = صحيح_لنص(42);
// عشري إلى صحيح (يقطع الكسور)
دع ص = عشري_لصحيح(3.7); // = 3

ما الفرق بين اختياري و نتيجة؟

Section titled “ما الفرق بين اختياري و نتيجة؟”
// اختياري: قيمة موجودة أو لا
اختياري<صحيح> // بعض(42) أو عدم
// نتيجة: نجاح أو فشل مع سبب
نتيجة<صحيح, نص> // موافق(42) أو فشل("خطأ")

هيكل شخص {
اسم: نص,
عمر: صحيح
}
نفذ شخص {
دالة جديد(اسم: نص, عمر: صحيح) -> ذاتي {
أرجع ذاتي {
اسم: اسم,
عمر: عمر
};
}
}
// الاستخدام
دع ش = شخص::جديد("أحمد", 25);
  • ذاتي (بحرف صغير): المثيل الحالي
  • ذاتي (في نوع الإرجاع): نوع الهيكل نفسه
نفذ شخص {
دالة جديد() -> ذاتي { // ذاتي = شخص
أرجع ذاتي { ... };
}
دالة اسم(&ذاتي) -> نص { // ذاتي = المثيل
أرجع ذاتي.اسم;
}
}

متى أستخدم جرب/التقط ومتى نتيجة؟

Section titled “متى أستخدم جرب/التقط ومتى نتيجة؟”
  • نتيجة: للأخطاء المتوقعة والقابلة للمعالجة
  • جرب/التقط: للأخطاء الاستثنائية
// نتيجة - للعمليات التي قد تفشل بشكل طبيعي
دالة قسمة(أ: صحيح, ب: صحيح) -> نتيجة<صحيح, نص> {
إذا ب == 0 {
أرجع فشل("قسمة على صفر");
}
أرجع موافق(أ / ب);
}
// جرب/التقط - للأخطاء الاستثنائية
جرب {
اتصل_بالخادم();
} التقط خ {
اطبع("فشل الاتصال");
}

دع خيط = أطلق || {
// كود الخيط
اطبع("في خيط منفصل");
};
// انتظار انتهاء الخيط
خيط.انضم();

كيف أشارك بيانات بين الخيوط؟

Section titled “كيف أشارك بيانات بين الخيوط؟”

استخدم قفل_تبادلي أو قناة:

// قفل تبادلي
دع قفل = قفل_تبادلي(0);
أطلق || {
دع متغير م = قفل.أقفل();
*م += 1;
};
// قناة
دع (مرسل, مستقبل) = قناة();
أطلق || {
مرسل.أرسل(42);
};
دع قيمة = مستقبل.استقبل();

  1. استخدم البناء للإنتاج:

    Terminal window
    knoz ابنِ --release
  2. تجنب النسخ غير الضروري:

    // بطيء - ينسخ البيانات
    دالة معالجة(بيانات: متجه<صحيح>) { }
    // أسرع - يستخدم مرجع
    دالة معالجة(بيانات: &متجه<صحيح>) { }
  3. استخدم الخوارزميات المناسبة:

    • القاموس للبحث السريع
    • البحث الثنائي للبيانات المرتبة

تحقق من:

  • هل تستخدم --release في البناء؟
  • هل هناك حلقات غير ضرورية؟
  • هل تستخدم هياكل البيانات المناسبة؟

”خطأ: النوع غير معروف”

Section titled “”خطأ: النوع غير معروف””

تأكد من تعريف النوع أو استيراده:

// خطأ إذا لم يُعرَّف هيكل
دع ش: شخص = ...; // ❌
// عرّف الهيكل أولاً
هيكل شخص { }
دع ش: شخص = ...; // ✅

“خطأ: لا يمكن تغيير قيمة ثابتة”

Section titled ““خطأ: لا يمكن تغيير قيمة ثابتة””

أضف متغير:

دع متغير س = 5; // بدلاً من: دع س = 5;

“خطأ: الاستعارة تتعارض”

Section titled ““خطأ: الاستعارة تتعارض””

لا يمكن وجود مرجع قابل للتغيير ومرجع آخر في نفس الوقت:

دع متغير س = 5;
دع مرجع١ = &س;
دع مرجع٢ = &متغير س; // ❌ خطأ!
// الحل: أنهِ استخدام المرجع الأول أولاً
دع متغير س = 5;
{
دع مرجع١ = &س;
// استخدم مرجع١
}
دع مرجع٢ = &متغير س; // ✅ يعمل

البرنامج يتوقف بدون سبب

Section titled “البرنامج يتوقف بدون سبب”

تحقق من:

  • حلقات لا نهائية بدون أوقف
  • استدعاءات متكررة بدون حالة توقف
  • انتظار على قناة فارغة