العرضar

Glyphs and Latin

Glyphs and operators#

تستخدم Faber الرموز حيث يكون الرمز بنيوياً. فيما يلي الجرد الكامل لرموز المصدر التي يتعرف عليها المحلل المعجمي.

تدفق القيم#

الرمزالمعنى
←ربط وقت التشغيل، وإعادة الإسناد، والتحوير
→نوع إرجاع الدالة
⇥مخرج بديل — نوع قناة الخطأ أو استرداد التحويل المضمن
∴وصلة الإغلاق — تربط جسم الإغلاق بتوقيعه ((a, b) → T ∴ a + b)

شكل النوع#

الرمزالمعنى
∷إسناد النوع الثابت (تحويل وقت التصريف)
↦تحويل وقت التشغيل (تحليل/إكراه قابل للفشل)
∪نوع اتحاد مضمن (T ∪ نوع_لاشيء)

المقارنة#

الرمزالمعنى
≡ ≠المساواة وعدم المساواة التامة
≅ ≇مساواة تامة بعد الترقية — نفس القيمة بأنواع عددية متوافقة
< > ≤ ≥الترتيب
≈ ≉مساواة تقريبية — مطابقة ضمن سماحية افتراضيات isclose

المنطقية والبتية#

الرمزالمعنى
∧ ∨ ⊻ ¬و، أو، xor، ليس
⇐ ⇒إزاحة البت لليسار ولليمين

تحديثات الإسناد#

الرمزالمعنى
←معامل الإسناد الوحيد في التعابير
⊕ ⊖عبارات الزيادة/النقصان اللاحقة (للأعداد القابلة للتحوير فقط)

التسلسل الاختياري وتأكيد عدم العدم#

الرمزالمعنى
? ?. ?[ ?(التسلسل الاختياري
! !. ![ !(تأكيد عدم العدم

النطاقات#

الرمزالمعنى
‥نقطة نهاية نطاق استبعادية
…نقطة نهاية نطاق شمولية

محددات القيم الحرفية#

الرمزالنوعالدور
'أسكيرموز آلية ثابتة
"نصسلسلة سطرية
« »نصسلسلة كتلية (علامات الاقتباس الفرنسية)
`formaقالب مأسور
``بايتاتقيمة حرفية ست عشرية
§ثقب القالبعنصر نائب داخل "…"، «…»، …

علامات الترقيم#

الرمزالدور
( )التجميع والاستدعاء
{ }كتلة، أو قيمة حرفية للجنس، أو مستند JSON
[ ]قيمة حرفية للقائمة والفهرسة
.الوصول إلى العضو
,الفاصل
;فاصل العبارات
:فاصل حقول JSON
=شكل الحقل البنيوي (ليس إسناد وقت التشغيل)
@علامة التعليق التوضيحي
#تعليق سطري

Latin vocabulary and structural glyphs#

ثلاثة إشارات تصميمية تجعل شفرة Faber المصدرية مميزة من النظرة الأولى.

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

الإشارات الثلاث#

الإشارةأمثلةالدور
تصريحات النوع أولاًنص اسم، عدد aetasهيئة النص تتجه نحو الربط — النوع، ثم الاسم.
كلمات لاتينية سلوكيةدالة، صنف، إذا، أعد، ثابتتصريحات وعبارات ودورة حياة وقصد سلوكي.
رموز هيكلية← → ∴ ≡ ∪ ⇥تدفق القيم وتدفق الأنواع ووصلات هيكلية — عالمية لا تُترجم أبدًا.

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

تصريحات النوع أولاً#

تضع Faber النوع قبل الاسم في كل تصريح. هذا عكس الصياغة السائدة في عائلة C، وهو مقصود:

البناءالعادة في عائلة CFaber
متغيرint count = 0عدد count ← 0
دالةfn greet(name: String) → Stringدالة salve(نص اسم) → نص
وسيط(String name)(نص اسم)

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

دالة divide(عدد a, عدد b) → عدد ∪ نوع_لاشيء {
    إذا b ≡ 0 إذن أعد خال
    أعد a / b
}

المفردات السلوكية اللاتينية#

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

التصريحات#

الكلمة المفتاحيةالدورالمكافئ التقريبي
دالةتصرح بدالة أو طريقة مسماةfn، def، function
صنفتصرح بنوع ملموس ذي حقولclass، struct
عقدتصرح بعقد سلوكيinterface، trait
نمطتصرح باسم مستعار لنوعtypedef، type
تمايزتصرح باتحاد موسومenum، sum type

الروابط والنقل#

الكلمة المفتاحيةالدورالمكافئ التقريبي
ثابتربط غير قابل للتغيير (يُكتب مرة واحدة)let، const
متغيرربط قابل للتغييرlet mut، var
ليكنربط موجز غير قابل للتغيير مع استنتاج النوعlet (مستنتج)
أعدإرجاع قيمة من دالةreturn
ارمرمي على قناة الخطأthrow، raise
انهرمؤجل — سلوك لا يمكن التعبير عنه بعدunimplemented!، todo

تدفق التحكم#

الكلمة المفتاحيةالدورالمكافئ التقريبي
إذاتفرع شرطيif
وإلاإذاتفرع وإلا-إذاelse if
وإلاتفرع وإلاelse
طالماحلقة طالماwhile
كررتكرار (قيم أو مفاتيح أو مدى)for
اخترمطابقة أنماط (الذراع الأولى تفوز)match، switch
افعلكتلة محاولة مع استرداد من الخطأtry، do
التقطمعالج خطأ لـ افعلcatch

المفردات اللاتينية قابلة للربط — تُشحن مع الحزمة المعيارية لكن يمكن إعادة تعيينها من خلال لغة القارئ المحلية. مبرمج تايلندي يرى ถ้า بدلاً من إذا؛ ومبرمج صيني يرى 函数 بدلاً من دالة. المفردات ليست مميزة؛ القواعد النحوية وحدها هي المميزة.

الرموز الهيكلية#

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

تدفق القيم#

الرمزالمعنى
←ربط وقت التنفيذ وإعادة الإسناد والتغيير — عامل الإسناد الوحيد
→تصريح نوع الإرجاع للدالة
⇥مخرج بديل: نوع قناة الخطأ أو استرداد تحويل ضمني
∴وصلة الإغلاق — تربط جسم الإغلاق بتوقيعه

هيئة النوع#

الرمزالمعنى
∷نسبة نوع ساكنة — تأكيد وقت التصريف حول نوع قيمة
↦تحويل وقت التنفيذ — تحليل أو إكراه قد يفشل
∪نوع اتحاد ضمني — يصل بين نوعين (كما في T ∪ لا شيء)

المقارنة والمنطق#

الرمزالمعنى
≡ ≠ ≢تطابق تام وعدم تطابق تام — يتطلب تطابقًا صارمًا للأنواع
≅ ≇مساواة تامة بعد الترقية — تُدمج العروض العددية ثم مقارنة تامة
≈ ≉مساواة تقريبية — مطابقة ضمن سماحية افتراضيات isclose
< > ≤ ≥مقارنات الترتيب
∧ ∨ ⊻ ¬المنطقي والبتّي: و، أو، أو حصري، ليس

اتفاقية الربط مهمة#

اختيار رمز واحد يستحق انتباهًا خاصًا لأنه أكثر نقاط الالتباس شيوعًا للقراء الجدد:

الرمزالدورالاستخدام لـ
←تدفق وقت التنفيذالربط الأولي وإعادة الإسناد والتغيير في وقت التنفيذ
=الهيئة الهيكليةأسماء الحقول داخل النصوص الحرفية وبيانات التصريح الوصفية — وليس مخازن وقت التنفيذ

معظم اللغات تفرط في تحميل = لكل من "عرّف هذا الحقل في نوع" و"ضع قيمة وقت تنفيذ في هذا المتغير." تفصل Faber بين هاتين المهمتين. كل ← هو تدفق معطيات حي؛ وكل = داخل Type { … } هو تخطيط حقل جنس.

# Runtime binding: ← attaches a value to a name
ثابت عدد count ← 0
متغير نص label ← "ready"
count ← count + 1

# Structural shape: = defines field values inside a literal
ثابت _ p ← Point {
    x = 10,
    y = 20
}

مقارنة باللغات السائدة#

يوضح الجدول أدناه كيف تناظر أنماط لغات البرمجة الشائعة نظام Faber ثلاثي الإشارات. يستخدم عمود Faber رمزًا مختلفًا أو كلمة مفتاحية مختلفة لكل مهمة دلالية مميزة — لا يوجد تحميل زائد.

المهمة الدلاليةشائعة في اللغات الأخرىFaber
تصريح نوع الوسيطname: Stringنص اسم
نوع الإرجاع→ String، : String→ نص
إسناد وقت التنفيذx = value←
اختبار التطابق==≡
القابلية للعدمT?، Option<T>T ∪ لا شيء
تفرع + عبارة واحدةif (cond) return xإذا cond إذن أرجع x
تحويل النوع(T)value، value as Tvalue ∷ T
تحويل (قد يفشل)try_into()value ↦ T

المراجع#

  1. قواعد EBNF — جرد كامل للرموز والكلمات المفتاحية
  2. examples/corpus/ — مدونة اللغة مع 292 ملفًا نموذجيًا عبر كل الكلمات المفتاحية
  3. examples/corpus/operatores/ — نماذج المؤثرات والرموز
  4. الوصايا — قوانين التصميم التسعة التي تحفظ هذه الإشارات

Canonical vs sugar surfaces#

أسطح قابلة للتحليل متعددة، وشكل دلالي واحد.

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

القاعدة: التهجئات المختصرة مطابقة دلاليًا للصيغة المطوّلة. أسطح متعددة تُحلّل إلى عقدة HirAnnotation أو عقدة نوع واحدة. faber format --canonical يفضّل التهجئات القانونية؛ نمط المؤلّف يحافظ على المختصر الذي كتبه المؤلّف.

مختصر الأنواع العددية#

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

المختصرالصيغة القانونيةالمجال
tf32، tf32[4]، ti64[2, 3]موتر<f32, _>، موتر<f32, [4]>موتر كثيف — t + العرض + شكل اختياري
sf32، sf32[2, 3]، si64[N]متفرقة<f32, _>، متفرقة<f32, [2, 3]>موتر متفرق — s + العرض + شكل اختياري
mf32[4, 4]، mu32[3, 3]مصفوفة<f32, [4, 4]>مصفوفة من فئة المسجّلات — m + العرض + الشكل
lf32، lu32، li64قائمة<f32>، قائمة<u32>قائمة — l + العرض

Faber العام (تفضيل الصيغة المطوّلة):

بداية {
    ثابت قائمة<f32> values ← فارغ
    ثابت موتر<f32, [2, 3]> grid ← فارغ
    ثابت i32 narrow ← 7
}

الوحدات العددية (تفضيل المختصر):

بداية {
    ثابت lf32 values ← فارغ
    ثابت tf32[2, 3] grid ← فارغ
    ثابت i32 narrow ← 7
}

المختصر في موضع النوع فقط. معرّفات القيم المسماة f32 أو tf32 أو mf32 لا تتغير — يفسّر المترجم هذه كمختصرات فقط عندما تظهر في مواضع الأنواع. الملف الذي يستخدم المختصر باستمرار ينبغي أن يصرّح بذلك مرة واحدة في الأعلى:

# STYLE: numeric sugar (tf32, mf32, sf32, lf32, lu32)

مختصر الوسوم#

تتبع وسوم Faber نموذج السطح المزدوج نفسه كما في الأنواع العددية. الوسوم هي بيانات وصفية يملكها المترجم وتُرفق بالتصريحات — مثل @ خيار لتعريفات خيارات CLI أو @ مستقبل للدوال غير المتزامنة.

الصيغة القانونية: سجل محاط بأقواس مع أسماء حقول صريحة:

@ خيار {
    binding = verbose,
    مختصر = "v",
    مفصل = "verbose",
    نمط = منطقي,
    عمومي = صواب,
    وصف = "Enable verbose output"
}

الصيغة المختصرة: وسائط موضعية وأسماء مستعارة:

@ خيار verbose مختصر "v" مفصل "verbose" نمط منطقي عمومي وصف "Enable verbose output"

تنتج كلتا الصيغتين سجل HirAnnotation نفسه. الصيغة القانونية صريحة وتوثّق نفسها؛ الصيغة المختصرة موجزة للوسوم كثيرة الاستخدام حيث ترتيب الحقول معروف. faber format --canonical يفضّل السجلات المحاطة بأقواس؛ نمط المؤلّف يحافظ على الصيغة التي اختارها المؤلّف.

تنسيق المؤلّف مقابل التنسيق القانوني#

يعمل أمر faber format في نمطين يعكسان مبدأ القانوني-مقابل-المختصر:

النمطالأمرالمُدخلالمُخرج
المؤلّفfaber formatAST محلّلة + توافه بادئةمصدر Faber محافظًا على تعليقات # والأسطر الفارغة والتهجئات المختصرة
القانونيfaber format --canonicalHIR محلّلة + TypeTableFaber مطبّع — دون تعليقات، بتهجئات قانونية، دون مختصرات

يمر كلا النمطين عبر النصف الأمامي الكامل للمترجم (المسح، التحليل، التحليل الدلالي للنمط القانوني). المصدر غير الصالح ينتج تشخيصات مترجم — المنسّق لا ينسّق مُدخلات مكسورة بصمت.

قواعد أساسية لكلا النمطين:

  • مسافة بادئة بأربع مسافات
  • أقواس Stroustrup: فتح { على نفس سطر الترويسة المتحكمة
  • نمط المؤلّف يحافظ على وجود الأسطر الفارغة لكنه يدمج تسلسلات أكثر من سطر واحد
  • نمط المؤلّف لا يُدرج أسطرًا فارغة لم يحتويها المصدر
  • النمط القانوني يطبّع تهجئات الأنواع إلى الصيغة المطوّلة، ومختصر الموترات إلى القانوني، والوسوم إلى سجلات محاطة بأقواس
  • النمط القانوني يصدر T ∪ نوع_لاشيء للاتحادات القابلة للعدم، واختياري للمعاملات الاختيارية

المبدأ التصميمي#

يظهر نمط القانوني-مقابل-المختصر في مواضع متعددة لأنه مبدأ تصميمي مقصود، وليس مجموعة من تسهيلات منفردة:

المجالالقانونيالمختصر
أنواع الموتراتموتر<f32, [4]>tf32[4]
الوسوم@ خيار { binding = verbose }@ خيار verbose ...
التنسيقfaber format --canonicalfaber format (نمط المؤلّف)
لُغة القارئاللاتينية (la)أي حزمة لُغة

يخدم النمط هدفين. أولاً، يخفّض حاجز الدخول — يمكن للمستخدمين الجدد كتابة tf32[4] دون كتابة موتر<f32, [4]>. ثانيًا، يبقي اللغة القانونية خالية من الغموض — حين تكون الدقة مهمة، تقول الصيغة المطوّلة ما تعنيه بالضبط. يربط المنسّق بينهما: يكتب المؤلّفون المختصر، ويمكن للمراجعين طلب القانوني، ويمكن لـ CI فرض أي منهما.

المراجع#

  1. radix/docs/design/numeric-type-sugar.md — عائلات المختصرات الكاملة، تفضيلات التهجئة
  2. radix/docs/design/annotation-sugar.md — نموذج الوسوم ذو السطح المزدوج
  3. radix/docs/design/faber-canonical-surface.md — سياسة تنسيق المؤلّف مقابل القانوني
  4. faber/docs/EBNF.md — جداول قواعد الصيغ المختصرة