لبات ASPLلبات 0.7.0

البحث في التوثيق

يبدأ البحث بالتوثيق الحالي بالعربية · لبات 0.7.0

اكتب اسما كاملا مثل read_line أو كلمات عن الموضوع.

    English
    ملفات المصدر

    افتح ملف .aspl أو .لبات بترميز UTF-8، حتى 1 MiB، في مسودة جديدة. يبقى الملف في هذا المتصفح ولا يُشغّل تلقائياً.

    بايتات مخزن منسوخة ونسخ مشتركة

    لبات 0.7.0 · الإصدار الحالي

    انسخ البايتات واملأها عبر مدى إخراج وعالج الاستخراج الزائد وأغلق مالكا أصليا مشتركا.

    محتويات الصفحة

    الغرض والتجهيز

    المضيف الأصلي فقط، لبات 0.7.0 على Linux x86-64 مع glibc. يحتاج libc.so.6 مع memset. لا أسطر إدخال أو وحدات مصدر أو ملفات بيانات. يفحص نسخ 00 FF 41 ويملأ المخزن المشترك بالقيم 20 20 20 ويعالج foreign.invalid_argument وforeign.closed ويكرر الإغلاق. لا خرج عند النجاح والحالة 0. تستخدم النسختان الاسم buffer.لبات؛ احفظهما في مجلدين منفصلين.

    التثبيت الأصلي · دليل C · الواجهة الخارجية · مجموعة C.

    المصدر العربي

    المضيف الأصلي فقط. نزّل النسخة الموردة دون تغيير.

    المضيف الأصلي فقط · لبات 0.7.0 · مصدر عربي

    التنفيذ: المضيف الأصلي فقط · لبات 0.7.0

    المتطلبات السابقة:
    • المضيف الأصلي فقط. لبات 0.7.0 وLinux x86-64 مع glibc؛ يحتاج المكتبة الموردة أساسي::سي وlibc.so.6 مع memset. لا وحدات مصدر أو ملفات بيانات. اسم النسختين buffer.لبات؛ احفظهما منفصلتين.

    الإدخال: لا يحتاج إلى أسطر إدخال.

    استورد أساسي::سي.
    غير_آمن خارجي املأ(هدف: سي::مخزن, بايت: ص32, عدد: ط64) -> مؤشر_سي
        = سي("libc.so.6", "memset", إخراج(هدف, عدد)).
    دالة ابدأ_الرئيسية() -> ص64 {
        متغير مصدر: قائمة<ط8> = [0, 255, 65].
        دع منشأ = سي::أنشئ_مخزن(مصدر).
        إذا ليس منشأ::نجاح { اطبع(منشأ::الخطأ::الرمز). أرجع 1. }
        دع مملوك = منشأ::قيمة.
        دع مرادف = مملوك.
        مصدر[0] = 7.
        دع منسوخ = سي::انسخ_بايتات(مملوك, ط64(3)).
        إذا ليس منسوخ::نجاح { أرجع 2. }
        غير_آمن املأ(مملوك, ص32(32), ط64(3)).
        دع معدل = سي::انسخ_بايتات(مرادف, ط64(3))::قيمة.
        إذا منسوخ::قيمة[0] ليس يطابق 0 أو منسوخ::قيمة[1] ليس يطابق 255 أو منسوخ::قيمة[2] ليس يطابق 65 { أرجع 3. }
        إذا معدل[0] ليس يطابق 32 أو معدل[1] ليس يطابق 32 أو معدل[2] ليس يطابق 32 { أرجع 4. }
        دع متجاوز_الحجم = سي::انسخ_بايتات(مملوك, ط64(4)).
        إذا متجاوز_الحجم::نجاح أو متجاوز_الحجم::الخطأ::الرمز ليس يطابق "foreign.invalid_argument" { أرجع 5. }
        إذا ليس سي::أغلق(مملوك)::نجاح { أرجع 6. }
        دع مغلق = سي::سعة(مرادف).
        إذا مغلق::نجاح أو مغلق::الخطأ::الرمز ليس يطابق "foreign.closed" { أرجع 7. }
        إذا ليس سي::أغلق(مرادف)::نجاح { أرجع 8. }
        أرجع 0.
    }
    

    اتبع تعليمات Linux لتنفيذ هذا المثال. نزّل المصدر لحفظه.

    تنزيل مخزن.لبات

    النتائج المتوقعة
    {
      "native": {
        "check": 0,
        "status": 0,
        "output": ""
      }
    }

    المصدر الإنجليزي

    المضيف الأصلي فقط. نزّل النسخة الموردة دون تغيير.

    المضيف الأصلي فقط · لبات 0.7.0 · مصدر إنجليزي

    التنفيذ: المضيف الأصلي فقط · لبات 0.7.0

    المتطلبات السابقة:
    • المضيف الأصلي فقط. لبات 0.7.0 وLinux x86-64 مع glibc؛ يحتاج المكتبة الموردة أساسي::سي وlibc.so.6 مع memset. لا وحدات مصدر أو ملفات بيانات. اسم النسختين buffer.لبات؛ احفظهما منفصلتين.

    الإدخال: لا يحتاج إلى أسطر إدخال.

    import core::c;
    unsafe foreign fill(target: c::Buffer, byte: i32, count: u64) -> c_ptr
        = c("libc.so.6", "memset", output(target, count));
    fn start_main() -> i64 {
        var source: list<u8> = [0, 255, 65];
        let created = c::buffer(source);
        if not created::ok { print(created::error::code); return 1; }
        let owned = created::value;
        let alias = owned;
        source[0] = 7;
        let copied = c::bytes(owned, u64(3));
        if not copied::ok { return 2; }
        unsafe fill(owned, i32(32), u64(3));
        let changed = c::bytes(alias, u64(3))::value;
        if copied::value[0] not matches 0 or copied::value[1] not matches 255 or copied::value[2] not matches 65 { return 3; }
        if changed[0] not matches 32 or changed[1] not matches 32 or changed[2] not matches 32 { return 4; }
        let oversized = c::bytes(owned, u64(4));
        if oversized::ok or oversized::error::code not matches "foreign.invalid_argument" { return 5; }
        if not c::close(owned)::ok { return 6; }
        let closed = c::capacity(alias);
        if closed::ok or closed::error::code not matches "foreign.closed" { return 7; }
        if not c::close(alias)::ok { return 8; }
        return 0;
    }
    

    اتبع تعليمات Linux لتنفيذ هذا المثال. نزّل المصدر لحفظه.

    تنزيل buffer.aspl

    النتائج المتوقعة
    {
      "native": {
        "check": 0,
        "status": 0,
        "output": ""
      }
    }

    فحص النتيجة

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

    aspl check buffer.لبات
    aspl run buffer.لبات
    aspl build -o c-buffer-program buffer.لبات
    ./c-buffer-program

    تصفح الصفحات