ملف ودالة بداية
ابدأ بملف واحد ودوال على المستوى الأعلى. لا توجد عبارات تنفيذية أو متغيرات عامة خارج الدوال. تستقبل دالة البداية صفرا من المعاملات وتعيد حالة العملية.
اقرأ المثال وافحصه تابع إلى العقد الدقيق الحدود المعيارية للإصدارجارٍ تحميل المحرر…
يجمع هذا البرنامج الأعداد من 1 إلى 10. عند نجاحه يطبع 55 ويعيد الحالة 0. عدّل المصدر ثم اضغط «شغّل».
تجري الترجمة والتنفيذ داخل متصفحك. لا يُرسل المصدر إلى خادم.
تابع إلى تعلّم اللغةابدأ بملف واحد ودوال على المستوى الأعلى. لا توجد عبارات تنفيذية أو متغيرات عامة خارج الدوال. تستقبل دالة البداية صفرا من المعاملات وتعيد حالة العملية.
اقرأ المثال وافحصه تابع إلى العقد الدقيق الحدود المعيارية للإصدارالأنواع القابلة للتخزين هي bool, i64, f64, string, c_ptr. تعني unit غياب النتيجة. استخدم دع / let للثبات ومتغير / var للتغيير. تتطلب الشروط قيمة منطقية. يجمع المثال الأعداد بحلقة ثم يطبع النص الحرفي عند النجاح.
صرّح بأنواع معاملات الدالة ونتيجتها. افحص المثال المرفوض ثم صحح الربط القابل للتغيير. التشخيص يحدد سبب الخطأ وموضعه، أما توقف وقت التشغيل فينهي التنفيذ فورا.
اقرأ المثال وافحصه تابع إلى العقد الدقيق الحدود المعيارية للإصداراربط اسما محليا بمكتبة ورمز حرفيين عبر محوّل محدد. ضع غير_آمن / unsafe على التصريح وعلى كل استدعاء. افحص المثال محليا قبل تشغيله على المضيف المدعوم.
يحتوي ملف .aspl واحد على تعريفات الدوال والتصريحات الخارجية. دالة الرئيسية / main إلزامية بلا معاملات وبنتيجة i64. المجال الصحيح للحالة 0..255، وأي قيمة أخرى توقف التنفيذ ولا تُختزل.
مقبول: دوال على المستوى الأعلى. مرفوض: متغير عام، عبارة خارج دالة، دالة بداية مفقودة أو استدعاؤها من المصدر.
المتصفح والمضيف الأصلي
دالة الرئيسية() -> صحيح64 {
أرجع 0;
}
النتائج المتوقعة والخرج الحرفي
browser: check success; success / main 0; stdout "" native: check 0; success / status 0; stdout ""نزّل المصدر افتح في المحرر
aspl check hello.aspl
aspl run hello.aspl
المتصفح والمضيف الأصلي
fn main() -> i64 {
return 0;
}
النتائج المتوقعة والخرج الحرفي
browser: check success; success / 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. ترتيب العرض لا يغير بايتات المصدر.
مقبول: كلمات عربية وإنجليزية في البرنامج نفسه. مرفوض: أرقام غير محولة خارج النصوص والتعليقات أو اسم يجمع الخطين. يعرض المحرر محارف التحكم غير المرئية بوضوح.
الأسباب والنتائج: non-ascii-digit, mixed-script-identifier
تطبيق المضيف: shared
لا توجد تحويلات ضمنية. العدد الصحيح i64 موقّع وفائضه يوقف التنفيذ. العدد f64 هو IEEE 754 binary64. النص ثابت ومصدره قيمة حرفية، والمؤشر c_ptr معتم وقابل للقيمة الفارغة. لا يمكن تخزين unit. يتيح الربط المهيأ استنتاج النوع. لا يوجد حجب للأسماء؛ المعاملات والروابط ثابتة ما لم يصرّح الرابط المحلي بالتغيير. تتطلب if, while شرطا منطقيا، وreturn نتيجة من النوع المعلن.
مقبول: تعديل رابط معلن للتغيير، ومقارنة تنتج شرطا منطقيا. مرفوض: رابط بلا تهيئة، تعديل رابط ثابت أو مزج أنواع الأعداد ضمنيا.
المتصفح والمضيف الأصلي
دالة الرئيسية() -> صحيح64 {
متغير المجموع: صحيح64 = 0;
متغير العدد: صحيح64 = 1;
طالما (العدد <= 10) {
المجموع = المجموع + العدد;
العدد = العدد + 1;
}
إذا (المجموع == 55) {
اطبع("55\n");
أرجع 0;
}
أرجع 1;
}
النتائج المتوقعة والخرج الحرفي
browser: check success; success / main 0; stdout "55\n" native: check 0; success / status 0; stdout "55\n"نزّل المصدر افتح في المحرر
aspl check sum-ar.aspl
aspl run sum-ar.aspl
المتصفح والمضيف الأصلي
fn main() -> i64 {
var المجموع: i64 = 0;
var العدد: i64 = 1;
while (العدد <= 10) {
المجموع = المجموع + العدد;
العدد = العدد + 1;
}
if (المجموع == 55) {
print("55\n");
return 0;
}
return 1;
}
النتائج المتوقعة والخرج الحرفي
browser: check success; success / main 0; stdout "55\n" native: check 0; success / status 0; stdout "55\n"نزّل المصدر افتح في المحرر
aspl check sum-en.aspl
aspl run sum-en.aspl
المتصفح والمضيف الأصلي
fn الرئيسية() -> صحيح64 {
متغير المجموع: صحيح64 = 0;
متغير العدد: صحيح64 = 1;
طالما (العدد <= 10) {
المجموع = المجموع + العدد;
العدد = العدد + 1;
}
إذا (المجموع == 55) {
print("55\n");
return 0;
}
أرجع 1;
}
النتائج المتوقعة والخرج الحرفي
browser: check success; success / 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 بلا خرج.
مقبول: دالة معرفة لاحقا أو استدعاء ذاتي. مرفوض: تحميل زائد، دالة متداخلة، عدد معاملات خاطئ أو مسار بلا إرجاع.
المتصفح والمضيف الأصلي
دالة مضروب(القيمة: صحيح64) -> صحيح64 {
إذا القيمة <= 1 {
أرجع 1;
}
أرجع القيمة * مضروب(القيمة - 1);
}
دالة الرئيسية() -> صحيح64 {
أرجع مضروب(5);
}
النتائج المتوقعة والخرج الحرفي
browser: check success; success / main 120; stdout "" native: check 0; success / status 120; stdout ""نزّل المصدر افتح في المحرر
aspl check functions-ar.aspl
aspl run functions-ar.aspl
المتصفح والمضيف الأصلي
fn مضروب(القيمة: i64) -> i64 {
if القيمة <= 1 {
return 1;
}
return القيمة * مضروب(القيمة - 1);
}
fn main() -> i64 {
return مضروب(5);
}
النتائج المتوقعة والخرج الحرفي
browser: check success; success / 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 بصورة طبيعية.
مقبول: تصحيح الرابط ثم إعادة الفحص. مرفوض: اعتبار كل حالة غير صفرية خطأ مصدر. استخدم صنف النتيجة والتشخيص للتمييز.
المتصفح والمضيف الأصلي
دالة الرئيسية() -> صحيح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
المتصفح والمضيف الأصلي
fn 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
المتصفح والمضيف الأصلي
دالة الرئيسية() -> صحيح64 {
متغير قيمة = 0;
قيمة = 1;
أرجع قيمة;
}
النتائج المتوقعة والخرج الحرفي
browser: check success; success / main 1; stdout "" native: check 0; success / status 1; stdout ""نزّل المصدر افتح في المحرر
aspl check corrected-ar.aspl
aspl run corrected-ar.aspl
المتصفح والمضيف الأصلي
fn main() -> i64 {
var قيمة = 0;
قيمة = 1;
return قيمة;
}
النتائج المتوقعة والخرج الحرفي
browser: check success; success / 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 / main 1
تطبيق المضيف: shared
التوقيع الوحيد المدمج هو اطبع / print: (string) -> unit. يكتب بايتات النص بالترتيب، بما فيها NUL، بلا سطر جديد أو تفريغ تلقائي. أضف \n صراحة. لا يمكن إعادة تعريف أي من الاسمين. يعرض المتصفح بايتات الخرج بأمان ولا يفسرها كترميز صفحة.
مقبول: نص واحد، بما فيه النص الفارغ. مرفوض: عدد أو معاملات متعددة أو تخزين النتيجة.
الكتابة متزامنة، والنص الفارغ لا يلمس المضيف. يعيد المضيف الأصلي محاولة الكتابات المقطوعة ويتابع الكتابات القصيرة. يبقى أي خرج مقبول قبل الفشل ظاهرا. لا توجد معالجة خاصة لإشارة SIGPIPE؛ قد ينهي الأنبوب المغلق العملية بها. إذا تجاهلت البيئة الإشارة أو حجبتها وأعادت الكتابة EPIPE، تكون النتيجة فشل مضيف بالحالة 8.
المتصفح والمضيف الأصلي
دالة الرئيسية() -> صحيح64 {
اطبع("مرحبا\n");
أرجع 0;
}
النتائج المتوقعة والخرج الحرفي
browser: check success; success / main 0; stdout "مرحبا\n" native: check 0; success / status 0; stdout "مرحبا\n"نزّل المصدر افتح في المحرر
aspl check output-ar.aspl
aspl run output-ar.aspl
المتصفح والمضيف الأصلي
fn main() -> i64 {
print("مرحبا\n");
return 0;
}
النتائج المتوقعة والخرج الحرفي
browser: check success; success / 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
تقبل الأداة ملف مصدر واحدا. يفحص 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
اقرأ المثال وافحصه
الحدود المعيارية للإصدار
المتصفح يشغّل البايت كود محليا ويطبق سقف 10000000 تعليمة لكل تشغيل. الحلقة التالية تنتهي بالصنف limit-stop عند هذا السقف. يعرض الجدول حدود المضيفين. الوحدة MiB = 1048576 bytes والوحدة KiB = 1024 bytes. تعني none غياب سقف منتج، وتعني n/a عدم التطبيق.
مقبول: تشغيل اللغة المشتركة في المتصفح. مرفوض: استيراد خارجي حتى إن لم يُستدع. لا ترسل المثال ذي الحلقة غير المنتهية إلى التشغيل الأصلي.
| المورد | المضيف الأصلي | المتصفح |
|---|---|---|
| بايتات المصدر | 16 MiB | 1 MiB |
| الوحدات المعجمية | 1048576 | 131072 |
| عقد الصياغة | 1048576 | 131072 |
| عمق الصياغة | 256 | 128 |
| ذاكرة المترجم العاملة | 512 MiB | 128 MiB |
| بايتات البايت كود | 64 MiB | 8 MiB |
| الدوال | 65536 | 4096 |
| الاستيرادات الخارجية | 4096 | 0 |
| ثوابت الأعداد الصحيحة | 1048576 | 131072 |
| ثوابت الأعداد العائمة | 1048576 | 131072 |
| مراجع النصوص | 1048576 | 131072 |
| بايتات النصوص | 16 MiB | 2 MiB |
| تعليمات البايت كود | 4194304 | 524288 |
| السجلات لكل دالة | 65536 | 8192 |
| التعليمات المنفذة | none | 10000000 |
| إطارات وقت التشغيل | 4096 | 512 |
| مواضع قيم وقت التشغيل | 1048576 | 131072 |
| ذاكرة التنفيذ المملوكة للآلة | 256 MiB | 64 MiB |
| الخرج الملتقط | none | 256 KiB |
| زمن الفحص | none | 2 s |
| زمن التنفيذ | none | 3 s |
| الذاكرة الخطية | n/a | 256 MiB |
| وظائف العامل المتزامنة | n/a | 1 |
يشمل المصدر كل بايت مقروء بما فيه علامة بداية النص. تشمل ذاكرة المترجم كل تخصيص حي للترجمة. تشمل ذاكرة التنفيذ الإطارات ومواضع القيم وإعارة النص، وتستبعد البرنامج الثابت والمكتبات وتخصيصات الشيفرة الخارجية. يتقدم فشل الحد البنيوي على حد الذاكرة عند العملية نفسها. فشل التخصيص دون السقف هو host-failure / allocation-failed.
يبدأ مؤقت الفحص حين يقبل العامل المحمّل المهمة، ومؤقت التنفيذ حين يقبل التشغيل بعد نجاح الفحص. لا يدخل التحميل في المؤقتين. أول حد ملحوظ يحدد النتيجة؛ بلوغ الموعد ينهي العامل بسبب time-limit. يرفض حد الخرج الاستدعاء الذي يتجاوزه بأكمله ويبقي الخرج السابق جزئيا. ليس للتنفيذ الأصلي سقف منتج للتعليمات أو الوقت أو الخرج، مع بقاء الحد التمثيلي لعداد التعليمات.
للتفاصيل التسلسلية راجع عقد البايت كود ونموذج قيم وقت التشغيل. صيغة البايت كود خاصة وذات إصدار وليست واجهة توافق عامة.
المتصفح فقط
دالة الرئيسية() -> صحيح64 {
طالما صواب {}
أرجع 0;
}
النتائج المتوقعة والخرج الحرفي
browser: check success; limit-stop / execution-instruction-limit / ceiling 10000000; stdout ""نزّل المصدر افتح في المحرر
المتصفح فقط
fn 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.0 من متطلبات بيان المطابقة الموسومة كحدود. يربط كل معرّف بالنص المرجعي الذي يملكه.
على 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، نزّل المصدر وافحصه ثم شغّله على المضيف الأصلي. تضيف دالة المكتبة السطر الجديد. افحص النتيجة السالبة بنفسك ولا تستخدم القيمة الموجبة غير المحددة كحالة العملية. فشل تخصيص الإعارة فشل مضيف؛ ولا يضمن النظام تحويل انهيار الدالة الخارجية أو احتفاظها بالمؤشر إلى توقف مضبوط.
المضيف الأصلي فقط
خاص بالمضيف الأصلي. يرفض المتصفح هذا الاستيراد بالصنف 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
المضيف الأصلي فقط
خاص بالمضيف الأصلي. يرفض المتصفح هذا الاستيراد بالصنف policy-rejection / foreign-imports-not-supported قبل التنفيذ، حتى إن لم يُستدع.
unsafe foreign اطبع_سطر(رسالة: string) -> i64
= c_int__const_char_ptr("libc.so.6", "puts");
fn 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
المضيف الأصلي فقط
خاص بالمضيف الأصلي. يرفض المتصفح هذا الاستيراد بالصنف 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
المضيف الأصلي فقط
خاص بالمضيف الأصلي. يرفض المتصفح هذا الاستيراد بالصنف policy-rejection / foreign-imports-not-supported قبل التنفيذ، حتى إن لم يُستدع.
unsafe foreign جذر(قيمة: f64) -> f64
= c_double__double("libm.so.6", "sqrt");
fn main() -> i64 {
let النتيجة = unsafe جذر(4.0);
if النتيجة == 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 x86-64 الأساسي مع glibc 2.34 أو أحدث. يجب أن تكون النتائج Linux وx86_64 وglibc 2.34 أو أحدث. فشل تحديد مكتبة GNU libc لا يثبت التوافق. راجع الحدود المعيارية للمضيف.
uname -s
uname -m
getconf GNU_LIBC_VERSION
الحدود المعيارية للإصدار
نُشر إصدار المشروع 0.1.0. نزّل aspl-0.1.0-x86_64-linux-gnu.tar.xz، وحجمه 126468 بايت وبصمته e022c777a6e3b61f721fdd02b0adb16a5a0dec25724b9daa545f476793d8fe61. يثبت حزم الأدلة ما اجتازه المرشح وما قبله مالك الإصدار بلا دليل؛ لذلك لا يدعي هذا النشر اكتمال مطابقة ASPL MVP الرسمية.
يتضمن مجلد التنزيل الأرشيف وSHA256SUMS والتراخيص. يحتوي المجلد المطابق داخل الأرشيف على aspl, LICENSE-MIT, LICENSE-APACHE وTHIRD-PARTY-NOTICES فقط. الترخيص باختيار MIT OR Apache-2.0.
نزّل الأرشيف وملف البصمة إلى المجلد نفسه. يحتوي ملف البصمة سطرا واحدا من 64 رقما سداسيا صغيرا ومسافتين ثم اسم الملف وسطر جديد. يجب أن يبلغ الفحص aspl-0.1.0-x86_64-linux-gnu.tar.xz: OK قبل الفك. البصمة تحقق سلامة المحتوى ولا تثبت هوية الناشر.
يتضمن هذا الأرشيف إشعارات Unicode لأن الأداة تحتوي جداول مشتقة منه. اقرأ النصوص الكاملة: MIT وApache-2.0 وإشعارات الطرف الثالث.
اعمل في مجلد تنزيل جديد لكل إصدار. افحص القائمة قبل الفك؛ يجب أن تطابق المجلد والملفات والصلاحيات المذكورة. توقف عند فشل أي أمر أو اختلاف القائمة أو النسخة، ولا تنفذ أوامر التثبيت التالية.
sha256sum --check SHA256SUMS &&
tar -tvJf aspl-0.1.0-x86_64-linux-gnu.tar.xz
tar -xJf aspl-0.1.0-x86_64-linux-gnu.tar.xz &&
./aspl-0.1.0-x86_64-linux-gnu/aspl --version
الحدود المعيارية للإصدار
يجب أن تطبع الأداة المستخرجة aspl 0.1.0. المجلد والأداة بصلاحية 0755 والتراخيص بصلاحية 0644. الأرشيف بلا روابط أو مسارات مطلقة أو صعود للمجلد الأب. اختر موضع تثبيت واحدا. المسار الافتراضي ملكك ولا يحتاج صلاحيات مسؤول.
يجب أن يحل 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 aspl-0.1.0-x86_64-linux-gnu/aspl /usr/local/bin/aspl. افحص المسار حتى لا تحجب نسخة قديمة الأداة المختارة.
test "$(./aspl-0.1.0-x86_64-linux-gnu/aspl --version)" = "aspl 0.1.0" &&
install -d "$HOME/.local/bin" &&
install -m 0755 aspl-0.1.0-x86_64-linux-gnu/aspl "$HOME/.local/bin/aspl"
command -v aspl
aspl --version
الحدود المعيارية للإصدار
نزّل المثال العربي أو الإنجليزي المرتبط واحفظه باسم hello.aspl. يجب أن تطبع النسخة aspl 0.1.0. ينجح الفحص بلا خرج على أي من القناتين وبالحالة 0. بعد ذلك تابع إلى عقد التشغيل والبناء.
aspl --version
aspl check hello.aspl
اقرأ المثال وافحصه
تابع إلى العقد الدقيق
الحدود المعيارية للإصدار
للترقية أعد فحص المضيف وتنزيل الإصدار الجديد والتحقق والفك وفحص النسخة المستخرجة ثم استبدل الأداة بأمر التثبيت نفسه. للتراجع اتبع الخطوات نفسها مع إصدار مؤرشف مختار وبصمته. كل إصدار منشور ثابت ولا يتغير تحت الاسم نفسه. لا توجد نسخة احتياطية آلية؛ احتفظ بالأرشيف إن أردت التراجع دون اتصال. أحدث إصدار فقط يتلقى الإصلاحات قبل 1.0.
الإزالة تحذف الأداة المختارة فقط، وتترك إعداد الصدفة والمصدر والبرامج المبنية والأرشيفات. احذف المسار الذي اخترته فقط.
بعد الإزالة شغّل command -v aspl لاكتشاف نسخة أخرى ما زالت على المسار.
rm -- "$HOME/.local/bin/aspl"
للموضع الذي يديره المسؤول فقط: sudo rm -- /usr/local/bin/aspl