Hubpost ini menyatukan sepuluh laporan teratas dari pembicara seperti Nicolai Josuttis, Timur Doumler, Andrey Davydov dan banyak lainnya.
C ++ 17/20/23, konsep, struktur data tidak berubah, konkurensi, paralelisme, metaprogramming - semua ini adalah topik konferensi C ++ Russia 2019 yang diadakan musim semi ini di Moskow. Lebih dari enam ratus peserta, pembicara internasional terkenal, laporan mendalam. Harap dicatat - laporan tersebut sedemikian rupa sehingga akan segera usang, dan Anda dapat menerapkan pengetahuan yang diperoleh bahkan sekarang.

Formatnya adalah sebagai berikut:
- Video YouTube wajib
- Penjelasan terperinci dari laporan dalam bahasa Rusia (dengan slide, jika ada)
- Biografi singkat pembicara
Jangan ragu untuk menulis komentar! Ngomong-ngomong, dalam daftar putar yang diterbitkan di bawah cut, tidak hanya ada 10 besar. Dan kami mematikan iklan di YouTube, sehingga tidak ada yang mengganggu.
Semua laporan beralih dari peringkat "junior" ke "senior", tetapi perbedaan antara tempat-tempat dari sepuluh besar adalah minimal dan sangat bergantung pada metodologi penilaian. Dengan sedikit mengubah metodologi, Anda dapat sangat mengubah tempat. Jadi perhatikan semuanya!
Daftar putar konferensi lengkap ada di sini .
Viktor Kirilov
Slide
C ++ dikenal karena kinerjanya, kecepatan, kurangnya sistem build standar dan manajer paket, serta kompleksitas dan lamanya kompilasi. Kemustahilan pengembangan berulang yang cepat adalah salah satu pembunuh terbesar dari produktivitas pengembang. Laporan ini ditujukan untuk semua orang yang ingin meningkatkan tiga poin terakhir: pertama, beberapa gagasan mengapa kompilasi dan penautan membutuhkan banyak waktu, kemudian daftar teknik dan alat untuk menyelesaikan masalah, misalnya:
- penyetelan dan infrastruktur - perangkat keras, sistem rakitan, caching, rakitan terdistribusi, diagnostik bottleneck, kebersihan kode;
- teknik - build unity, header yang dikompilasi, static vs shared;
- perubahan dalam sumber - idiom PIMPL, penggunaan templat yang lebih benar, anotasi;
- modul - apa itu ketika mereka muncul di C ++, yang akan berubah menjadi lebih tidak perlu karena ini.
Tentang Pembicara
Enam tahun pengalaman profesional dalam C ++ di industri game dan VFX. Sekarang Victor mengembangkan open source dan dari waktu ke waktu - pekerjaan kontrak yang biasa. Salah satu tugas menarik terakhir adalah implementasi kode hot-swapping di Nim runtime. Dia juga penulis doctest, "pustaka uji satu-header tercepat dan paling kuat untuk C ++." Dia tertarik mengembangkan game dan mesin game, kode performa tinggi, cryptocurrency, mengoptimalkan alur kerja dan mengintegrasikan praktik pengembangan yang baik, seperti analisis statis modern dan alat instrumentasi. Victor tinggal di Sofia (Bulgaria), dan pemrograman adalah profesi dan hobinya. Punya situs web Anda sendiri: http://onqtam.com/
Sergey Fedorov
Slide
Ketika kami bekerja dengan database, kami sering mendapatkan buffer mentah, sementara kami ingin menerima data dalam bentuk struktur C ++, kelas dan wadah.
Sebuah cerita tentang desain dan implementasi driver PostgreSQL dengan antarmuka manusia menggunakan hampir semua alat bahasa C ++ 17 yang tersedia saat ini.
Pendekatan yang dijelaskan dalam laporan dapat disesuaikan dengan hampir semua protokol tingkat aplikasi.
Tentang Pembicara
Sergey Fedorov, pengembang terkemuka di Yandex.Taxi, sedang mengembangkan kerangka kerja asinkron untuk backend Taksi. Penggemar metaprogramming dan open source.
Ivan Čukić
RAII merilis sumber daya yang diambil. Tetapi ada sumber daya yang tidak dapat dikembalikan - ini saatnya.
Salah satu kesalahan yang paling memakan waktu adalah membuat salinan yang tidak perlu. Semantik C ++ 11 Move mengambil langkah ke arah yang benar. Hal ini memungkinkan Anda untuk memberikan data yang tidak perlu kepada orang lain tanpa denda untuk membuat salinan dan tanpa risiko balapan menurut data ketika data memiliki banyak pengguna.
Dalam pembicaraan ini, kami akan mengambil bagian dalam diskusi tentang pendekatan arsitektur yang hanya memungkinkan penggunaan tipe khusus, tidak dapat disalin, dan dapat dipindahkan yang disebut tipe linier. Kami akan membahas fitur-fitur C ++ yang memungkinkan kami untuk memaksa penggunaan tipe-tipe seperti itu.
Untuk ini, diusulkan untuk menggunakan konsep dari C ++ 20, && - fungsi yang memenuhi syarat, dll.
Tentang Pembicara
Ivan Chukich adalah penulis Functional Programming di C ++, yang diterbitkan oleh Manning. Kontributor KDE adalah salah satu proyek open source open source terbesar. Selain itu, ia mengajarkan teknik pemrograman modern di universitas, mentransfer pengalaman selama 20 tahun kepada siswa-siswanya menggunakan C ++. Dia mempelajari pemrograman fungsional dalam C ++ selama dan sebelum post-doc, dan menggunakan teknik ini dalam proyek dunia nyata.
Rainer grimm
Apa yang umum di antara utas, atom, mutex, dan variabel kondisional? Semua ini adalah blok dasar untuk membangun aplikasi multi-utas di C ++, dan mereka dapat menyebabkan masalah bahkan untuk pengembang C ++ yang berpengalaman.
Situasi ini telah berubah secara dramatis di C ++ 17, dan terlebih lagi di C ++ 20/23. Dimulai dengan C ++ 17, sebagian besar algoritma standar tersedia dalam bentuk serial, paralel, dan vektor. Dalam standar terbaru, kami mengharapkan pelaksana dan memori transaksional, kami dapat mengharapkan peningkatan besar dalam futures dan coroutine. Untuk multithreading dan concurrency, ini baru permulaan. Diharapkan di masa depan, hanya mereka (pelaksana, memori transaksional, futures, coroutine) yang akan digunakan dalam abstraksi, dan utas, atom, mutex, dan variabel kondisional akan menjadi hanya detail implementasi.
Tujuan dari laporan ini adalah untuk melihat apa yang telah kami terima di C ++ 17 dan apa yang dapat kami harapkan di C ++ 20/23.
Tentang Pembicara
Rainer Grimm telah bekerja sebagai arsitek, pemimpin tim dan instruktur selama sekitar 20 tahun. Di waktu luangnya ia suka menulis artikel tentang C ++, Python dan Haskell dan berbicara di konferensi, sering menulis di blognya "Modern C ++". Dia saat ini memimpin seminar tentang C ++ dan Python modern. Bukunya C ++ 11 untuk Programmierer, C ++, C ++ Standardbibliothek, dan The C ++ Standard Library diterbitkan oleh O'Reilly dan Leanpub.
Andrey Davydov
Setiap programmer yang terjun ke dunia C ++ tahu bahwa templat tersebut turing-selesai, “kegagalan substitusi bukan kesalahan” dan dalam waktu kompilasi Anda dapat melakukan yang menakjubkan, dan kadang-kadang bahkan hal-hal yang berguna. Di sisi lain, pengembang C ++ yang berpengalaman memahami bahwa "Anda bisa" tidak berarti "Anda perlu" dan bahwa Anda harus membayar untuk penyalahgunaan metaprogramming. Salah satu kendala utama adalah waktu kompilasi, itulah sebabnya laporan ini membahas operasi / teknik mana yang paling mahal dari sudut pandang kompiler dan bagaimana menghindarinya.
Secara khusus, masalah-masalah berikut ini disorot:
- mengapa SFINAE adalah hal terakhir yang digunakan;
- mengapa std :: conditional_t didefinisikan secara tidak efisien;
- apa perbedaan antara implementasi tuple di Microsoft STL dan libc ++;
- kapan harus menggunakan std :: {kata hubung, disjungsi}, dan kapan harus menggunakan ekspresi lipatan;
- mengapa Anda tidak menggunakan std :: void_t;
- bagaimana konsep yang muncul dalam C ++ 20 dapat membantu.
Tentang Pembicara
Selama 3 tahun terakhir, Andrey telah bekerja di tim ReSharper C ++ di JetBrains. Di masa lalu ia terlibat dalam pemrograman industri di bidang yang terkait dengan GIS dan sistem visualisasi 3D.
Anton Polukhin
Setiap bahasa pemrograman baru berusaha menyatakan bahwa itu lebih cepat, lebih dapat diandalkan dan secara umum dalam semua hal beberapa kali lebih baik daripada C ++.
Mari kita lihat - di mana kebenaran, dan di mana fiksi. Biarkan pertempuran dimulai antara C ++ dan Asm / Rust / Go / Java / C # ...!
Tentang Pembicara
Perwakilan Rusia dalam ISO pada pertemuan internasional kelompok kerja mengenai standardisasi C ++. Penulis beberapa proposal yang diterima untuk standar bahasa C ++.
Penulis Boost libraries TypeIndex, DLL, Stacktrace dan maintainer aktif Any, Conversion, LexicalCast, Variant.
Dia adalah penulis Boost C ++ Pengembangan Aplikasi Cookbook dan Edisi Kedua.
Juan Pedro Bolívar Puente
C ++ Elite telah berbicara tentang semantik nilai, kekekalan, dan berbagi dengan berkomunikasi selama bertahun-tahun. Kami menunggu dunia yang lebih baik tanpa mutex, balapan, pengamat, pola "tim" dan semua jazz itu. Ketika datang untuk berlatih, ada masalah besar. Salah satu masalah utama adalah dalam struktur data.
Struktur data yang tidak dapat diubah tidak mengubah nilai untuk dapat bekerja dengannya - Anda perlu membuat nilai baru. Nilai-nilai lama tetap seperti apa adanya, dan oleh karena itu Anda dapat bekerja dengannya dari banyak utas tanpa memblokir. Ini memberi kita pemisahan sumber daya secara struktural, karena nilai-nilai baru dan lama dapat menggunakan data umum yang sama - mereka dapat dengan cepat dibandingkan dan sangat membatalkan sejarah disimpan sangat kompak. Itulah sebabnya mereka sangat bagus untuk digunakan dalam sistem multi-threaded dan interaktif: mereka menyederhanakan arsitektur perangkat lunak desktop dan memungkinkan server untuk meningkatkan skala. Ini adalah bahan rahasia yang telah menentukan keberhasilan Clojure dan Scala, dan bahkan pengembang JavaScript suka menggunakannya dengan sesuatu seperti Immutable.js Facebook.
Juan memperkenalkan Immer, pustaka C ++ yang mengimplementasikan struktur data yang modern, efisien, dan abadi.
Dalam ceramah ini, ia berbicara tentang manfaat arsitektural dari kekekalan dan menunjukkan bagaimana vektor persisten yang sangat efisien dan kuat dapat dibangun berdasarkan struktur data modern yang dibawa ke kesempurnaan (Relaxed Radix Balanced Trees). Kami melihat contoh program - editor teks yang dirancang dengan gaya arsitektur seperti itu. Kode ini bukan hanya super sederhana, tetapi juga mengungguli sebagian besar program serupa dalam kinerja. Tidak percaya Buka laporannya dan lihat sendiri!
Teknologi yang digunakan:
Tentang Pembicara
Juan adalah konsultan lepas dan insinyur dari Berlin yang berspesialisasi dalam desain berorientasi nilai, perangkat lunak interaktif, C ++ modern, pemrograman fungsional, dan penggunaan strategis open source. Sebelum itu, ia bekerja di Ableton dan terlibat dalam berbagai proyek yang berkaitan dengan musik. Dia juga berpartisipasi dalam proyek GNU dan ikut mendirikan Hacklab di Granada.
Andrey Davydov
Konsep yang muncul dalam C ++ 20 adalah topik yang panjang dan banyak dibahas. Terlepas dari kelebihan bahan yang terakumulasi selama bertahun-tahun (termasuk pidato para pakar kelas dunia), masih ada kebingungan di antara para programer terapan (yang tidak tertidur setiap hari dengan standar) apa konsep C ++ 20 dan apakah mereka kita perlu jika ada enable_if diperiksa selama bertahun-tahun. Sebagian kesalahannya adalah bagaimana konsep berkembang lebih dari ~ 15 tahun (Konsep Lengkap + Peta Konsep -> Konsep Lite), dan sebagian karena konsep tersebut ternyata tidak seperti alat serupa dalam bahasa lain (batas generik Java / C #, sifat Karat, ... )
Laporan dimulai dengan tinjauan singkat dari inovasi terkait konsep C ++ 20, setelah itu kita akan melihat implementasi beberapa kelas dan fungsi STL, membandingkan solusi C ++ 17 dan C ++ 20. Sebagai contoh:
- untuk mengimplementasikan std :: opsional sekarang Anda harus menggunakan hierarki pewarisan kedalaman 7, di C ++ 20 itu tidak akan diperlukan;
- untuk konstruktor default std :: pair sekarang membutuhkan 2 fungsi template, di C ++ 20 - 1 non-template;
- sering, kelas templat mengkhususkan sebagian, dalam kasus ketika parameter templat memiliki beberapa sifat khusus, lebih mudah dan lebih tepat untuk melakukan ini dengan konsep.
Penonton seharusnya memiliki gagasan umum tentang apa konsep dan SFINAE. Keakraban dengan pustaka C ++ standar juga akan berguna, pengetahuan tentang seluk-beluk dan detail implementasi tidak diperlukan.
Tentang Pembicara
Selama 3 tahun terakhir, Andrey telah bekerja di tim ReSharper C ++ di JetBrains. Di masa lalu ia terlibat dalam pemrograman industri di bidang yang terkait dengan GIS dan sistem visualisasi 3D.
Timur Doumler
Telah diketahui bahwa semantik inisialisasi adalah salah satu bagian paling kompleks dari C ++. Ada banyak jenis inisialisasi, dijelaskan oleh sintaks yang berbeda, dan mereka semua berinteraksi dengan cara yang kompleks dan menantang. C ++ 11 mengusung konsep "inisialisasi universal". Sayangnya, dia memperkenalkan aturan yang lebih kompleks, dan pada gilirannya, mereka diblokir di C ++ 14, C ++ 17 dan diubah lagi di C ++ 20.
Dalam laporan ini, Timur pertama-tama merangkum hasil historis dari evolusi inisialisasi dalam C ++. Dia memberikan tinjauan sistematis tentang versi saat ini dari aturan inisialisasi, masalah khas dan kejutan. Memperkenalkan aturan praktis tentang cara menggunakan semua aturan ini secara efektif. Dan akhirnya, Timur berbicara tentang proposal terbaru dalam standar, yang dapat membuat semantik inisialisasi C ++ 20 sedikit lebih nyaman.
Tentang Pembicara
Timur adalah pengembang C ++ yang berspesialisasi dalam suara dan musik, anggota komite ISO C ++, direktur program Audio Developer Conference (ADC). Dia berusaha untuk menulis kode bersih, mengembangkan alat yang baik, mempromosikan evolusi bahasa C ++, dan membangun komunitas inklusif.
Nicolai josuttis
C ++ 17 adalah kombinasi besar fitur baru kecil, baik dalam bahasa dan di perpustakaan. Kemampuan ini tidak hanya memungkinkan Anda melakukan lebih banyak hal baru, tetapi juga memberikan cara baru untuk menembak di kaki - jauh lebih sering daripada yang Anda harapkan. Ini bukan teori. Itu terjadi dalam kehidupan nyata, di sini dan sekarang.
Dalam laporan ini, Nikolai memilah semua perangkap ini, membahas alasan di balik ide dan arsitektur mereka, dan memberikan instruksi tentang cara mengatasi masalah. Sebagai efek samping, Anda dapat melihat lebih dalam fitur-fitur baru C ++ 17.
Tentang Pembicara
Nikolay adalah arsitek sistem independen, manajer teknis, penulis dan konsultan. Ia mengembangkan sistem perangkat lunak menengah dan besar untuk telekomunikasi, keuangan, dan manufaktur.
Ia dikenal luas di komunitas karena laporannya dan fakta bahwa ia menulis buku tentang C ++ ( C ++ Standard Library dan C ++ Templates ), berbicara tentang fitur-fitur baru bahasa tersebut.
Selama 20 tahun, ia adalah anggota aktif Komite Standardisasi C ++.
Daftar putar lengkap dengan semua laporan tersedia di sini . Kami mengingatkan Anda bahwa C ++ Rusia yang baru sudah dalam perjalanan dan akan diselenggarakan 31 Oktober - 1 November 2019 di St. Petersburg. Tiket untuk itu dapat dibeli di situs web resmi .