عائلة الأعداد الدقيقة
لبات 0.7.0 · الإصدار الحالي
العروض والمجالات والحرفيات والعمليات والتحويل والتحليل العددي.
محتويات الصفحة
الأنواع والمجالات
| العربية | English | الحد الأدنى | الحد الأعلى |
|---|---|---|---|
ص8 |
i8 |
-128 |
127 |
ص16 |
i16 |
-32768 |
32767 |
ص32 |
i32 |
-2147483648 |
2147483647 |
ص64 |
i64 |
-9223372036854775808 |
9223372036854775807 |
ط8 |
u8 |
0 |
255 |
ط16 |
u16 |
0 |
65535 |
ط32 |
u32 |
0 |
4294967295 |
ط64 |
u64 |
0 |
18446744073709551615 |
ع32 / f32 هو IEEE 754 binary32، وع64 / f64 هو binary64. كل زوج اسمي يشير إلى نوع واحد دقيق. لا يجوز إعادة تعريف هذه الأسماء أو أسماء التحليل والتنسيق العددي.
حرفيات المصدر
العدد العشري ذو الأصفار البادئة عشري. يقبل السداسي عشر اللاتيني 0x/0X الأرقام وa..f/A..F، ويقبل 0س الأرقام وا ب ت ث ج ح. يقبل الثنائي 0b/0B أو 0ث. يحتاج كل بادئ رقما واحدا على الأقل. تسمح _ بين رقمين صحيحين فقط، فلا تلامس البادئ أو النقطة أو الأس ولا تبدأ أو تنتهي أو تتكرر. لا توجد لاحقات نوعية أو ثماني أو عائم سداسي عشر أو حرفيات NaN أو infinity. النقطة منهي للعبارة ما لم تبدأ كسرا: 1. عدد صحيح ثم منهي و1.0. عدد عائم ثم منهي.
للعائم العشري كسر بأرقام على جانبي . أو أس e أو E بإشارة اختيارية ورقم واحد على الأقل. يقبل 1e2 و1.0e-2، ولا يقبل .5. إشارة المصدر عامل وحادي وليست جزءا من رمز الحرفية. لا تمزج أبجديتي الأساس في رمز واحد. كل الأرقام ASCII حتى مع البادئات العربية.
السياق والأسبقية
الأسبقية من الأقوى إلى الأضعف هي الاستدعاء والفهرسة والحقل والتجميع، ثم ! - ~، ثم * / %، ثم + -، ثم الإزاحات، ثم & ثم ^ ثم |، ثم المقارنات المرتبة، ثم المساواة، ثم AND المنطقي ثم OR المنطقي. العمليات الثنائية يسارية والوحادية يمينية.
نوع السياق يأتي من التصريح أو الإسناد أو المعامل أو الإرجاع أو الحقل أو القائمة أو النتيجة أو معامل مكتوب. العدد بلا سياق هو i64 أو f64. يقبل السالب المباشر أصغر قيمة موقعة، ويمتد حرفي u64 السياقي إلى 18446744073709551615. لا يختار الفاحص أصغر نوع مناسب ولا يحول قيمة مكتوبة سابقا.
عمليات الصحيح
الجمع والطرح والضرب والقسمة تحتاج نوعا متطابقا وتعيده، و% للصحيح فقط. فائض الجمع والطرح والضرب والسالب الصحيح الموقع يوقف التنفيذ بـinteger-overflow بدلا من الالتفاف. يرفض الفحص السالب الوحادي لعدد صحيح غير موقع مكتوب النوع بالسبب numeric-operator-not-supported. القسمة تقطع نحو الصفر، والباقي بإشارة المقسوم، والصفر أو أصغر موقّع على -1 يوقف التنفيذ. تعمل ~ & ^ | << >> بعرض المعامل بالضبط. عد الإزاحة أي عدد صحيح، ولا يحول إلى نوع الطرف الأيسر. العدد السالب أو الذي يساوي العرض أو يتجاوزه يوقف التنفيذ بـinvalid-shift-count. اليسرى تطرح البتات العالية، واليمنى غير الموقعة تصفر والعلامية تمد الإشارة.
العائم والتحويل الصريح
كل عملية f32 أو f64 تقرب لأقرب زوجي عند عرضها قبل العملية التالية. لا يوجد دمج مضاعفة وجمع. تبقى الأعداد دون العادية، والصفر الموقع، واللانهاية، ونتائج IEEE للقسمة على الصفر. تسوى NaN الناتجة إلى NaN هادئة موجبة، ومقارنتها المرتبة كاذبة.
يطبق التحويل الصريح أي اسم نوع على تعبير عددي فقط. تحويل الصحيح إلى صحيح يفحص المدى، والصحيح إلى العائم يقرب العدد الرياضي مباشرة إلى عرض الهدف لأقرب زوجي، وكل صحيح منته؛ لذلك يتحول أكبر u64 إلى 2^64 في f64. العائم إلى صحيح يقطع أولا ثم يفحص المدى، وتحويلات العرض العائم تقرب ولا توقف التنفيذ. الفشل المعتمد على قيمة التحويل لا يقع إلا إذا وصل التنفيذ إليه؛ تصنيفاته below-range وabove-range وnan وpositive-infinity وnegative-infinity. تكمل التحويلات المتداخلة من الداخل وتحفظ كل نقطة تقريب.
التحليل والتنسيق
لكل نوع محلل ومنسق: حلل_ص8/parse_i8 ونسق_ص8/format_i8؛ حلل_ص16/parse_i16 ونسق_ص16/format_i16؛ حلل_ص32/parse_i32 ونسق_ص32/format_i32؛ حلل_ص64/parse_i64 ونسق_ص64/format_i64؛ حلل_ط8/parse_u8 ونسق_ط8/format_u8؛ حلل_ط16/parse_u16 ونسق_ط16/format_u16؛ حلل_ط32/parse_u32 ونسق_ط32/format_u32؛ حلل_ط64/parse_u64 ونسق_ط64/format_u64؛ حلل_ع32/parse_f32 ونسق_ع32/format_f32؛ حلل_ع64/parse_f64 ونسق_ع64/format_f64.
المحلل يأخذ string ويعيد result<T>، والمنسق يأخذ T بالضبط ويعيد string. نص الصحيح إشارة ASCII اختيارية ثم أرقام ASCII عشرية. نص العائم إشارة ASCII اختيارية وأرقام، وكسر اختياري بأرقام تالية، وأُس اختياري e أو E بإشارة ASCII اختيارية وأرقام، أو واحد من nan, inf, +inf, -inf.
هذه قواعد نص وقت التشغيل وليست قواعد حرفيات المصدر: ترفض المسافات والفواصل والبادئات واللاحقات وNUL والذيل والأرقام غير ASCII، ورفض .5 و1. للعائم. يفحص المحلل البنية كلها قبل المدى. الرسائل الحرفية هي invalid number for T أو number out of range for T (MIN through MAX) أو finite number out of range for T. النتيجة الفاشلة بلا تشخيص أو موضع أو أثر.
التنسيق ASCII حتمي وقابل للذهاب والإياب للقيم العائمة المنتهية، ويطبع -0 وnan وinf و-inf كما هي.
التخزين العددي
تخزن الروابط والمعاملات والنتائج وحقول السجلات والقوائم وحمولات النتائج الأنواع العشرة بدقة. لكل خانة محجوزة في قائمة رقمية عرضها: 1 بايت لـi8/u8، و2 لـi16/u16، و4 لـi32/u32/f32، و8 لـi64/u64/f64.
طول القائمة والسعة والرسوم منفصلة: القائمة الفارغة سعتها صفر، والسعة غير الفارغة بين الطول وmax(4, 2 * length)، ورسوم العناصر capacity * width. النسخ تشترك أولا ثم تنفصل عند التعديل، وتحرر الذاكرة بعد آخر مالك. لا يوجد عرض بايت عام أو وعد بعنوان أو محاذاة أو ترتيب بايتات أو مخطط C. توقف الذاكرة أو الإلغاء أو فشل التخصيص لا ينشر تعديلا جزئيا.
نطاق الإصدار والمراجع
تضيف قواعد الأعداد المؤرشفة لـ0.4.0 العروض العشرة والسداسي والثنائي والبتات والتحليل لكل نوع. تبقى قواعدها العددية في 0.7.0، لكن رقم البايت كود الحالي هو 7 وليس 4. سلك نتيجة المتصفح 3. البايت كود خاص وليس واجهة توافق عامة. لا تغيّر هذه الصفحة نص MVP القديم الذي حدد i64 وf64 فقط.
النجاح والفشل المقصود
التنفيذ: المتصفح والمضيف الأصلي · لبات 0.7.0
- لا يتطلب معرفة سابقة لفتحه وفحصه.
الإدخال: لا يحتاج إلى أسطر إدخال.
دالة ابدأ_الرئيسية() -> ص64 {
دع الحد: ط64 = 18446744073709551615.
دع مباشر: ع32 = 1.0000000596046448.
دع بتات: ط8 = 0سحح.
دع محول: ط8 = ط8(255).
إذا (نسق_ط64(الحد) لا يطابق "18446744073709551615") { أرجع 1. }
إذا (نسق_ع32(مباشر) لا يطابق "1.00000012") { أرجع 2. }
إذا ((بتات & 0س0ح) لا يطابق 15 أو (بتات >> 4) لا يطابق 15 أو محول لا يطابق 255) { أرجع 3. }
متغير بايتات: قائمة<ط8> = [0, 255].
متغير نسخة: قائمة<ط8> = بايتات.
نسخة[0] = بتات << 0.
إذا (بايتات[0] لا يطابق 0 أو نسخة[0] لا يطابق 255) { أرجع 4. }
اطبع("numeric types\س").
أرجع 0.
}
النتائج المتوقعة
{
"browser": {
"check": "success",
"class": "success",
"output": "numeric types\n",
"processStatus": 0
},
"native": {
"check": 0,
"status": 0,
"output": "numeric types\n"
}
}التنفيذ: المتصفح والمضيف الأصلي · لبات 0.7.0
- لا يتطلب معرفة سابقة لفتحه وفحصه.
الإدخال: لا يحتاج إلى أسطر إدخال.
دالة ابدأ_الرئيسية() -> ص64 {
دع بايت: ط8 = 256.
أرجع 0.
}
النتائج المتوقعة
{
"browser": {
"check": "source-error",
"class": "source-error",
"output": "",
"reason": "numeric-literal-out-of-range"
},
"native": {
"check": 1,
"status": 1,
"output": "",
"reason": "numeric-literal-out-of-range"
}
}التنفيذ: المتصفح والمضيف الأصلي · لبات 0.7.0
- لا يتطلب معرفة سابقة لفتحه وفحصه.
الإدخال: لا يحتاج إلى أسطر إدخال.
دالة ابدأ_الرئيسية() -> ص64 {
دع بايت: ط8 = ط8(256).
اطبع(نسق_ط8(بايت)).
أرجع 0.
}
النتائج المتوقعة
{
"browser": {
"check": "success",
"class": "trap",
"reason": "invalid-numeric-conversion",
"output": ""
},
"native": {
"check": 0,
"status": 5,
"reason": "invalid-numeric-conversion",
"output": ""
}
}حقول التشخيص تشرح الفرق بين رفض الحرفية وفخ التحويل.
اقرأ العائلات الكاملة: