Seseorang membawa artikel ini ke perhatian saya bahwa klaim (saya memparafrasekan) istilah STL disalahgunakan untuk merujuk ke seluruh Perpustakaan Standar C ++ daripada bagian-bagian yang diambil dari SGI STL.
(...) ini mengacu pada "STL", meskipun faktanya sangat sedikit orang masih menggunakan STL (yang dirancang di SGI).
Bagian dari C + + Standard Library didasarkan pada bagian dari STL, dan bagian inilah yang banyak orang (termasuk beberapa penulis dan cplusplus.com yang terkenal error-ridden) masih disebut sebagai "STL". Namun, ini tidak akurat; memang, standar C ++ tidak pernah menyebutkan "STL", dan ada perbedaan konten antara keduanya.
(...) "STL" jarang digunakan untuk merujuk pada bit stdlib yang kebetulan didasarkan pada SGI STL. Orang-orang berpikir itu adalah seluruh perpustakaan standar. Itu bisa dimasukkan pada CV. Dan itu menyesatkan.
Saya hampir tidak tahu apa-apa tentang sejarah C ++ jadi saya tidak bisa menilai kebenaran artikel itu. Haruskah saya tidak menggunakan istilah STL? Atau ini opini yang terisolasi?
Jawaban:
"STL" ditulis oleh Alexander Stepanov pada hari-hari jauh sebelum C ++ distandarisasi. C ++ ada sejak tahun 80-an, tetapi apa yang sekarang kita sebut " C ++ " adalah bahasa yang distandarisasi dalam ISO / IEC 14882: 2014 (dan versi sebelumnya, seperti ISO / IEC 14882: 2011).
STL sudah banyak digunakan sebagai perpustakaan untuk C ++, memberikan akses programmer ke wadah, iterator dan algoritma. Ketika standardisasi terjadi, komite bahasa merancang bagian-bagian dari Perpustakaan Standar C ++ (yang merupakan bagian dari standar bahasa) untuk sangat cocok dengan STL.
Selama bertahun-tahun, banyak orang - termasuk penulis buku terkemuka, dan berbagai situs web - terus menyebut Perpustakaan Standar C ++ sebagai "STL", meskipun kedua entitas itu terpisah dan ada beberapa perbedaan. Perbedaan-perbedaan ini bahkan lebih nyata dalam standar C ++ baru yang akan datang, yang mencakup berbagai fitur dan secara signifikan mengubah beberapa kelas.
STL asli sekarang sering disebut "implementasi Perpustakaan Template Standar C ++" (agak mundur ke sejarah aktual!), Dengan cara yang sama seperti Microsoft Visual Studio atau GCC Anda mengirimkan implementasi Perpustakaan Standar C ++. Tetapi "Perpustakaan Templat Standar" dan "Perpustakaan Standar" bukanlah hal yang sama.
Pertempurannya adalah tentang apakah Perpustakaan Standar saat ini harus disebut "STL" secara keseluruhan atau sebagian, dan / atau apakah itu penting apa namanya.
Untuk "STL"
Ada aliran pemikiran yang mengatakan bahwa semua orang sekarang tahu bahwa "STL" berarti perpustakaan standar, sama seperti semua orang sekarang tahu bahwa "C ++" adalah bahasa berstandar ISO.
Ini juga termasuk mereka yang percaya bahwa itu tidak masalah asalkan semua pihak mengerti apa yang sedang dibicarakan.
Ini adalah istilah yang dibuat lebih lazim oleh sifat binatang, banyak yang membuat penggunaan fitur C ++ dikenal sebagai "templat".
Untuk "C ++ Standard Library" (atau stdlib)
Namun, ada aliran pemikiran lain - yang saya ikuti - yang mengatakan bahwa ini membingungkan. Orang yang belajar C ++ untuk pertama kalinya tidak tahu perbedaan ini, dan mungkin tidak melihat perbedaan bahasa yang kecil.
Penulis artikel itu telah berkali-kali bertemu dengan orang-orang yang percaya bahwa seluruh C + + Standard Library adalah STL, termasuk fitur yang tidak pernah menjadi bagian dari STL itu sendiri. Sebagian besar pendukung vokal "STL", sebaliknya, tahu persis apa yang mereka maksud dengan itu dan menolak untuk percaya bahwa tidak semua orang "mendapatkannya". Jelas, penggunaan istilah ini tidak seragam.
Selain itu, ada beberapa perpustakaan seperti STL yang sebenarnya merupakan implementasi dari STL asli, bukan Perpustakaan Standar C ++. Sampai baru-baru ini, STLPort adalah salah satu dari mereka (dan bahkan di sana, kebingungan berlimpah!).
Lebih lanjut, Standar C ++ tidak mengandung teks "STL" di mana saja, dan beberapa orang terbiasa menggunakan frasa seperti "STL termasuk dalam Perpustakaan Standar C ++", yang jelas-jelas salah.
Adalah keyakinan saya bahwa terus menyebarkan penggunaan istilah dengan cara ini hanya akan menyebabkan kesalahpahaman berlangsung selamanya. Sayangnya, mungkin sama sekali tidak produktif untuk mencoba mengubah sesuatu, bahkan jika itu seharusnya menjadi lebih baik. Kita mungkin terjebak dengan makna ganda selamanya.
Kesimpulan
Saya menghargai bahwa posting ini sedikit bias: Saya menulis artikel yang Anda tautkan. :) Pokoknya, saya harap ini membantu menjelaskan pertempuran sedikit lebih baik.
Pembaruan 13/04/2011
Berikut adalah tiga contoh sempurna seseorang yang menggunakan "STL" untuk merujuk ke seluruh Perpustakaan Standar C ++. Itu terus membingungkan saya bahwa begitu banyak orang bersumpah bahwa tidak ada yang pernah melakukan ini, ketika jelas terlihat hampir setiap hari.
sumber
std::iota
ada di dalamnya, karena ia tidak dapat membuatnya berfungsi. Ini adalah ekstensi non-standar SGI , yang mereka sebut "standar" ketika cocok untuk mereka karena itu "STL", dan semua orang tahu bahwa "STL" adalah bagian dari Perpustakaan Standar C ++, kan? Dan itu diperkenalkan di C ++ 0x, tetapi tidak tersedia di C ++ 03. Grrr.Tidak ada satu jawaban pun yang benar. Alexander Stepanov mengembangkan perpustakaan yang disebutnya STL (bekerja untuk HP pada saat itu). Perpustakaan itu kemudian diusulkan untuk dimasukkan dalam standar C ++.
Itu pada dasarnya pengembangan "bercabang". Panitia memasukkan beberapa bagian, menolak yang lain sepenuhnya, dan mendesain ulang beberapa (dengan partisipasi Alexander). Pengembangan perpustakaan asli kemudian dipindahkan ke Silicon Graphics, tetapi dilanjutkan secara terpisah dari perpustakaan standar C ++.
Setelah potongan-potongan yang ditambahkan ke dalam perpustakaan standar, beberapa bagian lain dari perpustakaan standar yang dimodifikasi untuk lebih cocok dengan apa yang telah ditambahkan (misalnya,
begin
,end
,rbegin
danrend
ditambahkan kestd::string
sehingga dapat digunakan seperti wadah). Sekitar waktu yang sama, sebagian besar perpustakaan (bahkan potongan-potongan yang sama sekali tidak terkait) dibuat menjadi template untuk mengakomodasi berbagai jenis (misalnya, aliran standar).Beberapa orang juga menggunakan STL sebagai bentuk singkat dari "Perpustakaan Standar".
Itu berarti ketika seseorang menggunakan istilah "STL" mereka bisa merujuk ke salah satu dari sekitar setengah lusin hal yang berbeda. Baik atau buruk, kebanyakan orang yang menggunakannya tampaknya mengabaikan banyaknya makna, dan menganggap bahwa semua orang akan mengenali apa yang mereka maksudkan. Hal ini menyebabkan banyak kesalahpahaman, dan setidaknya beberapa perang api serius yang membuat sebagian besar peserta terlihat bodoh karena mereka hanya membicarakan hal-hal yang sama sekali berbeda.
Sayangnya, kebingungan cenderung berlanjut tanpa henti. Jauh lebih nyaman untuk merujuk ke "STL" daripada sesuatu seperti "wadah, iterator, dan algoritme di pustaka standar C ++, tetapi tidak termasuk
std::string
, meskipun dapat bertindak seperti wadah." Meskipun "perpustakaan standar C ++" tidak cukup panjang dan canggung seperti itu, "STL" masih jauh lebih pendek dan lebih sederhana lagi. Sampai atau kecuali seseorang menemukan istilah yang lebih tepat (bila perlu), dan sama nyamannya, "STL" akan terus digunakan dan kebingungan akan terus terjadi.sumber
std
. Saya berbicara tentang "std" di "stdlib", yang merupakan singkatan dari "standar". Saya pikir cukup jelas apa artinya itu!std
adalah UB kecuali dalam beberapa kasus tertentu: kasus-kasus tambahan ini disebutkan dalam standar, dan dengan demikian masih sesuai; "standar" masih berlaku.Istilah "STL" atau "Perpustakaan Templat Standar" tidak muncul di mana pun dalam standar ISO 14882 C ++. Jadi merujuk ke pustaka standar C ++ sebagai STL salah. Istilah "C ++ Standard Library" atau "library standar" adalah apa yang secara resmi digunakan oleh ISO 14882:
STL adalah perpustakaan yang awalnya dirancang oleh Alexander Stepanov, independen dari standar C ++. Namun, beberapa komponen dari pustaka standar C ++ menyertakan komponen seperti STL
vector
,list
dan algoritma seperticopy
danswap
.Tapi tentu saja standar C ++ mencakup lebih banyak hal di luar STL, jadi istilah "C ++ standard library" lebih tepat (dan apa yang sebenarnya digunakan oleh dokumen standar).
sumber
std
namespace (IIRC).Saya telah membuat argumen yang sama baru-baru ini, tetapi saya percaya sedikit toleransi dapat diizinkan. Jika Scott Meyers membuat kesalahan yang sama, Anda berada di perusahaan yang baik.
sumber
-1
dari saya. Buku ini memang tentang STL dalam arti "bagian-bagian dari std lib yang berasal dari perpustakaan Stepanov". Luangkan waktu untuk membaca buku-buku TOC. Satu-satunya hal di luar STL asli yang dapat saya temukan adalahstd::string
, dan itu telah dilengkapi dengan wadah STL yang penuh.Dari FAQ Perpustakaan C ++ Standar C ++ (libstdc ++) :
STL (Standard Template Library) adalah inspirasi untuk potongan besar dari C + + Standard Library, tetapi istilah tersebut tidak dapat dipertukarkan dan tidak berarti hal yang sama. C ++ Standard Library mencakup banyak hal yang tidak berasal dari STL, dan beberapa di antaranya bahkan bukan templat, seperti
std::locale
danstd::thread
.Libstdc ++ - v3 menggabungkan banyak kode dari SGI STL (gabungan terakhir berasal dari rilis 3.3 ). Kode di libstdc ++ berisi banyak perbaikan dan perubahan dibandingkan dengan kode SGI asli.
Secara khusus,
string
bukan dari SGI dan tidak menggunakan kelas "tali" mereka (meskipun itu termasuk sebagai ekstensi opsional), tidak adavalarray
juga yang lain. Kelas-kelas sepertivector<>
berasal dari SGI, tetapi telah dimodifikasi secara luas.Informasi lebih lanjut tentang evolusi libstdc ++ dapat ditemukan di evolusi API dan dokumentasi kompatibilitas mundur .
The FAQ untuk STL SGI masih dianjurkan membaca.
FYI, per Maret 2018 bahkan situs web resmi STL www.sgi.com/tech/stl/ telah hilang .
sumber