المخارجُ ونوعُ كلٍّ منها
مرجعٌ يُنظَرُ فيه. والعمودُ الحاسمُ هو النوع — ولماذا.
المخارجُ الستّة
| المخرَج | النوع | الحال | نقطةُ الدخولِ من ص | الناتج |
|---|---|---|---|---|
| سطحُ المكتب (SDL2) | مُصيِّرٌ حيّ | live | تشغيل_تطبيق(الجذر) | نافذةٌ وحلقةُ أحداث |
| بلا نظامِ تشغيل | مُصيِّرٌ حيّ | live | تشغيل_تطبيق(الجذر) | رسمٌ على ذاكرةِ الإطارِ مباشرةً |
| HTML | مولِّدُ مصدر | live | توليد_ويب(الجذر، عنوان؟) | نصُّ صفحةِ HTML/CSS |
| Jetpack Compose | مولِّدُ مصدر | live | توليد_أندرويد(الجذر، اسم؟) | نصُّ Kotlin |
| SwiftUI | مولِّدُ مصدر | live | توليد_آي_أو_إس(الجذر، اسم؟) | نصُّ Swift |
| AppKit | مولِّدُ مصدر | deferred | توليد_ماك(الجذر، اسم؟) | — مؤجَّل |
ما يعنيه كلُّ نوع
| مُصيِّرٌ حيّ | مولِّدُ مصدر | |
|---|---|---|
| يرسمُ بكسلًا | ✅ | ❌ |
| يملكُ حلقةَ أحداث | ✅ | ❌ |
| يستدعي معالِجاتِك | ✅ | ❌ |
| القيمةُ المُرجَعة | — (لا يرجعُ حتّى تُغلَقَ النافذة) | نص (مقيس) |
| مَن يبني بعدَه | لا أحد | أدواتُ تلك المنصّة (Gradle · Xcode · متصفّح) |
| مَن يُصيِّر | المُصيِّرُ نفسُه | محرِّكُ تلك المنصّة |
توقيعاتُ المولِّدات
كلُّها مُعلَنةٌ في UICore مستقرّة، والمعامِلُ الثاني اختياريّ:
متغير الجذر = عمود(نص_عنصر("مرحبًا")، زر("انقرني"))
متغير صفحة = توليد_ويب(الجذر، "تجربة") # عنوانُ الصفحة
متغير كوتلن = توليد_أندرويد(الجذر، "شاشتي") # اسمُ دالّةِ @Composable
متغير سويفت = توليد_آي_أو_إس(الجذر، "شاشتي") # اسمُ بنيةِ View
اطبع_سطر("نوعُ الناتج: " + نوع(صفحة))نوعُ الناتج: نص — مقيس. والقيمةُ لا تُكتَبُ إلى ملفٍّ من تلقاءِ نفسِها: اطبَعْها أو اكتُبْها أنتَ.
عيّناتٌ مقيسةٌ من الناتج
توليد_أندرويد على الشجرةِ أعلاه:
@Composable
fun شاشتي() {
Column(modifier = Modifier) {
Text(text = "مرحبًا", modifier = Modifier)
Button(onClick = {}, ...) { Text("انقرني") }
}
}توليد_آي_أو_إس على الشجرةِ نفسِها:
struct شاشتي: View {
var body: some View {
VStack {
Text("مرحبًا")
Button(action: {}) { Text("انقرني") }
}
.environment(\.layoutDirection, .rightToLeft)وتوليد_ويب يُخرِجُ مستندًا كاملًا يبدأُ بـ<!DOCTYPE html> وفيه <html dir="rtl" lang="ar">.
⚠️ ولاحِظْ onClick = {} وaction: {} — فارغانِ. البنيةُ تُنقَلُ والمنطقُ لا يُنقَل.
خلفيّاتُ التصييرِ كما تُعلَنُ في ui_nodes.yaml
| المعرّف | enabled | صدقُ الإعلانِ مقيس؟ |
|---|---|---|
desktop_sdl2 | true | ✅ — نافذةٌ فُتِحَت مقيسةً بتشغيلِ ثنائيّ |
freestanding | true | ❌ لم يُقَسْ ههنا |
web | true | ❌ لم يُقَسْ |
android | true | ❌ لم يُقَسْ |
ios | true | ❌ لم يُقَسْ |
macos_appkit | false | السببُ مكتوبٌ في الملفّ: تستدعي طبقةَ تفاعلٍ لا تصرّحُ بها ترويستُها فلا تُترجَمُ كما هي |
لا تُشتَقَّ قدرةٌ من هذا العمود
enabled يصفُ نيّةَ الشفرةِ لا نتيجةَ بناء. وماك برهانُ ذلك: مُعلَنٌ في الملفِّ نفسِه وبسببٍ مكتوبٍ أنّه لا يُترجَم.
دعمُ الخلفيّاتِ في المترجِّم
backend_support في ui_nodes.yaml:
| الخلفيّة | تدعمُ الواجهة |
|---|---|
llvm | ✅ — المسارُ المدعومُ للبرامجِ المُترجَمةِ ذاتِ الواجهة |
native (ELF مباشرٌ بلا LLVM) | ❌ — يفشلُ التخفيضُ صراحةً بوسمِ kUiRequiresLlvm فلا يُنتَجُ ثنائيٌّ يُنشئُ عناصرَ ثمّ لا يعرضُ شيئًا |
سطحُ الواجهةِ بالأرقام
مقيسٌ من language-truth/builtins/ — المستقرُّ من المُعلَن:
| فضاءُ الأسماء | مستقرّ / مُعلَن | ما يقدّم |
|---|---|---|
UICore | ٢٥ / ٢٦ | التشغيلُ والتنقّلُ والثيمُ والمولِّدات |
UIWidgets | ٦٤ / ١١٢ | مصانعُ العناصر |
CompilerUi | ٢٤ / ٢٩ | بناءُ الشجرةِ وضبطُ الخصائص |
UIPlatform | ٢ / ٤٣ | ارسم_خط · ارسم_مستطيل فقط |
UIDevice | ٠ / ١٨ | كلُّه مؤجَّل |
UIIO · UIStorage | ٠ / ٧ لكلٍّ | كلُّه مؤجَّل |
UICrypto | ٠ / ٦ | كلُّه مؤجَّل |
UIAudio | ٠ / ٥ | كلُّه مؤجَّل |
UIDialog · UINetwork | ٠ / ٤ لكلٍّ | كلُّه مؤجَّل |
UITimer | ٠ / ٣ | كلُّه مؤجَّل |
والمؤجَّلُ لا يُستعمَل: وسمُ intent: مؤجَّل يعني مُعلَنًا غيرَ موصولٍ بالمترجِّم.
جردُ الشجرةِ المشتركة
| الملفّ | ما يُعلِن | العدد |
|---|---|---|
ui_nodes.yaml | أنواعُ العُقَد | ١١٠ |
| ↳ منها أوّليّاتُ المحلِّل | تُكتَبُ في واجهة … نهاية | ١٥ |
| ↳ منها حاوياتٌ تقبلُ أبناءً | عمود · صف · رصة · شبكة · عمود_كسول · حاوية · عرض_تمرير | ٧ |
ui_props.yaml | مفاتيحُ الخصائص | ٩٤ |
ui_events.yaml | أنواعُ الأحداث | ٣٢ + مخصص |
ui_modifiers.yaml | معدّلاتٌ ذاتُ دلالةٍ خاصّة | ٩ |
ui_propagation.yaml | أطوارُ الانتشار | ٤ |
ui_animations.yaml | أنواعُ الحركة | ٢٧ |
ui_easings.yaml | منحنياتُ التسارع | ٧ |
ui_colors.yaml | ألوانٌ مسمّاة | ٣٤ |
فجوةُ التصييرِ المُعلَنة
render_exemptions في ui_nodes.yaml فارغةٌ عمدًا: لا فجوةَ تصييرٍ مُعلَنةً واحدة — كلُّ عقدةٍ في الجردِ تُصيَّرُ في كلِّ هدف. والقائمةُ باقيةٌ لأنّها المتنفَّسُ الشرعيُّ الوحيد: فجوةٌ جديدةٌ تُعلَنُ فيها بسببٍ مكتوب ولا تمرُّ صامتة.