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، وهو مقصود:
| البناء | العادة في عائلة C | Faber |
|---|---|---|
| متغير | 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 T | value ∷ T |
| تحويل (قد يفشل) | try_into() | value ↦ T |
المراجع#
- قواعد EBNF — جرد كامل للرموز والكلمات المفتاحية
- examples/corpus/ — مدونة اللغة مع 292 ملفًا نموذجيًا عبر كل الكلمات المفتاحية
- examples/corpus/operatores/ — نماذج المؤثرات والرموز
- الوصايا — قوانين التصميم التسعة التي تحفظ هذه الإشارات
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 format | AST محلّلة + توافه بادئة | مصدر Faber محافظًا على تعليقات # والأسطر الفارغة والتهجئات المختصرة |
| القانوني | faber format --canonical | HIR محلّلة + TypeTable | Faber مطبّع — دون تعليقات، بتهجئات قانونية، دون مختصرات |
يمر كلا النمطين عبر النصف الأمامي الكامل للمترجم (المسح، التحليل، التحليل الدلالي للنمط القانوني). المصدر غير الصالح ينتج تشخيصات مترجم — المنسّق لا ينسّق مُدخلات مكسورة بصمت.
قواعد أساسية لكلا النمطين:
- مسافة بادئة بأربع مسافات
- أقواس Stroustrup: فتح
{على نفس سطر الترويسة المتحكمة - نمط المؤلّف يحافظ على وجود الأسطر الفارغة لكنه يدمج تسلسلات أكثر من سطر واحد
- نمط المؤلّف لا يُدرج أسطرًا فارغة لم يحتويها المصدر
- النمط القانوني يطبّع تهجئات الأنواع إلى الصيغة المطوّلة، ومختصر الموترات إلى القانوني، والوسوم إلى سجلات محاطة بأقواس
- النمط القانوني يصدر
T ∪ نوع_لاشيءللاتحادات القابلة للعدم، واختياريللمعاملات الاختيارية
المبدأ التصميمي#
يظهر نمط القانوني-مقابل-المختصر في مواضع متعددة لأنه مبدأ تصميمي مقصود، وليس مجموعة من تسهيلات منفردة:
| المجال | القانوني | المختصر |
|---|---|---|
| أنواع الموترات | موتر<f32, [4]> | tf32[4] |
| الوسوم | @ خيار { binding = verbose } | @ خيار verbose ... |
| التنسيق | faber format --canonical | faber format (نمط المؤلّف) |
| لُغة القارئ | اللاتينية (la) | أي حزمة لُغة |
يخدم النمط هدفين. أولاً، يخفّض حاجز الدخول — يمكن للمستخدمين
الجدد كتابة tf32[4] دون كتابة
موتر<f32, [4]>. ثانيًا، يبقي اللغة
القانونية خالية من الغموض — حين تكون الدقة مهمة، تقول الصيغة المطوّلة
ما تعنيه بالضبط. يربط المنسّق بينهما: يكتب المؤلّفون المختصر،
ويمكن للمراجعين طلب القانوني، ويمكن لـ CI فرض أي منهما.
المراجع#
radix/docs/design/numeric-type-sugar.md— عائلات المختصرات الكاملة، تفضيلات التهجئةradix/docs/design/annotation-sugar.md— نموذج الوسوم ذو السطح المزدوجradix/docs/design/faber-canonical-surface.md— سياسة تنسيق المؤلّف مقابل القانونيfaber/docs/EBNF.md— جداول قواعد الصيغ المختصرة