ميزات متقدّمة
تتجاوز لغة ص الأساسيّات إلى ميزات حديثة: القوالب، المولّدات، إدارة الموارد،
الماكرو، العقود، وغيرها. هذا الفصل تعريفيّ؛ وللتزامن (أطلق/القنوات/اختر)
فصلٌ مستقلّ في التزامن.
القوالب (الأنواع العامّة)
قالب يكتب دالةً أو صنفًا يعمل على أنواعٍ متعدّدة دون تكرار؛ يسبقه معاملُ نوعٍ واحد
على الأقلّ بين <...>:
قالب <نوع ت>
دالة هوية(ت س)
ارجع س
نهاية
اطبع_سطر(هوية(7)) // استنتاج النوع
اطبع_سطر(هوية<رقم>(4)) // تخصيص صريح
ويدعم القوالب الثابتة (const-generics) بقيمةٍ ثابتة بدل نوع:
قالب <ثابت رقم ن>
دالة الحجم()
ارجع ن
نهاية
اطبع_سطر(الحجم<3>()) // 3
وتُقيَّد معاملات النوع بجملة حيث:
قالب <نوع ت>
دالة الأكبر(ت أ، ت ب) حيث ت: مقارن
...
نهاية
⚠️ تباعُد مترجم مفتوح (
ISSUE-071): التخصيص الصريح بوسيطٍ نصّيّهوية<نص>("ن")يُرجع قيمةً خاطئة في المترجم بينمانفي المفسّر؛ التخصيص بوسيطٍ رقميّ يعمل مزدوجًا.
المولّدات: مولد وأنتج
الدالة المسبوقة بـمولد تُنتج قيمًا كسولةً عبر أنتج، وتُستهلَك بحلقة لكل:
مولد دالة عدّ()
أنتج 1
أنتج 2
أنتج 3
نهاية
لكل ع في عدّ()
اطبع_سطر(ع) // 1، 2، 3
نهاية
بادئة
مولدإلزاميّة:أنتجصالحةٌ فقط داخل دالةٍ مسبوقةٍ بـمولد— لا في دالةٍ عاديّة ولا في المستوى الأعلى. وتُستعمَلأنتجأيضًا لفصل رأس الحلقة عن الناتج في الاستيعابات.
إدارة الموارد: باستخدام وأجّل
باستخدام كتلةُ سياقٍ لموردٍ يُغلَق عند الخروج؛ الاسم المستعار بعد كـ اختياريّ،
والكتلة تُغلَق بـنهاية:
باستخدام 5 كـ م
اطبع_سطر(م)
نهاية
(في الاستعمال الحقيقيّ يكون المورد كائنًا يُنفّذ بروتوكول السياق فيُغلَق تلقائيًّا.)
أجّل يؤجّل تنفيذ جملةٍ (أو كتلة) إلى خروج الدالة، بترتيب LIFO (الأخير أوّلًا)
— مثاليّ للتنظيف المضمون:
دالة عالِج()
أجّل اطبع_سطر("أُغلِق") // يُنفَّذ آخرًا
اطبع_سطر("عُولِج")
نهاية
عالِج() // عُولِج ثمّ أُغلِق
الماكرو: ماكرو
يُعرَّف بـماكرو ويُستدعى بعلامة تعجّبٍ ! تميّزه عن الدالة:
ماكرو ضِعف(س)
ارجع س * 2
نهاية
اطبع_سطر(ضِعف!(21)) // 42
استدعاؤه بلا
!يُعامَل دالةً غير معرّفة (خطأ دلاليّ) — العلامة إلزاميّة.
العقود: عقد
عقد يُعرّف نوعًا شبيهًا بالصنف (بأعضاء وطرائق، ويدعم يرث) بدلالة «العقد الذكيّ»:
عقد محفظة
متغير عام رصيد = 0
دالة عام إيداع(مبلغ)
هذا.رصيد = هذا.رصيد + مبلغ
نهاية
نهاية
متغير م = محفظة()
م.إيداع(50)
اطبع_سطر(م.رصيد) // 50
معاملات العمر (Lifetimes)
تعليقُ عمرٍ يبدأ بفاصلةٍ عليا 'أ، يُوسَم على البنى والدوال لتتبّع الاستعارة:
بنية مرجع<'أ>
رقم قيمة = 0
نهاية
اختبار الخصائص: اختبر
كتلةُ اختبارٍ قائمٍ على الخصائص، الأقواس حول الاسم إلزاميّة، مع تكرارات/بذرة
اختياريّتين:
استورد تأكيدات
اختبر("الجمع تبادليّ") تكرارات 100
تأكد_صحيح(1 + 2 == 2 + 1)
نهاية
(دوال التأكيد في وحدة تأكيدات ⇒ تلزم استورد تأكيدات أوّلًا.)
الواجهة والبرمجة الأجنبيّة
- الواجهة (SadUI):
واجهة/@حالة/اعرضلبناء واجهات تفاعليّة — راجع وثائق SadUI. - الربط الأجنبيّ (FFI، تجريبيّ):
خارجي "C"لاستدعاء دوالٍ أصليّة.
الكلمات السياقيّة المتقدّمة
أغلب ما سبق كلماتٌ سياقيّة (لا محجوزة): قالب، مولد، أنتج، باستخدام،
أجّل، ماكرو، عقد، اختبر، حيث، انتظر — يجوز استعمالها أسماءً خارج سياقها.
(أمّا خارجي فكلمةٌ محجوزة.) راجع
الكلمات المحجوزة الأربعون للتمييز.