Ketika VLA diperkenalkan pada C 1999, saya pikir itu adalah inovasi yang bagus untuk bahasa tersebut. Namun, setelah mempelajarinya dibuat opsional pada C 2011, saya bertanya-tanya apa yang menyebabkan perubahan statusnya, dan jika itu berarti fitur tersebut sebenarnya menuju usang. Jika demikian, apakah ada gagasan yang setara tentang manajemen otomatis data berukuran dinamis yang sedang dipertimbangkan untuk menggantikannya?
Saya mencoba menemukan dokumen alasan C 2011, tetapi sepertinya belum dipublikasikan.
c
language-features
c11
jxh
sumber
sumber
Jawaban:
Saya telah mendengar legenda bervariasi dari "itu harus opsional karena beberapa kompiler kecil harus dapat memenuhi C11 tanpa VLA" hingga "itu adalah kesalahan di tempat pertama". Namun, saya tidak pernah mendapat jawaban yang benar dan pasti. Pada akhirnya, saya tidak percaya ada orang yang benar-benar memilikinya karena alasannya (dengan asumsi - dan berharap - ada) tidak pernah diungkapkan (sejauh pencarian lama saya berjalan).
Dari Bab 4 (halaman 13) dari Dasar Pemikiran untuk Standar Internasional - Bahasa Pemrograman - C 5.10 (2003)
Tekankan milikku. Perhatikan bahwa keputusan ini bertentangan dengan alasan mereka sendiri. Namun, ada hal lain yang dibuat opsional. Sekarang Anda mendapatkan
__STDC_NO_VLA__
atau mendukung VLA. Ini adalah keputusan yang sangat aneh.sumber
Sejauh yang saya dapat menentukan dari dokumen komite publik (khususnya N1395 ), salah satu alasan utama untuk membuat VLA's (bersama dengan aritmatika dan threading) opsional adalah untuk memungkinkan untuk membuat kompiler C yang sesuai untuk prosesor tertanam kecil.
Kecenderungannya adalah bahwa vendor kompiler yang menargetkan sistem tertanam tetap pada standar C90, karena pengenalan fitur-fitur besar yang tidak diminta oleh pelanggan mereka.
sumber