العرضar

Design notes

Commandments#

تسع قواعد تجعل فيبر يبدو كفيبر.

هذه هي قوانين التصميم التي تحدد شخصية فيبر. يمكن أن يتطور التركيب النحوي وتُضاف الميزات، ولكن التغييرات يجب أن تحافظ على هذه المبادئ. البرنامج الذي يخالفها قد يكون فيبر صحيحًا، لكنه لا يبدو كفيبر.

تنطبق الوصايا على كل مستوى — من القواعد النحوية نفسها وصولًا إلى كيفية تسمية واجهات المكتبة المعيارية. إنها السبب في أن القارئ يستطيع تمييز مصدر فيبر بنظرة واحدة، بغض النظر عن اللغة البشرية التي تُعرض بها الكلمات المفتاحية أو المنصة المستهدفة التي يُصرَّف إليها الكود.

١. الأنواع قبل الأسماء#

تُقرأ التصريحات من الشكل إلى الربط. يأتي النوع أولًا لأن القارئ يحتاج أن يعرف ما نوع الشيء قبل أن يخبره الاسم أي شيء هو. يتوافق هذا مع اللغات التي يقرأ ترتيبها النحوي من الفئة إلى الحالة — الصينية، الهندية، العربية — ويُنتج تصريحات تُمسح بشكل موحد.

# Type before name in every declaration
textus nomen
numerus aetas
functio salve(textus name) → textus

٢. الآلي فوق السحري#

يجب أن تعني البنية نفسها الشيء نفسه في كل مكان. إذا احتاج القارئ سياقًا بعيدًا ليعرف ما يفعله رمز، فالتركيب مشبوه. تفضل فيبر الاستدلال الصريح والمحلي — موقع التصريح يحمل معلومات كافية لفهم ما سيحدث في موقع الاستخدام.

# The meaning of a call is determined by the function's signature,
# not by invisible trait resolution or implicit conversions.
دالة duplica(عدد n)  عدد {
    أعد n * 2
}

٣. الرموز تحمل البنية#

يستخدم المعنى البنيوي والمعاملاتي رموزًا، لا كلمات: للربط، لنوع الإرجاع، للخروج بخطأ، ergo لجسم الفرع المختصر، للمساواة، لأنواع الاتحاد. الرموز عالمية — لا تُترجم أبدًا ولا يتغير معناها أبدًا عبر العروض. يرى القارئ التايلندي والقارئ الفرنسي الرموز نفسها، حتى لو اختلفت الكلمات المفتاحية حولها.

٤. اللاتينية تحمل السلوك#

الكلمات للتصريحات، والجمل، ودورة الحياة، والقصد السلوكي: دالة، صنف، ثابت، متغير، أعد، التقط. هذه قابلة للربط عبر حزم لغة القارئ — إنها المفردات، لا القواعد. الخيار اللاتيني ليس عن تفوق اللاتينية؛ إنه عن اختيار مصدر كلاسيكي واحد متسق بحيث تنتمي كل الكلمات المفتاحية إلى السجل نفسه ولا تتمتع أي كلمة مفتاحية بامتياز كونها لغة التنفيذ التي كُتب بها.

٥. التصريف يحمل الزمن والتدفق#

عندما يمكن للمنطق الجذري نفسه أن يعمل تزامنيًا، أو لا تزامنيًا، أو كمولّد، يجب أن يحمل الشكل المصرَّف للفعل نمط التنفيذ ذاك. أزواج الملكية — التعديل في المكان مقابل النسخ للخارج — تستخدم أشكالًا مرتبطة من الجذر نفسه. هذا هو مبدأ التصريف (morphologia). تتبع المكتبة المعيارية (نورما) هذه الاتفاقية لكل أسماء الدوال: lege (قراءة تزامنية) مقابل leget (قراءة لا تزامنية)، adde (تعديل في المكان) مقابل addita (إرجاع نسخة جديدة). لا يفرض المصرّف التصريفات ولا يشتقها — إنها سياسة تسمية، لا ميزة لغة.

٦. إشارة واحدة، مهمة واحدة#

قد يكون للرمز أو الكلمة المفتاحية بدائل دقيقة، لكن لا ينبغي أن يحمل معاني غير مرتبطة. يجب أن تشير البدائل إلى مفهوم قانوني واحد. هذا هو المبدأ الذي يدفع تقسيم فيبر بين (ربط وقت التشغيل) و = (شكل الحقل البنيوي) — معظم اللغات تدمج كليهما في =، لكن هذا التحميل الزائد يُخفي ما إذا كان السطر عملية تدفق بيانات أم تعريفًا على مستوى النوع.

# ← is always runtime flow
fixum numerus count ← 0
count ← count + 1

# = is always structural shape inside Type { }
fixum _ p ← Point {
    x = 10,
    y = 20
}

٧. تدفق وقت التشغيل صريح#

يستخدم الربط وقت التشغيل وإعادة الإسناد والتعديل ؛ ويستخدم التعريف البنيوي =. يستطيع القارئ الذي يمسح المصدر رؤية كل عملية تدفق بيانات فورًا: كل هو حدث وقت تشغيل. لا يوجد غموض نحوي حول ما إذا كانت = معينة تعني "خزّن في هذا المتغير" أم "عرّف هذا الحقل."

٨. الغياب مُنوَّع#

تُكتب أنواع القيم القابلة للإلغاء كاتحادات: T ∪ nihil. تستخدم فتحات التصريح الاختيارية علامات بعد الاسم: sponte. هذان مفهومان مختلفان — قيمة قد تكون غائبة مقابل *فتحة قد يحذفها المستدعي* — وتبقيهما فيبر منفصلين نحوياً بدلًا من دمج كليهما في T? أو Option<T>.

# Absence in a value: T ∪ nihil
functio find(textus key) → numerus ∪ nihil

# Omission at declaration: sponte
functio connect(textus host, numerus port sponte) → vacuum

٩. المصرّف لا يخمن لإخفاء المعلومات الناقصة#

المعلومات النوعية الناقصة هي مشكلة تحليل يجب إصلاحها في المنبع، لا تفصيلة توليد كود يجب تسترها. لا يستنتج المصرّف أبدًا بصمت نوعًا لم يقدمه المبرمج عندما تكون المعلومة غائبة حقًا — يبلغ عن الفجوة ويتوقف. هذه هي القاعدة التي تبقي فيبر صادقًا: إذا لم يستطع القارئ تحديد ما يعنيه رمز من المصدر المحلي، فلا ينبغي للمصرّف أن يتظاهر بأنه يستطيع.

الغرض#

توجد الوصايا للإجابة عن سؤال يظهر في كل نقاش تصميم لغة: "هل هذا التغيير لا يزال فيبر؟" إنها الفحص الثابت — ليس ضد قائمة ميزات، بل ضد شخصية. التغيير الذي يخالف وصية قد يظل فكرة جيدة، لكن ينبغي الاعتراف به كانحراف عن شخصية تصميم فيبر بدلًا من إضافة روتينية.

عمليًا، تخدم الوصايا غالبًا كمعايير مراجعة لمقترحات التركيب النحوي الجديدة. المقترح الذي يضعف "الأنواع قبل الأسماء" بإضافة بديل الاسم أولًا، أو يطمس "إشارة واحدة، مهمة واحدة" بتحميل رمز زائدًا، يجب أن يبرر لماذا ينبغي لفيبر أن يحني شخصيته لتلك الميزة.

Design documents#

يحتوي مستودع Radix على وثائق التصميم المرجعية لكيفية عمل Faber كلغة ومُصرّف. تقع هذه الوثائق تحت radix/docs/design/.

الفهرس#

المجالالملفات
الأهداف والإنزالtarget-capability-matrix.md، lowering-routes.md، semantic-ownership.md
الأنواع والسكر الصرفيnumeric-type-sugar.md، comparison-operators.md، annotation-sugar.md
دوال المجموعات الجوهريةlista-intrinsics.md، tabula-intrinsics.md، tensor-intrinsics.md، numerus-intrinsics.md، fractus-intrinsics.md، textus-intrinsics.md، intervallum-intrinsics.md، instans-intrinsics.md، copia-intrinsics.md
التحويلconversio-valor.md، failable-conversio.md
الأطر والتأثيراتframe-stream-types.md، host-provider-gateway.md
القارئ والصياغةreader-locale.md، faber-canonical-surface.md
الأنظمة / AIRair-dialect.md، aiml-foundation.md، systems-shaped-values.md
سطح الأدواتfaber-scripting.md
الدَيْن التسميويmixed-case-naming-debt.md

وثائق تصميم المكتبة المعيارية#

يحتوي الدليل radix/docs/stdlib/ على:

الوثيقةالدور
morphologia.mdسياسة التصريف لجميع أسماء دوال المكتبة المعيارية
tensor-methods.mdمرجع دوال المُستقبِل من نوع Tensor
chorda-methods.mdمرجع دوال Chorda (النص)
mathesis-methods.mdمرجع دوال الرياضيات
tempus-methods.mdمرجع دوال الزمن
stdlib-mechanical-verbs.mdسياسة الثالوث pange/solve/tempta

History#

الأصول#

أُجري أول التزام (commit) إلى مصرف راديكس (Radix) في 20 ديسمبر 2025 كمشروع Bun + TypeScript مع ملف docs/decisions.md واحد. كرّس الالتزام الثاني خمسة سجلات قرارات معمارية (ADR) ما تزال تُشكّل اللغة حتى اليوم.

ADR-003، بعنوان "نهايات الحالة تحمل دلالة معنوية،" أرسى منذ البداية أن الصرف اللاتيني سيكون أكثر من مجرد غلاف للكلمات المفتاحية — سيفهم المصرف الإعراب والتصريف ليستنبط قصد البرنامج. كانت تخطيطات الحالة الأصلية:

Nominative  (subject)       →  return value, caller
Accusative  (direct object)  →  primary argument
Dative      (indirect obj.)  →  recipient, callback, destination
Genitive    (possession)     →  property access, "of" relationships
Ablative    (instrument)     →  dependencies, context, "using X"

أشارت الوثيقة نفسها: "تصريف الأفعال سؤال متابعة طبيعي (زمن المستقبل → غير تزامني؟)." نمت هذه البذرة إلى اصطلاح التسمية الحديث morphologia، حيث تستعمل المكتبة المعيارية صيغ الأفعال اللاتينية المصرّفة للإشارة إلى التزامني مقابل غير التزامني والتحوير مقابل النسخ الخارجي — دون أن يُطلب من المصرف نفسه فهم قواعد اللغة اللاتينية.

بدأ المشروع بلغة TypeScript، ثم أُعيدت كتابته لاحقًا بلغة Rust، وجُمّدت القواعد النحوية لخط الإصدار 1.x مع طبعة 2026. سجلات ADR الخمسة الأصلية (امتداد الملف .fab، تلميحات الأخطاء، نهايات الحالة، محلل النزول التكراري، AST المخصص) لا تزال مرئية في تاريخ git.

الإصدارات#

أرشيفات CLI مُجمّعة مسبقًا — إصدار Faber الحالي في الأعلى، ثم كل وسم منشور وثنائي من faberlang/releases:

  • [الإصدارات](/releases/) — روابط التحميل وسجل المخزون التاريخي
  • [التثبيت والتحميل](/start/install.html) — إعداد PATH وأول أمر faber check