Bahasa Melayu

Alat pembangun · Penukar sintaks

Masalah Norway: YAML 1.1 lwn 1.2 dan mengapa NO menjadi palsu

· Latar belakang

yaml format data penyahpepijatan

Teks NO kekal sebagai rentetan manakala laluan boolean lama dipalang
Ilustrasi vektor ToolAcre asal

Dalam YAML 1.1 nilai tidak disebut NO ialah boolean, iaitu cara Norway hilang daripada senarai negara. Siaran ini memberitahu sejarah penaipan tersirat YAML, spesifikasi 1.2 yang diubah dan sebab masalah itu berterusan dalam alat hari ini.

Senarai negara yang tiada satu — TIADA dihuraikan sebagai palsu dan laporan pepijat daripada pejabat Oslo

Pepijat klasik ialah kod negara yang tidak disebut `NO` menjadi palsu. Ujian ToolAcre membuktikan bahawa ia tidak berlaku di sini: kedua-dua pilihan skema mengekalkan `NO`, ya, tidak, hidup dan mati sebagai rentetan. Pembukaan cerita dengan Norway hilang dalam panel ini akan bercanggah dengan pelaksanaan.

Contoh tetap berguna sebagai amaran keserasian. Apabila pengguna YAML lain menggunakan peraturan warisan, penulis ToolAcre memetik rentetan samar-samar supaya pembaca hiliran tidak mentafsirkannya semula. Pembaca dan penulis dikonfigurasikan untuk mengelakkan kegagalan yang diterangkan oleh garis besar.

Norway tidak hilang dalam penukar ini: NO kekal teks

Repositori ini mendokumenkan JSON dan skema Teras js-yaml terhad dan gelagat skalar yang diperhatikan. Ia tidak mengandungi sumber YAML asal usul 2001, niat pengarang atau perbahasan reka bentuk sejarah. Tuntutan tersebut ditinggalkan dan bukannya dibina semula daripada ingatan.

Mekanisme semasa sudah cukup untuk panduan praktikal. Resolusi skalar biasa berlaku di bawah skema yang dipilih; nilai yang dipetik kekal sebagai teks; teg yang tidak disokong ditolak. Bukti tentang kod tidak boleh dipanjangkan ke dalam sejarah piawaian tidak bersumber.

Bukti repositori meliputi konfigurasi penghurai semasa, bukan sejarah asal YAML

YAML 1.1 biasanya dianggap sebagai ya, tidak, varian hidup dan mati sebagai boolean. Itu menjelaskan mengapa masalah Norway wujud dalam beberapa ekosistem. ToolAcre tidak mendedahkan suis 1.1 dan tidak sekali-kali menunjukkan penukaran perlapanan seksagesimal atau warisan di bawah mod sedemikian.

Gunakan bahaya untuk menyemak output penghurai luaran, bukan untuk meramalkan panel ini. Jika alat lain menghasilkan palsu, rekod pustaka dan skemanya. Hasil ToolAcre boleh berfungsi sebagai bacaan YAML 1.2 yang berbeza, tetapi bukan sebagai bukti bahawa pelaksanaan lain dikonfigurasikan secara tidak betul untuk kontraknya.

Legasi YAML 1.1 boolean menerangkan bahaya tetapi tidak didayakan di sini

Skema JSON yang ketat sahaja mengenali ejaan skalar yang serasi dengan JSON. Teras juga menyelesaikan nilai tilde dan kosong kepada integer null, heksadesimal atau `0o` dan nombor tidak terhingga. Kedua-duanya tidak mengembangkan perbendaharaan kata Boolean melebihi benar dan palsu.

Core Infinity dan NaN kemudiannya menjadi batal dalam JSON dengan amaran kerana JSON tidak mempunyai perwakilan untuk mereka. Oleh itu, perbezaan antara pilihan skema kelihatan dan kadangkala hilang, walaupun nilai Norway itu sendiri kekal stabil.

Kedua-dua pilihan yang dihantar ialah skema YAML 1.2

Tingkah laku warisan kekal di mana-mana penghurai lalai atau konvensyen aplikasi mengekalkannya. Penukar tidak boleh menginventori perpustakaan atau versi tersebut daripada bukti repositori. Uji pengguna sebenar dengan lekapan yang mengandungi perkataan samar-samar dan rupa angka.

Penulis YAML ToolAcre menambah petikan pelindung di sekeliling rentetan yang mungkin ditaip oleh pembaca yang lebih lama, termasuk `NO`, `yes`, `1.0`, `0755` dan teks yang kelihatan tarikh. Output keserasian ini boleh diukur dan lebih selamat daripada pernyataan menyeluruh tentang penggunaan parser moden.

Bahaya itu bertahan dalam parser lain; mengesahkannya daripada membuat generalisasi daripada alat ini

Tukar `countries: [SE, NO, DK]`, `answers: [yes, no, on, off]`, `mode: 0755`, `octal: 0o755`, `version: 1.10` dan `empty:`. Di bawah ketat, semua kecuali JSON-nilai asli kekal rentetan. Di bawah Teras, oktal menjadi 493 dan kosong menjadi batal; negara dan perkataan jawapan kekal rentetan.

Petik setiap token untuk memaksa teks. Kemudian tulis hasil JSON kembali ke YAML dan periksa petikan yang dipilih oleh penyeri bersiri. Perbandingan tepat kod ini mendedahkan peraturan alat tanpa berpura-pura melaksanakan mod YAML 1.1 yang tidak wujud.

Contoh yang berfungsi: kod negara dan penampakan skalar di bawah dua skema yang dihantar

Suis penghurai khusus bahasa, lalai versi dan pembungkus rangka kerja berada di luar pelaksanaan ini. Nama dan tingkah laku mereka berubah secara bebas. Rujuk dan uji komponen yang akan menggunakan konfigurasi.

Panel juga tidak mengesahkan semantik aplikasi. Mengekalkan `NO` sebagai rentetan adalah perlu untuk kod negara, tetapi ia tidak dapat membuktikan bahawa `NO` ialah nilai yang dibenarkan dalam skema tertentu.

Bawa pulang: petik rentetan anda, ketahui versi penghurai anda — dan cara menukar YAML kepada JSON dalam pelayar menjadikan penaipan tersirat kelihatan

Petikan teks yang boleh ditaip semula, ketahui skema yang sebenarnya digunakan dan uji pengguna. Dua pilihan ToolAcre YAML 1.2 menjadikan perbezaan terhadnya kelihatan dan sengaja mengelakkan perangkap Boolean warisan.

Pengajarannya bukanlah bahawa setiap penghurai berkelakuan satu arah. Penaipan tersirat ialah konfigurasi, dan penukar harus menyatakan konfigurasi itu. Di sini bukti mengatakan Norway kekal `"NO"`.

Apabila konfigurasi merentasi sistem, tambahkan lekapan kebolehoperasian yang mengandungi setiap token samar-samar yang dibenarkan oleh domain anda. Tukar atau huraikannya dalam setiap pengguna sebenar dan bandingkan nilai yang ditaip, tidak diberikan YAML. Ini menangkap jadual Boolean lama, peraturan perlapanan atau perbezaan nilai kosong sebelum senarai negara atau mod kebenaran mencapai pengeluaran. Memetik rentetan yang diketahui kekal sebagai pertahanan mudah alih yang paling mudah kerana ia merekodkan niat dalam dokumen dan bukannya bergantung pada lalai persekitaran.