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، وهو مقصود:
| البناء | العادة في عائلة C | Faber |
|---|---|---|
| متغير | 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 | معالج خطأ لـ fac | catch |
المفردات اللاتينية قابلة للربط — تُشحن مع الحزمة المعيارية لكن يمكن إعادة تعيينها من خلال لغة القارئ المحلية. مبرمج تايلندي يرى
ถ้าبدلاً من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 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 الصيغة المطوّلة في كل مكان، بينما تستخدم وحدة نواة الموترات المختصر:
| المختصر | الصيغة القانونية | المجال |
|---|---|---|
f32، f64، i32، u64 | fractus<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، li64 | lista<f32>، lista<u32> | قائمة — l + العرض |
f16 | fractus<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 format | AST محلّلة + توافه بادئة | مصدر Faber محافظًا على تعليقات # والأسطر الفارغة والتهجئات المختصرة |
| القانوني | faber format --canonical | HIR محلّلة + TypeTable | Faber مطبّع — دون تعليقات، بتهجئات قانونية، دون مختصرات |
يمر كلا النمطين عبر النصف الأمامي الكامل للمترجم (المسح، التحليل، التحليل الدلالي للنمط القانوني). المصدر غير الصالح ينتج تشخيصات مترجم — المنسّق لا ينسّق مُدخلات مكسورة بصمت.
قواعد أساسية لكلا النمطين:
- مسافة بادئة بأربع مسافات
- أقواس Stroustrup: فتح
{على نفس سطر الترويسة المتحكمة - نمط المؤلّف يحافظ على وجود الأسطر الفارغة لكنه يدمج تسلسلات أكثر من سطر واحد
- نمط المؤلّف لا يُدرج أسطرًا فارغة لم يحتويها المصدر
- النمط القانوني يطبّع تهجئات الأنواع إلى الصيغة المطوّلة، ومختصر الموترات إلى القانوني، والوسوم إلى سجلات محاطة بأقواس
- النمط القانوني يصدر
T ∪ nihilللاتحادات القابلة للعدم، وsponteللمعاملات الاختيارية
المبدأ التصميمي#
يظهر نمط القانوني-مقابل-المختصر في مواضع متعددة لأنه مبدأ تصميمي مقصود، وليس مجموعة من تسهيلات منفردة:
| المجال | القانوني | المختصر |
|---|---|---|
| الأنواع العددية | numerus<i32> | i32 |
| أنواع الموترات | tensor<f32, [4]> | tf32[4] |
| الوسوم | @ optio { binding = verbose } | @ optio verbose ... |
| التنسيق | faber format --canonical | faber format (نمط المؤلّف) |
| لُغة القارئ | اللاتينية (la) | أي حزمة لُغة |
يخدم النمط هدفين. أولاً، يخفّض حاجز الدخول — يمكن للمستخدمين
الجدد كتابة tf32[4] دون كتابة
tensor<fractus<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— جداول قواعد الصيغ المختصرة