Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

الفلسفة: لماذا «مصدر الحقيقة» أولًا

ماذا ستتعلّم: المبدأ المعماريّ الأهمّ في لغة ص — البيانات تقود الكود، لا العكس.

المشكلة التي يحلّها

في المُصرِّفات التقليديّة، تتوزّع «حقائق اللغة» (الكلمات المفتاحيّة، العوامل وأسبقيّتها، الأنواع، رسائل الأخطاء، الدوال المضمنة) عبر عشرات الملفّات المكتوبة يدويًّا. النتيجة: تباعد — يُضاف عاملٌ في المعجمي ويُنسى في المنسّق أو LSP أو التوثيق.

الحلّ: مصدر موحّد مدفوع بالبيانات

لغة ص تعتمد language-truth/ كمصدر واحد (YAML) لكل بيانات اللغة، ويُولَّد منه كود C++ والتوثيق آليًّا:

flowchart LR
  Y["language-truth/*.yaml<br/>(المصدر الوحيد)"] --> GEN["scripts/codegen/gen_*.py<br/>(المولّد)"]
  GEN --> CPP["shared/*/generated/*.{h,cpp}<br/>(مُولَّد — لا يُحرَّر)"]
  GEN --> DOC["توثيق + مخطّطات مُولَّدة"]
  Y --> TOOLS["LSP · formatter · sadinfo · pkg"]
  CPP --> BUILD["بناء C++"]

القاعدة الذهبية (SoT-First)

أي تغيير في بيانات اللغة يبدأ من YAML — لا من كود C++ المُولَّد.

  • الملفّات تحت */generated/ مُولَّدة آليًّا — تحريرها يدويًّا يُمحى عند البناء التالي.
  • لكنها متتبَّعة في git (ليست build-only) — ضمّنها في نفس الـcommit مع YAML (يجب أن يتطابقا).

لماذا هذا «أكثر تطوّرًا» من rustc؟

  • rustc: قواعده وبياناته موصوفة نثرًا في الدليل + موزّعة في الكود.
  • لغة ص: مصدر منظَّم وقابل للتحقّق آليًّا (مخطّطات JSON في _schemas/)، يولّد الكود والتوثيق، ويُفحَص تماسكه في CI. يمتدّ حتى قواعد النحو نفسها (راجع قواعد المحلل SoT) — طبقة لا يملكها معظم المُصرِّفات.

ماذا يغطّي language-truth/؟

كلمات مفتاحيّة · عوامل (وأسبقيّاتها) · أنواع · توجيهات @ · رموز أخطاء ورسائلها · دوال مضمنة ووحدات · قواعد إنتاج النحو · تراكيب اللغة. → التفصيل.


اقرأ بعده: language-truth/.