أدوات المطور · محولات بناء الجملة
مشكلة النرويج: YAML 1.1 مقابل 1.2 ولماذا تصبح NO خطأ
· خلفية
yaml تنسيقات البيانات تصحيح الأخطاء
في YAML 1.1 القيمة غير المقتبسة NO هي قيمة منطقية، وهذه هي الطريقة التي تختفي بها النرويج من قوائم البلدان. يروي هذا المنشور تاريخ الكتابة الضمنية لـ YAML، وما تغيرت مواصفات 1.2، وسبب استمرار المشكلة في أدوات اليوم.
قائمة بالبلدان التي فقدت واحدة منها - لم يتم تحليلها على أنها كاذبة، وتقرير خطأ من مكتب أوسلو
الخطأ الكلاسيكي هو أن رمز البلد غير المقتبس `NO` أصبح خطأ. تثبت اختبارات ToolAcre أن ذلك لا يحدث هنا: كلا خياري المخطط يحتفظان بـ `NO`، نعم، لا، قيد التشغيل والإيقاف كسلاسل. إن افتتاح القصة باختفاء النرويج داخل هذه اللوحة من شأنه أن يتعارض مع التنفيذ.
ويظل المثال مفيدًا كتحذير التوافق. عندما يستخدم مستهلك آخر YAML القواعد القديمة، يقتبس كاتب ToolAcre سلاسل غامضة حتى لا يعيد القراء تفسيرها. تم تكوين القارئ والكاتب لمنع الفشل الذي يصفه المخطط التفصيلي.
لا تختفي النرويج في هذا المحول: NO يبقى نصًا
يوثق هذا المستودع مخططات js-yaml المقيدة JSON والمخططات الأساسية وسلوكها العددي الملحوظ. ولا يحتوي على مصادر لأصول YAML 2001 أو نوايا المؤلفين أو مناقشات التصميم التاريخية. تم حذف هذه الادعاءات بدلاً من إعادة بنائها من الذاكرة.
الآلية الحالية كافية لدليل عملي. تحدث الدقة العددية البسيطة ضمن مخطط محدد؛ تظل القيم المقتبسة نصًا؛ تم رفض العلامات غير المدعومة. لا ينبغي أن تمتد الأدلة حول الكود إلى تاريخ المعايير غير المصدر.
يغطي دليل المستودع تكوين المحلل اللغوي الحالي، وليس تاريخ أصل YAML
YAML 1.1 يتم التعامل بشكل شائع مع متغيرات "نعم" و"لا" و"تشغيل وإيقاف" على أنها قيم منطقية. وهذا يفسر سبب وجود مشكلة النرويج في بعض النظم البيئية. لا يعرض ToolAcre أي مفتاح 1.1 ولا يُظهر أبدًا التحويل الستيني أو الثماني القديم في ظل هذا الوضع.
استخدم الخطر لمراجعة مخرجات المحلل اللغوي الخارجي، وليس للتنبؤ بهذه اللوحة. إذا أنتجت أداة أخرى خطأ، فقم بتسجيل مكتبتها ومخططها. يمكن أن تكون نتيجة ToolAcre بمثابة قراءة متناقضة YAML 1.2، ولكن ليس كدليل على أن التنفيذ الآخر قد تم تكوينه بشكل غير صحيح لعقده.
تشرح القيم المنطقية القديمة YAML 1.1 الخطر ولكن لم يتم تمكينها هنا
يتعرف مخطط JSON الصارم على التهجئة العددية المتوافقة مع JSON فقط. بالإضافة إلى ذلك، يقوم Core بتحليل قيم التلدة والقيم الفارغة إلى أعداد صحيحة فارغة أو سداسية عشرية أو `0o` وأرقام غير محدودة. ولا يوسع أي منهما المفردات المنطقية إلى ما هو أبعد من الصواب والخطأ.
أصبح Core Infinity وNaN فيما بعد خاليين في JSON مع وجود تحذيرات لأن JSON ليس له تمثيل لهما. وبالتالي يكون الفرق بين خيارات المخطط مرئيًا ومفقودًا في بعض الأحيان، على الرغم من أن قيمة النرويج نفسها تظل مستقرة.
كلا الخيارين المشحونين هما YAML 1.2 المخططات
يستمر السلوك القديم أينما احتفظت به الإعدادات الافتراضية للمحلل اللغوي أو اصطلاحات التطبيق. لا يمكن للمحول جرد تلك المكتبات أو الإصدارات من أدلة المستودع. اختبر المستهلك الفعلي باستخدام أداة تحتوي على كلمات غامضة ومشابهة رقمية.
يضيف كاتب ToolAcre YAML علامات اقتباس وقائية حول السلاسل التي قد يكتبها القراء الأكبر سنًا بشكل مختلف، بما في ذلك `NO`، `yes`، `1.0`، `0755` والنص الذي يبحث عن التاريخ. يعد مخرجات التوافق هذه قابلة للقياس وأكثر أمانًا من البيان الشامل حول اعتماد المحلل اللغوي الحديث.
الخطر موجود في المحللين الآخرين. التحقق منها بدلا من التعميم من هذه الأداة
تحويل `countries: [SE, NO, DK]`، `answers: [yes, no, on, off]`، `mode: 0755`، `octal: 0o755`، `version: 1.10` و `empty:`. ضمن صارم، تظل جميع القيم الأصلية باستثناء JSON سلاسل. ضمن Core، يصبح الرقم الثماني 493 ويصبح فارغًا فارغًا؛ البلد والكلمات الجواب تبقى سلاسل.
اقتبس كل رمز لفرض النص. ثم اكتب النتيجة JSON مرة أخرى إلى YAML وتفحص علامات الاقتباس التي يختارها المُسلسِل. تكشف هذه المقارنة الدقيقة للتعليمات البرمجية عن قواعد الأداة دون التظاهر بتنفيذ وضع YAML 1.1 غير الموجود.
مثال عملي: رموز الدول والمتشابهات العددية ضمن المخططين المشحونين
توجد مفاتيح المحلل اللغوي الخاصة باللغة، والإعدادات الافتراضية للإصدار، وأغلفة إطار العمل خارج هذا التنفيذ. تتغير أسمائهم وسلوكهم بشكل مستقل. استشر واختبر المكون الذي سيستهلك التكوين.
لا تقوم اللوحة أيضًا بالتحقق من صحة دلالات التطبيق. يعد الاحتفاظ بـ `NO` كسلسلة أمرًا ضروريًا لرمز البلد، ولكن لا يمكن إثبات أن `NO` قيمة مسموح بها في مخطط محدد.
الوجبات الجاهزة: اقتبس سلاسلك، واعرف إصدار المحلل اللغوي الخاص بك - وكيف يؤدي تحويل YAML إلى JSON في المتصفح إلى جعل الكتابة الضمنية مرئية
اقتبس النص الذي يمكن إعادة كتابته، واعرف المخطط المستخدم بالفعل واختبر المستهلك. خيارا ToolAcre YAML 1.2 يجعلان الاختلافات المحدودة بينهما مرئية ويتجنبان المصيدة المنطقية القديمة عمدًا.
الدرس المستفاد ليس أن كل محلل يتصرف بطريقة واحدة. وهي أن الكتابة الضمنية هي تكوين، ويجب أن يذكر المحول هذا التكوين. تشير الأدلة هنا إلى أن النرويج تظل `"NO"`.
عندما يتقاطع التكوين مع الأنظمة، أضف أداة التشغيل البيني التي تحتوي على كل رمز مميز غامض يسمح به نطاقك. قم بتحويلها أو تحليلها في كل مستهلك حقيقي ومقارنة القيم المكتوبة، ولم يتم عرضها YAML. يؤدي هذا إلى التقاط جدول منطقي قديم أو قاعدة ثماني أو فرق قيمة فارغة قبل أن تصل قائمة البلدان أو وضع الأذونات إلى مرحلة الإنتاج. يظل اقتباس السلاسل المعروفة أبسط دفاع محمول لأنه يسجل الهدف في المستند بدلاً من الاعتماد على الإعدادات الافتراضية للبيئة.