العرضar

Glyphs and Latin

Glyphs and operators#

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

تدفق القيم#

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

شكل النوع#

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

المقارنة#

الرمزالمعنى
المساواة وعدم المساواة التامة
< > الترتيب
مساواة القيم العددية

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

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

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

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

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

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

النطاقات#

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

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

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

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

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

Latin vocabulary and structural glyphs#

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

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

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

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

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

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

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

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

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

دالة divide(عدد a, عدد b)  عدد  لاشيء {
    إذا b  0 إذن أعد لاشيء
    أعد a / b
}

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

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

التصريحات#

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

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

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

تدفق التحكم#

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

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

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

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

تدفق القيم#

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

هيئة النوع#

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

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

الرمزالمعنى
تطابق تام وعدم تطابق تام — يتطلب تطابقًا صارمًا للأنواع
< > مقارنات الترتيب
¬المنطقي والبتّي: و، أو، أو حصري، ليس

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

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

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

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

# Runtime binding: ← attaches a value to a name
fixum numerus count ← 0
varia textus label ← "ready"
count ← count + 1

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

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

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

المهمة الدلاليةشائعة في اللغات الأخرىFaber
تصريح نوع الوسيطname: Stringنص nomen
نوع الإرجاع→ String، : String نص
إسناد وقت التنفيذx = value
اختبار التطابق==
القابلية للعدمT?، Option<T>T ∪ لا شيء
تفرع + عبارة واحدةif (cond) return xإذا cond ergo أرجع 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 الصيغة المطوّلة في كل مكان، بينما تستخدم وحدة نواة الموترات المختصر:

المختصرالصيغة القانونيةالمجال
f32، f64، i32، u64fractus<f32>، numerus<i32>مؤشرات العرض — أنواع عددية قياسية
tf32، tf32[4]، ti64[2, 3]tensor<f32, _>، tensor<f32, [4]>موتر كثيف — t + العرض + شكل اختياري
sf32، sf32[2, 3]، si64[N]sparsa<f32, _>، sparsa<f32, [2, 3]>موتر متفرق — s + العرض + شكل اختياري
mf32[4, 4]، mu32[3, 3]matrix<f32, [4, 4]>مصفوفة من فئة المسجّلات — m + العرض + الشكل
lf32، lu32، li64lista<f32>، lista<u32>قائمة — l + العرض
f16fractus<f16>مؤشر عرض نصف الطفو (دلالي/تخطيطي فقط)

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

ثابت قائمة<f32> values  فارغ

ثابت موتر<f32, [2, 3]> grid  فارغ

ثابت عدد<i32> narrow  7

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

ثابت قائمة<f32> values  فارغ

ثابت موتر<f32, [2, 3]> grid  فارغ

ثابت عدد<i32> narrow  7

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

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

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

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

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

@ optio {
    binding = verbose,
    brevis = "v",
    longum = "verbose",
    typus = bivalens,
    ubique = verum,
    descriptio = "Enable verbose output"
}

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

@ optio verbose brevis "v" longum "verbose" typus bivalens ubique descriptio "Enable verbose output"

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

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

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

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

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

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

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

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

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

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

يخدم النمط هدفين. أولاً، يخفّض حاجز الدخول — يمكن للمستخدمين الجدد كتابة tf32[4] دون كتابة tensor<fractus<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 — جداول قواعد الصيغ المختصرة