Pertanyaan Apa perbedaan antara rentang dan array_view di pustaka gsl?


Dalam beberapa presentasi konferensi baru-baru ini saya pernah mendengar Bjarne Stroustrup dan yang lain menyebutkan pedoman pengkodean baru untuk C ++ dan beberapa jenis yang mendukungnya.

Secara khusus, saya ingat contoh dari span<T> dari pada (T* p, int n) sebagai parameter untuk suatu fungsi (pada waktu sekitar 32:00 ke pembicaraan); tetapi saya juga ingat saran untuk digunakan array_view<T>. Apakah mereka dua alternatif tetapi konsep yang sama? Atau apakah saya membingungkan hal-hal dan mereka sebenarnya tidak begitu terkait?

Saya tidak bisa menemukan definisi otoritatif tentang apa yang seharusnya mereka berdua lakukan.


75
2018-01-16 21:01


asal


Jawaban:


Kami berbicara dengan orang-orang di kelompok kerja perpustakaan dalam komite standar. Mereka menginginkan array_view mereka mencoba masuk ke standar untuk dibaca saja. Untuk pedoman inti, kami membutuhkan abstraksi yang dibaca dan ditulis. Untuk menghindari bentrokan antara standar (potensial) dan pedoman mendukung perpustakaan (GSL), kami mengganti nama kami (baca dan tulis) array_view untuk span: https://github.com/microsoft/gsl .


155
2018-01-16 22:26



Dalam CppCoreGuidlines Asli array_view diganti namanya menjadi span.

Lihat: https://github.com/isocpp/CppCoreGuidelines/pull/377

Ini dijelaskan demikian:

span adalah bounds-checked, alternatif yang aman untuk menggunakan pointer untuk mengakses array


37
2018-01-16 21:57



Dokumen P0122R (2016-02-12) dari Kelompok Kerja Evolusi Perpustakaan (LEWG)
secara resmi mengganti nama jenis array_view untuk span:

Changelog

Perubahan dari R0

  • Mengubah nama jenis yang diusulkan array_view untuk span mengikuti umpan balik dari LEWG di pertemuan Kona.
  • [...]

Kami juga bisa membaca:

Dampak pada Standar

Proposal ini adalah ekstensi perpustakaan murni.   Tidak perlu ada perubahan pada kelas standar, fungsi, atau header.   Itu akan ditingkatkan jika bisa tergantung pada byte mengetik   dan perubahan untuk mengetik perilaku aliasing yang diusulkan dalam P0257.

Namun - jika diadopsi - mungkin berguna untuk membebani beberapa fungsi pustaka standar untuk tipe baru ini (sebuah contoh akan menjadi copy()).

span telah diimplementasikan dalam standar C ++ (C ++ 11) dan berhasil   digunakan dalam alat analisis statis komersial untuk kode C ++ serta perangkat lunak produktivitas kantor komersial.   Sumber terbuka, implementasi referensi tersedia di https://github.com/Microsoft/GSL.

Dalam bab selanjutnya, dokumen ini menyajikan hanya-baca dan Baca tulis (yg mungkin berubah) mengakses:

Jenis dan konversi elemen

span harus dikonfigurasi dengan tipe elemennya   melalui parameter template ValueType,   yang diperlukan untuk menjadi tipe objek yang lengkap   itu bukan tipe kelas abstrak.    span mendukung akses read-only atau bisa berubah ke urutan yang dienkapsulasi.   Untuk mengakses data hanya-baca, pengguna dapat menyatakan a span<const T>,   dan akses ke data yang bisa berubah akan menggunakan a span<T>.

[...]


Lihat juga Panduan Dukungan Ulasan Perpustakaan: span<T> dari Marius Bancila (maret 2016) mendefinisikan span sebagai:

Itu Panduan Dukungan Panduan adalah implementasi Microsoft   dari beberapa jenis dan fungsi yang dijelaskan dalam C ++ Core Guidelines    dikelola oleh C ++ Foundation Standar.   Di antara jenis yang disediakan oleh GSL adalah span<T> sebelumnya dikenal sebagai array_view<T>.

span<T> adalah rentang non-kepemilikan dari memori yang berdekatan yang disarankan untuk digunakan sebagai gantinya   pointer (dan counter ukuran) atau kontainer standar (seperti std::vector atau std::array).


11
2018-03-24 18:45