Bagaimana komite standar C ++ menguji ide desain mereka?

29

Apakah komite C ++ menguji spesifikasi desain baru mereka dengan semacam kompiler prototipe sebelum merilis standar baru? Atau apakah mereka merilis standar yang, pada dasarnya, hanya teoretis sampai kompiler besar mengimplementasikannya?

Matthew James Briggs
sumber
4
Boost bertindak sebagai prototipe untuk sejumlah besar perbaikan perpustakaan. Misal boost::shared_ptr=> std::shared_ptr.
MSalters
6
Saya agak berharap sederhana "mereka tidak".
Sebb
@MSalters: Boost juga bertindak sebagai prototipe untuk sejumlah besar perbaikan bahasa inti (misalnya, boost.lambda=> C ++ 11 ekspresi lambda).
Jerry Coffin

Jawaban:

26

The C Komite Standar ++ memiliki peraturan dan aturan, tetapi sebagian besar yang berpusat di sekitar struktur organisasi, cara mengajukan proposal, suara, penerbitan standar, dll dan tidak begitu banyak pada rincian teknis dari standar sendiri atau bagaimana dapat diuji.

Tidak ada persyaratan formal untuk "menguji" fitur atau desainnya sejauh yang saya tahu. C ++ juga agak unik karena tidak ada referensi atau implementasi "primer" (mis. Microsoft CLR, Oracle JDK, Zend PHP). Namun, anggota komite terdiri dari banyak organisasi dengan pengetahuan mendalam tentang bahasa dan implementasi kompiler. Misalnya, jika Anda mengikuti tautan sebelumnya, Anda akan melihat perwakilan dari Microsoft dan Intel yang keduanya memiliki kompiler C ++ yang sangat dihormati. Red Hat dan beberapa perusahaan lain yang berkontribusi pada GCC juga terlibat.

Saat mengusulkan fitur baru, anggota komite sudah memiliki ide yang cukup bagus, apakah itu layak, apakah mungkin bertentangan dengan fitur lain, atau menyebabkan tata bahasa menjadi ambigu dengan cara yang menyulitkan penguraian yang tidak perlu. ( ini adalah pertanyaan bagus tentang tata bahasa C ++ )

Jawaban singkatnya adalah "tidak, panitia tidak perlu menguji desain mereka menggunakan prototyping." Namun, tidak banyak yang perlu karena anggota komite adalah ahli dalam C ++ yang memahami semua detail halus pada tingkat yang tidak dimiliki oleh sebagian besar programmer. Ingat, orang-orang ini adalah arsitek bahasa yang ahli dalam teori bahasa dan desain kompiler.

Mengingat keterlibatan vendor kompiler dalam proses, adalah layak bahwa satu atau lebih dari mereka dapat membuat prototipe fitur baru, tetapi sekali lagi, tidak ada persyaratan formal untuk ini juga tidak ada sesuatu yang telah saya baca di dokumen yang tersedia untuk umum dari Komite C ++.

Mereka juga cenderung sangat konservatif, secara bertahap menambahkan fitur baru yang memiliki permintaan di dunia nyata tanpa menentukan sejumlah besar fitur baru yang mungkin terbukti berisiko. Bahkan dalam beberapa tahun terakhir mereka telah menambahkan fitur baru yang ada sebagai ekstensi berpemilik atau perpustakaan open-source yang sudah berfungsi di dunia nyata. Sebagai contoh, C ++ 11 dan C ++ 14 menggabungkan bagian-bagian Boost , yang telah diuji di dunia nyata dalam berbagai kompiler dan lingkungan eksekusi. Tidak perlu menguji sesuatu yang sudah diuji.

Komunitas
sumber
5
ConceptGCC dan ConceptClang adalah dua contoh kompiler (atau lebih tepatnya fork of compiler) yang secara eksplisit dibuat untuk membuat prototipe dan mendapatkan pengalaman nyata dengan fitur bahasa yang kompleks. Konsep juga merupakan contoh bagaimana fitur bahasa menyeluruh dirancang dalam C ++: Konsep telah ada sejak tahun 1998, pertama sebagai ide informal untuk berbicara tentang Template C ++, kemudian pada tahun 2006 sebagai fitur bahasa yang diusulkan oleh Bjarne sendiri, dan juga diimplementasikan dalam ConceptGCC Dari dulu. Mereka mungkin ...
Jörg W Mittag
3
... berakhir di C ++ 17, yang berarti bahwa mereka akan matang selama sekitar 10 tahun sebagai implementasi dan 20 tahun sebagai sebuah ide.
Jörg W Mittag
2
Ini sebagian besar salah, saya pikir. Fitur baru biasanya membutuhkan sebuah implementasi pertama. Satu kali ini tidak terjadi, kami mendapat ekspor.
isanae
5
Paragraf terakhir adalah omong kosong. Komite C sangat konservatif, tetapi C ++ menambahkan segala macam hal baru sepanjang waktu dengan sedikit pertimbangan untuk apa kekacauan itu membuat bahasa atau apakah itu benar-benar memecahkan masalah yang orang ingin pecahkan.
R ..
1
@R .. Saya tidak setuju. C ++ 11 adalah anomali, tetapi termasuk banyak hal yang sudah ada (lihat komentar Boost saya, misalnya). Untuk sebagian besar kehidupan C ++ telah berkembang sangat lambat, yang merupakan salah satu keluhan utama yang dimiliki banyak pengembang tentang bahasa.