اكتب بالعربية. شغّل هنا.

جارٍ تحميل المحرر…

يجمع هذا البرنامج الأعداد من 1 إلى 10. عند نجاحه يطبع 55 ويعيد الحالة 0. عدّل المصدر ثم اضغط «شغّل».

تجري الترجمة والتنفيذ داخل متصفحك. لا يُرسل المصدر إلى خادم.

تابع إلى تعلّم اللغة

تعلّم من برنامج واحد

ارجع إلى العقد

البرنامج وحالة العملية

يحتوي ملف .aspl واحد على تعريفات الدوال والتصريحات الخارجية. دالة ابدأ_الرئيسية / start_main إلزامية بلا معاملات وبنتيجة i64. المجال الصحيح للحالة 0..255، وأي قيمة أخرى توقف التنفيذ ولا تُختزل.

مقبول: دوال على المستوى الأعلى. مرفوض: متغير عام، عبارة خارج دالة، دالة بداية مفقودة أو استدعاؤها من المصدر.

hello-ar · ASPL 0.2.0

المتصفح والمضيف الأصلي

دالة ابدأ_الرئيسية() -> ص64 {
    أرجع 0.
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 0; stdout ""
native: check 0; success / status 0; stdout ""
نزّل المصدر افتح في المحرر
aspl check hello.aspl
aspl run hello.aspl
hello-en · ASPL 0.2.0

المتصفح والمضيف الأصلي

fn start_main() -> i64 {
    return 0;
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 0; stdout ""
native: check 0; success / status 0; stdout ""
نزّل المصدر افتح في المحرر
aspl check hello.aspl
aspl run hello.aspl

الأسباب والنتائج: missing-entry-function, invalid-entry-signature, entry-call-not-allowed; trap / invalid-process-status

تطبيق المضيف: shared

الحدود المعيارية للإصدار

كتابة المصدر

المصدر UTF-8 صارم وفق Unicode 17.0. الأسماء حساسة لحالة الحروف وبتطبيع NFC، وبخط عربي أو لاتيني واحد لكل اسم. المفردات والعوامل الإنجليزية بدائل مطابقة ويمكن مزجها. الأرقام وعلامات الترقيم في الشيفرة من ASCII، وتكتب المساواة والاقتران والفصل بـ matches وand وor أو ببدائلها العربية يطابق وتطابق وو وأو؛ ويختار مصدر العربية صيغة المساواة الموافقة لسياقه النحوي. تنتهي العبارات بـ . أو ;، وتستخدم الأمثلة العربية النقطة. ترتيب العرض لا يغير بايتات المصدر.

مقبول: كلمات عربية وإنجليزية في البرنامج نفسه. مرفوض: أرقام غير محولة خارج النصوص والتعليقات أو اسم يجمع الخطين. يعرض المحرر محارف التحكم غير المرئية بوضوح.

الأسباب والنتائج: non-ascii-digit, mixed-script-identifier

تطبيق المضيف: shared

اقرأ المثال وافحصه الحدود المعيارية للإصدار

الأنواع والتدفق

لا توجد تحويلات ضمنية. العدد الصحيح i64 موقّع وفائضه يوقف التنفيذ. العدد f64 هو IEEE 754 binary64. النص ثابت ويأتي من قيمة حرفية أو من إدخال سطر ناجح، والمؤشر c_ptr معتم وقابل للقيمة الفارغة. لا يمكن تخزين unit. يتيح الربط المهيأ استنتاج النوع. لا يوجد حجب للأسماء؛ المعاملات والروابط ثابتة ما لم يصرّح الرابط المحلي بالتغيير. تتطلب if, while شرطا منطقيا، وreturn نتيجة من النوع المعلن.

مقبول: تعديل رابط معلن للتغيير، ومقارنة تنتج شرطا منطقيا. مرفوض: رابط بلا تهيئة، تعديل رابط ثابت أو مزج أنواع الأعداد ضمنيا.

sum-ar · ASPL 0.2.0

المتصفح والمضيف الأصلي

دالة ابدأ_الرئيسية() -> ص64 {
    متغير المجموع: ص64 = 0.
    متغير العدد: ص64 = 1.
    طالما (العدد <= 10) {
        المجموع = المجموع + العدد.
        العدد = العدد + 1.
    }
    إذا (المجموع يطابق 55) {
        اطبع("55\n").
        أرجع 0.
    }
    أرجع 1.
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 0; stdout "55\n"
native: check 0; success / status 0; stdout "55\n"
نزّل المصدر افتح في المحرر
aspl check sum-ar.aspl
aspl run sum-ar.aspl
sum-en · ASPL 0.2.0

المتصفح والمضيف الأصلي

fn start_main() -> i64 {
    var المجموع: i64 = 0;
    var العدد: i64 = 1;
    while (العدد <= 10) {
        المجموع = المجموع + العدد;
        العدد = العدد + 1;
    }
    if (المجموع matches 55) {
        print("55\n");
        return 0;
    }
    return 1;
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 0; stdout "55\n"
native: check 0; success / status 0; stdout "55\n"
نزّل المصدر افتح في المحرر
aspl check sum-en.aspl
aspl run sum-en.aspl
sum-mixed · ASPL 0.2.0

المتصفح والمضيف الأصلي

fn ابدأ_الرئيسية() -> ص64 {
    متغير المجموع: ص64 = 0;
    متغير العدد: ص64 = 1;
    طالما (العدد <= 10) {
        المجموع = المجموع + العدد;
        العدد = العدد + 1;
    }
    إذا (المجموع matches 55) {
        print("55\n");
        return 0;
    }
    أرجع 1;
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 0; stdout "55\n"
native: check 0; success / status 0; stdout "55\n"
نزّل المصدر افتح في المحرر
aspl check sum-mixed.aspl
aspl run sum-mixed.aspl

الأسباب والنتائج: immutable-assignment, type-mismatch; trap / integer-overflow

تطبيق المضيف: shared

الحدود المعيارية للإصدار

الدوال

الدوال فريدة الاسم وعلى المستوى الأعلى، بمعاملات ونتيجة معلنة النوع. تمر القيم بالنسخ. ترتيب التعريفات لا يهم ويسمح بالاستدعاء الذاتي. يجب أن يعيد كل مسار في دالة ذات نتيجة غير unit قيمة. مثال المضروب يعيد الحالة 120 بلا خرج.

مقبول: دالة معرفة لاحقا أو استدعاء ذاتي. مرفوض: تحميل زائد، دالة متداخلة، عدد معاملات خاطئ أو مسار بلا إرجاع.

functions-ar · ASPL 0.2.0

المتصفح والمضيف الأصلي

دالة مضروب(القيمة: ص64) -> ص64 {
    إذا القيمة <= 1 {
        أرجع 1.
    }
    أرجع القيمة * مضروب(القيمة - 1).
}

دالة ابدأ_الرئيسية() -> ص64 {
    أرجع مضروب(5).
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 120; stdout ""
native: check 0; success / status 120; stdout ""
نزّل المصدر افتح في المحرر
aspl check functions-ar.aspl
aspl run functions-ar.aspl
functions-en · ASPL 0.2.0

المتصفح والمضيف الأصلي

fn مضروب(القيمة: i64) -> i64 {
    if القيمة <= 1 {
        return 1;
    }
    return القيمة * مضروب(القيمة - 1);
}

fn start_main() -> i64 {
    return مضروب(5);
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 120; stdout ""
native: check 0; success / status 120; stdout ""
نزّل المصدر افتح في المحرر
aspl check functions-en.aspl
aspl run functions-en.aspl

الأسباب والنتائج: argument-count-mismatch, type-mismatch, missing-return

تطبيق المضيف: shared

الحدود المعيارية للإصدار

التشخيص والتصحيح

يحمل التشخيص مفتاح سبب ثابت وشدة ومعاملات ذات أنواع ومواضع مصدر وتعديلا اختياريا. اللغة تغير الصياغة فقط. التحذير لا يمنع التشغيل. يربط التشغيل المباشر التشخيص بالمصدر؛ البرامج المبنية لا تحتوي خريطة المصدر. المثال الأول يحاول تعديل رابط ثابت. يستبدل المثال الثاني دع / let بـمتغير / var ويعيد الحالة 1 بصورة طبيعية.

مقبول: تصحيح الرابط ثم إعادة الفحص. مرفوض: اعتبار كل حالة غير صفرية خطأ مصدر. استخدم صنف النتيجة والتشخيص للتمييز.

diagnostic-ar · ASPL 0.2.0

المتصفح والمضيف الأصلي

دالة ابدأ_الرئيسية() -> ص64 {
    دع قيمة = 0.
    قيمة = 1.
    أرجع قيمة.
}

النتائج المتوقعة والخرج الحرفي

browser: check source-error; source-error / immutable-assignment; stdout ""
native: check 1; source-error / status 1 / immutable-assignment; stdout ""
نزّل المصدر افتح في المحرر
aspl check diagnostic-ar.aspl
diagnostic-en · ASPL 0.2.0

المتصفح والمضيف الأصلي

fn start_main() -> i64 {
    let قيمة = 0;
    قيمة = 1;
    return قيمة;
}

النتائج المتوقعة والخرج الحرفي

browser: check source-error; source-error / immutable-assignment; stdout ""
native: check 1; source-error / status 1 / immutable-assignment; stdout ""
نزّل المصدر افتح في المحرر
aspl check diagnostic-en.aspl
corrected-ar · ASPL 0.2.0

المتصفح والمضيف الأصلي

دالة ابدأ_الرئيسية() -> ص64 {
    متغير قيمة = 0.
    قيمة = 1.
    أرجع قيمة.
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 1; stdout ""
native: check 0; success / status 1; stdout ""
نزّل المصدر افتح في المحرر
aspl check corrected-ar.aspl
aspl run corrected-ar.aspl
corrected-en · ASPL 0.2.0

المتصفح والمضيف الأصلي

fn start_main() -> i64 {
    var قيمة = 0;
    قيمة = 1;
    return قيمة;
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 1; stdout ""
native: check 0; success / status 1; stdout ""
نزّل المصدر افتح في المحرر
aspl check corrected-en.aspl
aspl run corrected-en.aspl

الأسباب والنتائج: source-error / immutable-assignment; success / start_main 1

تطبيق المضيف: shared

الحدود المعيارية للإصدار

الطباعة الآمنة

توقيع الطباعة المدمجة هو اطبع / print: (string) -> unit. يكتب بايتات النص بالترتيب، بما فيها NUL، بلا سطر جديد أو تفريغ تلقائي. أضف \n صراحة. لا يمكن إعادة تعريف أي من الاسمين. يعرض المتصفح بايتات الخرج بأمان ولا يفسرها كترميز صفحة.

مقبول: نص واحد، بما فيه النص الفارغ. مرفوض: عدد أو معاملات متعددة أو تخزين النتيجة.

الكتابة متزامنة، والنص الفارغ لا يلمس المضيف. يعيد المضيف الأصلي محاولة الكتابات المقطوعة ويتابع الكتابات القصيرة. يبقى أي خرج مقبول قبل الفشل ظاهرا. لا توجد معالجة خاصة لإشارة SIGPIPE؛ قد ينهي الأنبوب المغلق العملية بها. إذا تجاهلت البيئة الإشارة أو حجبتها وأعادت الكتابة EPIPE، تكون النتيجة فشل مضيف بالحالة 8.

output-ar · ASPL 0.2.0

المتصفح والمضيف الأصلي

دالة ابدأ_الرئيسية() -> ص64 {
    اطبع("مرحبا\n").
    أرجع 0.
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 0; stdout "مرحبا\n"
native: check 0; success / status 0; stdout "مرحبا\n"
نزّل المصدر افتح في المحرر
aspl check output-ar.aspl
aspl run output-ar.aspl
output-en · ASPL 0.2.0

المتصفح والمضيف الأصلي

fn start_main() -> i64 {
    print("مرحبا\n");
    return 0;
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 0; stdout "مرحبا\n"
native: check 0; success / status 0; stdout "مرحبا\n"
نزّل المصدر افتح في المحرر
aspl check output-en.aspl
aspl run output-en.aspl

الأسباب والنتائج: type-mismatch, argument-count-mismatch; host-failure / host-operation-failed / write-program-output; limit-stop / output-limit

تطبيق المضيف: shared

الحدود المعيارية للإصدار

إدخال سطر

الدالة المدمجة اقرأ_سطر / read_line: () -> string تقرأ سطرا واحدا. لا تقبل معاملات أو وسم غير_آمن / unsafe، ولا يمكن تعريف اسم من أسمائها. اطبع أي مطالبة قبل الاستدعاء، فالدالة نفسها لا تكتب مطالبة أو صدى أو فاصلة نهاية. ينتهي السطر بـLF أو CRLF وتزال النهاية. السطر الفارغ نص فارغ. يعاد السطر الأخير غير المنتهي مرة واحدة عند EOF، ثم يوقف الاستدعاء التالي بـinput-exhausted.

مقبول: تمرير النص المقروء إلى دالة أو إعادته أو مقارنته أو طباعته. مرفوض: تحويله إلى رقم أو إضافة نصوص له، فليست هناك مكتبة نصوص أو أرقام جديدة.

يتحقق وقت التشغيل من بايتات السطر كلها بوصفها UTF-8 صارما. تبقى المسافات وNUL وعلامات العربية ومحارف الاتجاه والأرقام العربية الهندية وشكل التطبيع كما أرسله المضيف. لا يمر إدخال البرنامج عبر محرر المصدر أو محلله أو تحويل أرقامه. السطر غير الصالح يوقف التنفيذ بـinvalid-input-utf8 مع موضع أول بايت غير صالح.

الحد في المضيفين هو 65536 بايت حمولة للسطر، من دون LF أو CRLF. يقبل الحد بالضبط، أما تجاوزه فينهي التنفيذ بـinput-line-limit من دون نص مبتور. إلغاء التنفيذ أثناء الانتظار إلغاء وليس EOF.

تملك العملية الناجحة النص غير الفارغ حتى تدمر العملية. تمرره السجلات والمعاملات والنتائج بالقيمة نفسها، ولا يحرر الرجوع من الدالة النص. لا تستعيد إعادة الإسناد نصوص الإدخال السابقة، لذلك قد يصل برنامج يقرأ كثيرا إلى حد ذاكرة الآلة.

input-ar · ASPL 0.2.0

المتصفح والمضيف الأصلي

دالة ابدأ_الرئيسية() -> ص64 {
    اطبع("ما اسمك؟ ").
    دع الاسم = اقرأ_سطر().
    اطبع("مرحبا ").
    اطبع(الاسم).
    اطبع("\n").
    أرجع 0.
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 0; stdout "ما اسمك؟ مرحبا ليلى\n"
native: check 0; success / status 0; stdout "ما اسمك؟ مرحبا ليلى\n"
scripted stdin lines: ["ليلى"]
نزّل المصدر افتح في المحرر
aspl check input-ar.aspl
aspl run input-ar.aspl
input-en · ASPL 0.2.0

المتصفح والمضيف الأصلي

fn start_main() -> i64 {
    print("ما اسمك؟ ");
    let الاسم = read_line();
    print("مرحبا ");
    print(الاسم);
    print("\n");
    return 0;
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 0; stdout "ما اسمك؟ مرحبا Mina\n"
native: check 0; success / status 0; stdout "ما اسمك؟ مرحبا Mina\n"
scripted stdin lines: ["Mina"]
نزّل المصدر افتح في المحرر
aspl check input-en.aspl
aspl run input-en.aspl
input-mixed · ASPL 0.2.0

المتصفح والمضيف الأصلي

fn مرر(value: string) -> string {
    return value;
}

fn start_main() -> i64 {
    print("first: ");
    let first = اقرأ_سطر();
    اطبع("second: ").
    let second = read_line().
    let returned = مرر(first).
    إذا returned matches second {
        print("equal: ");
        print(returned).
        اطبع(" / ").
        print(second).
        اطبع("\n").
        return 0.
    }
    أرجع 1.
}

النتائج المتوقعة والخرج الحرفي

browser: check success; success / start_main 0; stdout "first: second: equal: ١٢٣ / ١٢٣\n"
native: check 0; success / status 0; stdout "first: second: equal: ١٢٣ / ١٢٣\n"
scripted stdin lines: ["١٢٣","١٢٣"]
نزّل المصدر افتح في المحرر
aspl check input-mixed.aspl
aspl run input-mixed.aspl

الأسباب والنتائج: argument-count-mismatch, unsafe-on-safe-call; trap / input-exhausted, invalid-input-utf8; limit-stop / input-line-limit; cancelled

تطبيق المضيف: shared

الحدود المعيارية للإصدار

أوامر Linux ومراحلها

تقبل الأداة ملف مصدر واحدا. يفحص check المصدر، ويشغّل run داخل العملية، وينشر build برنامج ELF باستبدال ذري بعد التحقق. لا يفتح الفحص والبناء مكتبات البرنامج. لا يستدعي البناء مترجم C أو رابطا. تعيش البرامج المبنية مستقلة عن تثبيت الأداة.

مقبول: خيارات التشخيص قبل الأمر ومسار واحد بعده. مرفوض: مصادر متعددة أو إخراج بايت كود عام أو معاملات برنامج. استخدم -- قبل مسار يبدأ بشرطة.

الأسباب والنتائج: 0 success; 1 source-error; 2 usage-error; 3 policy-rejection; 4 load-failure; 5 trap; 6 limit-stop; 7 cancelled; 8 host-failure; 9 internal-failure

تطبيق المضيف: native

aspl --diagnostic-language=en check hello.aspl
aspl run hello.aspl
aspl build -o hello hello.aspl
./hello
اقرأ المثال وافحصه الحدود المعيارية للإصدار

الإدخال في Linux والبرامج المبنية

يقرأ aspl run من stdin الموروث، سواء أكان طرفية أم أنبوبا أم ملفا معادا توجيهه. يعمل القارئ نفسه داخل برنامج مبني بـaspl build من نوع ELF. يحتوي البرنامج المبني البايت كود وإصدار الآلة 2، ويعمل بعد إزالة المترجم ووقت التشغيل من PATH.

تظهر المطالبة التي تطبعها ASPL قبل الانتظار، حتى بلا سطر جديد. يزيل القارئ نهاية السطر فقط ولا يقرأ إلى السطر التالي، ولذلك تبقى بايتات لاحقة لدالة خارجية تقرأ stdin. تقاطع الإشارة أو طلب الإيقاف أثناء الانتظار لا يتحول إلى input-exhausted.

تطبيق المضيف: native

printf 'Mina\n' | aspl run input.en.aspl
aspl build -o input input.en.aspl
printf 'Mina\n' | ./input
الحدود المعيارية للإصدار

إدخال الملعب في المتصفح

حين يصل البرنامج إلى read_line يعرض الملعب حالة انتظار وحقل سطر واحد وزري Send وClose input وStop. يرسل Send المسودة الحالية للطلب المعروض فقط، ثم يمسحها بعد إقرار العامل. يرسل Close input EOF ولا يرسل المسودة، وتبقى ظاهرة بوصفها غير مرسلة. يوقف Stop التنفيذ ولا يعني EOF.

لا يقبل الحقل لصقا متعدد الأسطر أو محرفي CR وLF، ويعرض حد البايتات. تبقى بايتات المسودة والأرقام كما أدخلت ولا تمر عبر محرر المصدر. تسجل أصداء الإدخال كسجلات واجهة منفصلة ولا تدخل في خرج البرنامج أو حد خرجه.

يقيس حد التنفيذ زمن العمل المتراكم فقط. الوقت الذي يقضيه البرنامج منتظرا الإدخال لا يستهلكه. تحافظ أزرار Auto وLTR وRTL على بايتات الخرج والمسودة ولقطة المصدر وهوية الطلب، وتعيد تنسيق العرض والمحاذاة فقط.

تطبيق المضيف: browser

الحدود المعيارية للإصدار

المضيف وحدود التنفيذ

المتصفح يشغّل البايت كود محليا ويطبق سقف 10000000 تعليمة لكل تشغيل. الحلقة التالية تنتهي بالصنف limit-stop عند هذا السقف. يعرض الجدول حدود المضيفين. الوحدة MiB = 1048576 bytes والوحدة KiB = 1024 bytes. تعني none غياب سقف منتج، وتعني n/a عدم التطبيق.

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

سقوف الموارد الثابتة
المورد المضيف الأصلي المتصفح
بايتات المصدر16 MiB1 MiB
الوحدات المعجمية1048576131072
عقد الصياغة1048576131072
عمق الصياغة256128
ذاكرة المترجم العاملة512 MiB128 MiB
بايتات البايت كود64 MiB8 MiB
الدوال655364096
الاستيرادات الخارجية40960
ثوابت الأعداد الصحيحة1048576131072
ثوابت الأعداد العائمة1048576131072
مراجع النصوص1048576131072
بايتات النصوص16 MiB2 MiB
حمولة سطر الإدخال65536 bytes65536 bytes
تعليمات البايت كود4194304524288
السجلات لكل دالة655368192
التعليمات المنفذةnone10000000
إطارات وقت التشغيل4096512
مواضع قيم وقت التشغيل1048576131072
ذاكرة التنفيذ المملوكة للآلة256 MiB64 MiB
الخرج الملتقطnone256 KiB
زمن الفحصnone2 s
زمن التنفيذnone3 s
الذاكرة الخطيةn/a256 MiB
وظائف العامل المتزامنةn/a1

يشمل المصدر كل بايت مقروء بما فيه علامة بداية النص. تشمل ذاكرة المترجم كل تخصيص حي للترجمة. تشمل ذاكرة التنفيذ الإطارات ومواضع القيم وإعارة النص ونصوص الإدخال المملوكة للتنفيذ، وتستبعد البرنامج الثابت والمكتبات وتخصيصات الشيفرة الخارجية. يتقدم فشل الحد البنيوي على حد الذاكرة عند العملية نفسها. فشل التخصيص دون السقف هو host-failure / allocation-failed.

يبدأ مؤقت الفحص حين يقبل العامل المحمّل المهمة، ومؤقت التنفيذ حين يقبل التشغيل بعد نجاح الفحص. لا يدخل التحميل في المؤقتين، ولا يدخل انتظار إدخال المستخدم في مؤقت التنفيذ. أول حد ملحوظ يحدد النتيجة؛ بلوغ الموعد ينهي العامل بسبب time-limit. يرفض حد الخرج الاستدعاء الذي يتجاوزه بأكمله ويبقي الخرج السابق جزئيا. ليس للتنفيذ الأصلي سقف منتج للتعليمات أو الوقت أو الخرج، مع بقاء الحد التمثيلي لعداد التعليمات.

تستخدم ASPL 0.2.0 صيغة البايت كود الخاصة بالإصدار 2. لا تقبل البنى الحالية البايت كود للإصدار 1. ليست الصيغة واجهة توافق عامة.

limit-ar · ASPL 0.2.0

المتصفح فقط

دالة ابدأ_الرئيسية() -> ص64 {
    طالما صواب {}
    أرجع 0.
}

النتائج المتوقعة والخرج الحرفي

browser: check success; limit-stop / execution-instruction-limit / ceiling 10000000; stdout ""
نزّل المصدر افتح في المحرر
limit-en · ASPL 0.2.0

المتصفح فقط

fn start_main() -> i64 {
    while true {}
    return 0;
}

النتائج المتوقعة والخرج الحرفي

browser: check success; limit-stop / execution-instruction-limit / ceiling 10000000; stdout ""
نزّل المصدر افتح في المحرر

الأسباب والنتائج: policy-rejection / foreign-imports-not-supported; limit-stop / execution-instruction-limit

تطبيق المضيف: browser

الحدود المعيارية للإصدار

الحدود المعيارية

هذه حدود أرشيف بيان المطابقة 0.1.1. يربط كل معرّف بالنص المرجعي الذي يملكه، ولا تصف ميزات إدخال ASPL 0.2.0.

ASPL-SEMANTIC-0403
يقتصر إصدار ASPL الأدنى على خمسة أنواع قابلة للتخزين، وتبقى النصوص ثابتة ومنشأة من القيم الحرفية فقط.
ASPL-SEMANTIC-0404
يقتصر إصدار ASPL الأدنى على خمسة أنواع قابلة للتخزين، وتبقى النصوص ثابتة ومنشأة من القيم الحرفية فقط.
ASPL-SEMANTIC-0405
يقتصر إصدار ASPL الأدنى على خمسة أنواع قابلة للتخزين، وتبقى النصوص ثابتة ومنشأة من القيم الحرفية فقط.
ASPL-SEMANTIC-0406
يقتصر إصدار ASPL الأدنى على خمسة أنواع قابلة للتخزين، وتبقى النصوص ثابتة ومنشأة من القيم الحرفية فقط.
ASPL-SEMANTIC-0407
يقتصر إصدار ASPL الأدنى على خمسة أنواع قابلة للتخزين، وتبقى النصوص ثابتة ومنشأة من القيم الحرفية فقط.
ASPL-SEMANTIC-0189
يقبل إصدار ASPL الأدنى ملف مصدر واحداً ولا يوفر الوحدات أو نظام حزم أو معاملات للبرنامج.
ASPL-BYTECODE-0531
صيغة ASPL bytecode خاصة ومتطابقة الإصدار وليست ABI عامة مستقرة.
ASPL-BYTECODE-0532
صيغة ASPL bytecode خاصة ومتطابقة الإصدار وليست ABI عامة مستقرة.
ASPL-BYTECODE-0533
صيغة ASPL bytecode خاصة ومتطابقة الإصدار وليست ABI عامة مستقرة.
ASPL-BYTECODE-0534
صيغة ASPL bytecode خاصة ومتطابقة الإصدار وليست ABI عامة مستقرة.
ASPL-BYTECODE-0535
صيغة ASPL bytecode خاصة ومتطابقة الإصدار وليست ABI عامة مستقرة.
ASPL-CLI-0605
لا يعزل التنفيذ الأصلي الشفرة الأجنبية غير الآمنة.
ASPL-CLI-0606
لا يعزل التنفيذ الأصلي الشفرة الأجنبية غير الآمنة.
ASPL-CLI-0607
لا يعزل التنفيذ الأصلي الشفرة الأجنبية غير الآمنة.
ASPL-CLI-0608
لا يعزل التنفيذ الأصلي الشفرة الأجنبية غير الآمنة.
ASPL-BROWSER-0347
لا تنشئ دالة إخراج المتصفح استيرادًا خارجيًا.
ASPL-BROWSER-0348
لا تضيف دالة إخراج المتصفح جسرًا لنظام الملفات.
ASPL-BROWSER-0349
لا تضيف دالة إخراج المتصفح جسرًا للشبكة.
ASPL-BROWSER-0350
لا تضيف دالة إخراج المتصفح جسرًا للخادم.
ASPL-DIST-0109
يستهدف الإصدار الأصلي الأول Linux x86-64 مع glibc 2.34 أو أحدث فقط.
ASPL-DIST-0144
يوفر SHA-256 فحص سلامة فقط، من دون مصادقة للناشر أو توقيع للإصدار.
ASPL-PERF-0161
تقتصر ادعاءات أداء البناء والمتصفح على الجهاز والبروتوكول والمتصفحات المثبتة في المواصفة.
ASPL-CONFORMANCE-0672
لا يدّعي إصدار ASPL الأدنى الجاهزية للإنتاج.
ASPL-CONFORMANCE-0673
لا يدّعي إصدار ASPL الأدنى الاستبدال الكامل للغة C.
ASPL-CONFORMANCE-0674
لا يَعِد إصدار ASPL الأدنى بمدة دعم أمني محددة.
ASPL-CONFORMANCE-0675
لا يدّعي إصدار ASPL الأدنى ثبات صيغة البايت كود العامة.

اعرف حدود C

المحوّلان وإعارة النص

على x86-64 Linux مع glibc، يستطيع برنامج ASPL أصلي تحميل أي مكتبة مشتركة يقبلها المحمّل الديناميكي لـglibc واستدعاء دالة مسماة حين يطابق نوعها الدقيق في C أحد محوّلات الاستدعاء الخارجي المدعومة. يدعم الإصدار الأدنى int(const char *) وdouble(double). تبقى إتاحة المكتبة وصلاحية المؤشر وسلوك الدالة الخارجية مسؤولية البرنامج.

مقبول: مكتبة ورمز حرفيان غير فارغين وبلا NUL، مع وسم عدم الأمان في الموضعين. مرفوض: تكرار المكتبة والرمز، توقيع لا يطابق المحوّل أو غياب الوسم.

المحوّل سي_صحيح__مؤشر_محرف_ثابت / c_int__const_char_ptr يحول (string) -> i64 إلى int (*)(const char *). قبل دخول C يرفض النص ذا NUL وينسخ البايتات ويضيف فاصلة النهاية. تنتهي الإعارة بعودة الدالة. يجوز القراءة فقط أثناء الاستدعاء ولا يجوز التعديل أو الاحتفاظ بالمؤشر. تحول نتيجة int بالقيمة، وتبقى القيم السالبة بيانات عادية.

المحوّل سي_مزدوج__مزدوج / c_double__double يطابق (f64) -> f64 مع double (*)(double). يمرر القيم الثنائية ويطبّع نتيجة NaN ويستعيد بيئة الحساب العائم. لا يفحص أي من المحوّلين errno أو أعلام الاستثناءات أو اصطلاحات أخطاء المكتبة.

يفحص check وbuild التصريحات بلا فتح مكتبات. يجهز التنفيذ كل الاستيرادات قبل دالة البداية بترتيب بايتات المكتبة ثم الرمز ثم رقم المحوّل. يفتح كل اسم مرة واحدة باستخدام RTLD_NOW | RTLD_LOCAL ثم يبحث عبر dlsym وdlerror. تمر الأسماء بلا تعديل وفق قواعد محمّل glibc. أول فشل يمنع دالة البداية ويغلق المقابض المفتوحة بالترتيب العكسي.

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

puts-ar · ASPL 0.2.0

المضيف الأصلي فقط

خاص بالمضيف الأصلي. يرفض المتصفح هذا الاستيراد بالصنف policy-rejection / foreign-imports-not-supported قبل التنفيذ، حتى إن لم يُستدع.

غير_آمن خارجي اطبع_سطر(رسالة: نص) -> ص64
    = سي_صحيح__مؤشر_محرف_ثابت("libc.so.6", "puts").

دالة ابدأ_الرئيسية() -> ص64 {
    دع النتيجة = غير_آمن اطبع_سطر("مرحبا").
    إذا النتيجة < 0 { أرجع 1. }
    أرجع 0.
}

النتائج المتوقعة والخرج الحرفي

browser: check policy-rejection; policy-rejection / foreign-imports-not-supported; stdout ""
native: check 0; success / status 0; stdout "مرحبا\n"
نزّل المصدر افحص رفض المتصفح
aspl check puts-ar.aspl
aspl run puts-ar.aspl
puts-en · ASPL 0.2.0

المضيف الأصلي فقط

خاص بالمضيف الأصلي. يرفض المتصفح هذا الاستيراد بالصنف policy-rejection / foreign-imports-not-supported قبل التنفيذ، حتى إن لم يُستدع.

unsafe foreign اطبع_سطر(رسالة: string) -> i64
    = c_int__const_char_ptr("libc.so.6", "puts");

fn start_main() -> i64 {
    let النتيجة = unsafe اطبع_سطر("مرحبا");
    if النتيجة < 0 { return 1; }
    return 0;
}

النتائج المتوقعة والخرج الحرفي

browser: check policy-rejection; policy-rejection / foreign-imports-not-supported; stdout ""
native: check 0; success / status 0; stdout "مرحبا\n"
نزّل المصدر افحص رفض المتصفح
aspl check puts-en.aspl
aspl run puts-en.aspl
double-ar · ASPL 0.2.0

المضيف الأصلي فقط

خاص بالمضيف الأصلي. يرفض المتصفح هذا الاستيراد بالصنف policy-rejection / foreign-imports-not-supported قبل التنفيذ، حتى إن لم يُستدع.

غير_آمن خارجي جذر(قيمة: ع64) -> ع64
    = سي_مزدوج__مزدوج("libm.so.6", "sqrt").

دالة ابدأ_الرئيسية() -> ص64 {
    دع النتيجة = غير_آمن جذر(4.0).
    إذا النتيجة تطابق 2.0 { أرجع 0. }
    أرجع 1.
}

النتائج المتوقعة والخرج الحرفي

browser: check policy-rejection; policy-rejection / foreign-imports-not-supported; stdout ""
native: check 0; success / status 0; stdout ""
نزّل المصدر افحص رفض المتصفح
aspl check double-ar.aspl
aspl run double-ar.aspl
double-en · ASPL 0.2.0

المضيف الأصلي فقط

خاص بالمضيف الأصلي. يرفض المتصفح هذا الاستيراد بالصنف policy-rejection / foreign-imports-not-supported قبل التنفيذ، حتى إن لم يُستدع.

unsafe foreign جذر(قيمة: f64) -> f64
    = c_double__double("libm.so.6", "sqrt");

fn start_main() -> i64 {
    let النتيجة = unsafe جذر(4.0);
    if النتيجة matches 2.0 { return 0; }
    return 1;
}

النتائج المتوقعة والخرج الحرفي

browser: check policy-rejection; policy-rejection / foreign-imports-not-supported; stdout ""
native: check 0; success / status 0; stdout ""
نزّل المصدر افحص رفض المتصفح
aspl check double-en.aspl
aspl run double-en.aspl

الأسباب والنتائج: unknown-foreign-adapter, foreign-signature-mismatch, invalid-foreign-library-name, invalid-foreign-symbol-name, duplicate-foreign-target, unsafe-required-on-foreign-declaration, unsafe-required-on-foreign-call; load-failure / foreign-library-open-failed, foreign-symbol-lookup-failed; trap / foreign-string-contains-nul; host-failure / allocation-failed; policy-rejection / foreign-imports-not-supported

تطبيق المضيف: native

الحدود المعيارية للإصدار

انتقل إلى Linux

تحقق من المضيف أولا

الهدف Linux x86-64 الأساسي مع glibc 2.34 أو أحدث. يجب أن تكون النتائج Linux وx86_64 وglibc 2.34 أو أحدث. فشل تحديد مكتبة GNU libc لا يثبت التوافق. راجع الحدود المعيارية للمضيف.

uname -s
uname -m
getconf GNU_LIBC_VERSION
الحدود المعيارية للإصدار

الأرشيف والتحقق

إصدار ASPL الحالي هو 0.2.0. نزّل أرشيف Linux x86-64 وملف البصمة، ثم افحصهما قبل الفك. هذا إصدار مشروع معلن ولا يدعي المطابقة الرسمية الكاملة لـASPL MVP.

يتضمن مجلد التنزيل الأرشيف وSHA256SUMS والتراخيص. يحتوي المجلد المطابق داخل الأرشيف على aspl, LICENSE-MIT, LICENSE-APACHE وTHIRD-PARTY-NOTICES فقط. الترخيص باختيار MIT OR Apache-2.0.

نزّل أرشيف 0.2.0 وملف البصمة إلى المجلد نفسه. يحتوي ملف البصمة سطرا واحدا من 64 رقما سداسيا صغيرا ومسافتين ثم اسم الملف وسطر جديد. يجب أن يبلغ الفحص aspl-0.2.0-x86_64-linux-gnu.tar.xz: OK قبل الفك. البصمة تحقق سلامة المحتوى ولا تثبت هوية الناشر.

يتضمن هذا الأرشيف إشعارات Unicode لأن الأداة تحتوي جداول مشتقة منه. اقرأ النصوص الكاملة: MIT وApache-2.0 وإشعارات الطرف الثالث.

اعمل في مجلد تنزيل جديد لكل إصدار. افحص القائمة قبل الفك؛ يجب أن تطابق المجلد والملفات والصلاحيات المذكورة. توقف عند فشل أي أمر أو اختلاف القائمة أو النسخة، ولا تنفذ أوامر التثبيت التالية.

يضيف إصدار 0.2.0 القراءة التفاعلية بالسميتين اقرأ_سطر / read_line ويستخدم صيغة البايت كود الخاصة بالإصدار 2. صيغة البايت كود داخلية وليست واجهة توافق عامة.

sha256sum --check SHA256SUMS &&
tar -tvJf aspl-0.2.0-x86_64-linux-gnu.tar.xz

tar -xJf aspl-0.2.0-x86_64-linux-gnu.tar.xz &&
./aspl-0.2.0-x86_64-linux-gnu/aspl --version
الحدود المعيارية للإصدار

ثبّت الأداة وتحقق من PATH

بعد التحقق، ضع أداة إصدار 0.2.0 المستخرجة في مسارك أو ثبّت بناء المصدر محليا. يجب أن تطبع aspl 0.2.0. وحدة التحكم المكتبية اختيارية وتبنى منفصلة.

يجب أن يحل command -v aspl إلى $HOME/.local/bin/aspl. إن لم يحدث ذلك استخدم export PATH="$HOME/.local/bin:$PATH" في الصدفة الحالية. للاستمرار أضف السطر نفسه يدويا إلى ~/.bashrc في Bash أو ~/.zshrc في Zsh. في Fish استخدم fish_add_path "$HOME/.local/bin". افتح صدفة جديدة وأعد فحص المسار والنسخة.

للتثبيت بإدارة المسؤول بعد الفحص نفسه استخدم sudo install -m 0755 ./build/aspl /usr/local/bin/aspl. افحص المسار حتى لا تحجب نسخة قديمة الأداة المختارة.

لبناء وحدة التحكم المكتبية على Linux ثبّت Qt 6.11 وCMake 3.21 أو أحدث، ثم نفّذ أوامر البناء. يحدد الخيار --aspl أداة ASPL التي يستخدمها التشغيل. الملف المختار من سطر الأوامر لا يبدأ حتى تختار Run.

test "$(./build/aspl --version)" = "aspl 0.2.0" &&
install -d "$HOME/.local/bin" &&
install -m 0755 ./build/aspl "$HOME/.local/bin/aspl"
command -v aspl
aspl --version
cmake -S projects/terminal -B build/terminal &&
cmake --build build/terminal &&
build/terminal/aspl-console --aspl ./build/aspl docs/examples/input.en.aspl
الحدود المعيارية للإصدار

الترقية والتراجع والإزالة

للترقية أعد فحص المضيف وتنزيل الإصدار الجديد والتحقق والفك وفحص النسخة المستخرجة ثم استبدل الأداة بأمر التثبيت نفسه. للتراجع اتبع الخطوات نفسها مع إصدار مؤرشف مختار وبصمته. كل إصدار منشور ثابت ولا يتغير تحت الاسم نفسه. لا توجد نسخة احتياطية آلية؛ احتفظ بالأرشيف إن أردت التراجع دون اتصال. أحدث إصدار فقط يتلقى الإصلاحات قبل 1.0.

الإزالة تحذف الأداة المختارة فقط، وتترك إعداد الصدفة والمصدر والبرامج المبنية والأرشيفات. احذف المسار الذي اخترته فقط.

بعد الإزالة شغّل command -v aspl لاكتشاف نسخة أخرى ما زالت على المسار.

rm -- "$HOME/.local/bin/aspl"

للموضع الذي يديره المسؤول فقط: sudo rm -- /usr/local/bin/aspl

الحدود المعيارية للإصدار
ارجع إلى المحرر