
CoreHard adalah konferensi C ++ yang diadakan di Minsk dua kali setahun, pada musim semi dan musim gugur. Sejak 2015, kami telah berkembang dari komunitas kecil penggemar menjadi konferensi regional besar. Kami mencoba untuk menggabungkan pengetahuan para master yang diakui dari dunia C ++ dengan pengembangan gerakan C ++ lokal, secara aktif menarik pembicara dari perusahaan-perusahaan Belarusia, Rusia dan Ukraina lokal.
Kami sedang terburu-buru untuk membagikan kepada 10 warga Khabrovsk 10 video baru yang dipanggang dari
konferensi kami yang
baru -
baru ini ramai .
Jadi, mari kita pergi: 10 laporan teratas yang dinilai oleh pemirsa.
10. Model memori luar biasa - Alexey Tkachenko
Konsep memori dalam komputer jauh melampaui lingkup seperangkat chip memori dinamis βbesiβ yang dipasang di komputer. Memori telah lama dianggap sebagai ruang yang dapat dialamatkan, yang dikelola oleh modul manajemen memori - MMU. Pendekatan ini memungkinkan kita untuk membedakan antara memori fisik dan memori virtual, yang secara aktif digunakan dalam semua sistem operasi yang menggunakan konsep proses sebagai unit manajemen sumber daya.
Dalam laporan tersebut, kita akan berbicara tentang beberapa aplikasi yang tidak biasa dari metode perlindungan yang diterapkan dalam MMU, yaitu cara untuk mensimulasikan interaksi perangkat keras dengan prosesor pusat melalui file register.
Laporan ini akan mencakup sistem operasi Windows dan Linux, dan berbagai arsitektur.
Laporan ini akan menarik terutama untuk pengembang perangkat lunak tertanam (Embedded), namun teknik yang dijelaskan dalam laporan akan berguna bagi pengembang untuk komputer "besar".
Tentang PembicaraSelama lebih dari 12 tahun Alexey Tkachenko telah mengembangkan perangkat lunak untuk pengujian perangkat keras-perangkat lunak dan kompleks produk teknologi ruang angkasa di perusahaan Peleng. Alat kerja dasar: C ++ untuk tugas tingkat rendah dan interaksi dengan perangkat keras dan C # /. NET untuk perangkat lunak klien. Di waktu luangnya, ia menyukai Embedded pada mikrokontroler sederhana.

9. C ++ Trik Taksi - Anton Polukhin
Saat menulis kerangka kerja besar, kita harus berurusan dengan tugas-tugas khas yang solusinya telah lama diketahui. Namun, solusi ini tidak cukup efektif, dan jauh lebih baik dapat dilakukan.
Dalam laporan ini, kita akan berbicara tentang jerawat ramah-cache, mengoptimalkan pencatatan tipe pengguna, mengubah dari JSON / XML / YAML ke tipe pengguna dan teknik menarik lainnya.
Tentang PembicaraAnton Polukhin adalah 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.

8. C ++ 20: Hal-hal kecil - Timur Doumler
C ++ 20 membawa fitur-fitur baru yang luar biasa ke bahasa: modul, coroutine, konsep, operator pesawat ruang angkasa, dan banyak perpustakaan baru. Namun, selain itu, C ++ 20 juga menambahkan banyak perbaikan kecil, membuat C ++ lebih kuat dan ekspresif, sementara juga lebih aman dan holistik.
Dalam laporan ini, kita akan melihat perbaikan kecil dalam inti bahasa yang dapat membantu membuat hidup programmer lebih mudah: ekspresi lambda, CTAD, binding terstruktur, inisialisasi, dan banyak lagi.
Tentang PembicaraTimur Doumler adalah pengembang C ++ yang berspesialisasi dalam pengolahan suara dan teknologi sintesis, anggota aktif komite standardisasi ISO C ++ dan aktivis komunitas #include <C ++>.

7. Berjuang untuk latensi rendah tertinggi - Mateusz Pusz
Dalam laporan ini, kita melihat dunia C ++ melalui domain latensi rendah. Ini adalah dunia di mana alokasi memori dinamis dan pengecualian tidak diterima, di mana kita mungkin tidak memiliki cukup wadah STL dan di mana pengembang sering dipaksa untuk turun ke tingkat assembler untuk memastikan bahwa kode benar-benar melakukan apa yang dibutuhkan dengan cara optimal.
Tentang PembicaraMateusz Pusz adalah seorang arsitek, insinyur dan spesialis keamanan, konsultan, guru dan penginjil C ++ modern. Anggota kelompok kerja WG21 dan SG14 dari Komite Standardisasi C ++.

6. Windbg: saat kita tidak bermain - Alexander Golovach
Dalam praktik pemrograman, masalah sering muncul yang tidak dapat direproduksi dan diselidiki di sisi pengembang. Dalam situasi seperti itu, kadang-kadang bahkan tidak mungkin untuk mengatur akses jarak jauh ke mesin. Laporan ini akan membahas dan memberikan tip tentang debugging tugas-tugas khas seperti kerusakan, kebocoran sumber daya dan kesalahan sinkronisasi dalam aplikasi multithreaded menggunakan Windbg debugger sebagai contoh. Laporan ini akan menarik terutama untuk pengembang pemula yang bekerja dengan platform Windows.
Tentang PembicaraAlexander Golovach adalah seorang programmer sistem Windows, pengembang dari Checkpoint Endpoint Security. Ia berpartisipasi dalam penciptaan produk seperti Anti Eksploitasi, Anti Ransomware, dan Endpoint Forensik.

5. Bagaimana backend LLVM dalam C # bekerja - Egor Bogatov
LLVM berisi sejumlah besar optimisasi dan cocok sebagai backend untuk banyak bahasa pemrograman. Tetapi beberapa hal menjadi sedikit rumit untuk bahasa yang dikelola dan skrip JIT. Dalam laporan ini, Yegor akan berbicara tentang kesulitan yang dihadapi oleh pengembang C # ketika menerapkan backend LLVM.
Tentang PembicaraEgor Bogatov bekerja di tim .NET / Mono di Microsoft, tertarik dengan optimasi mikro dan LLVM.

4. Studi tentang buffering: peringatan asinkron, replikasi pembaruan, konsolidasi permintaan yang tertunda - Vadim Vinnik
Praktek mengembangkan aplikasi spesifik dapat mengarah pada pernyataan masalah, yang, dalam pemikiran matang, ternyata cukup umum untuk mengisolasinya menjadi abstraksi yang berpotensi berguna untuk berbagai aplikasi. Membawa solusi ke bentuk yang cocok untuk penggunaan berulang, berbeda dengan solusi yang memenuhi kebutuhan aplikasi tertentu, membutuhkan upaya mental tambahan untuk menyoroti berbagai aspek tugas dan untuk memodelkan mereka menggunakan bahasa. Laporan ini menyajikan pengalaman menerapkan tiga abstraksi, disatukan oleh tema umum - buffering data dalam pemrosesan multi-threaded. Kereta pemikiran dari analisis tugas untuk implementasi bahasa C ++ 17 ditampilkan.
Tentang PembicaraVadim Vinnik adalah kandidat ilmu fisika dan matematika, 10 tahun pengalaman dalam pengajaran pemrograman untuk siswa, termasuk di Universitas Nasional Kyiv Taras Shevchenko. Berpengalaman lebih dari 10 tahun dalam pemrograman industri (terutama di C / C ++ / C #), dengan fokus pada domain cadangan dan pemulihan data. Vadim - penulis buku "Bahasa dan Dasar-Dasar Pemrograman Algoritma: Bahasa C", "Dasar-dasar Pemrograman Berorientasi Objek dalam C ++"; penulis 29 publikasi ilmiah tentang teori pemrograman; penerjemah dari bahasa Inggris ke bahasa Rusia buku "Prinsip Pemrograman Berorientasi Objek" (Anton Eliens), "Menggabungkan Teori Pemrograman" (Charles Hoar, Hee Jifeng). Bidang minat: pemrograman dalam C ++ dan bahasa fungsional (Haskell).

3. SQL Static dalam C ++ 14 - Evgeny Zakharov
Pembicara akan berbicara tentang pengembangan
pustaka ORM
sqlite_orm untuk SQLite3 di C ++ 14 dan membagikan pengalamannya dalam mencoba membuat ORM yang dengannya Anda bisa melupakan pertanyaan teks dan bagaimana ia beradaptasi dengan C ++ menggunakan templat.
Tentang PembicaraEvgeny Zakharov adalah pengembang game C ++, penulis perpustakaan sqlite_orm.

2. Metaprogramming: membangun mesin negara yang terbatas - Sergey Fedorov
Menerapkan mesin negara dengan tangan menggunakan sakelar atau warisan dengan fungsi virtual sangat memakan waktu dan rawan kesalahan. Dalam laporan tersebut, pembicara berbicara tentang perpustakaan mesin negara AFSM (Another Finite State Machine), yang memungkinkan Anda menggunakan bahasa deklaratif untuk menggambarkan mesin negara. Dan juga tentang trik kecil dan trik metaprogramming pada contoh dari kode perpustakaan ini.
Tentang PembicaraSergey Fedorov, pengembang terkemuka di Yandex.Taxi, sedang mengembangkan kerangka kerja asinkron untuk backend Taksi. Penggemar metaprogramming dan open source.

1. Melindungi C ++ - Pavel Filonov
C ++ sering dibandingkan dengan nunchucks: di tangan yang terampil itu adalah alat yang efektif, dan di tangan seorang pemula ada bahaya bagi kesehatan seseorang. Perbandingan ini jelas terinspirasi oleh pendapat C ++ sebagai bahasa pemrograman yang tidak aman. Beberapa bahasa baru bahkan menggunakan pendapat ini untuk promosi mereka sendiri. Tetapi bahaya apa yang ada di balik istilah "tidak aman"? Jawaban terinci jelas akan memunculkan beberapa arah, salah satunya adalah cybersecurity. Laporan ini akan mencakup contoh-contoh sederhana dari mengeksploitasi kerentanan dalam kode C / C ++: mengeksekusi kode shell pada stack, kembali ke libc, menulis ulang vptr, heap overflow.
Tetapi penekanan utama ditempatkan pada perlindungan terhadap serangan-serangan seperti itu: burung kenari di tumpukan, ASLR, area yang tidak mungkin, pengujian dan pembersih, proses fuzzing, SDL.
Tentang PembicaraPavel Filonov berpartisipasi dalam pengembangan sistem Max Patrol SIEM sebagai pengembang C ++ dan Kaspersky MLAD sebagai Ilmuwan Data. Anggota komite program konferensi C ++ Rusia. Spesialisasi dalam topik CI / ML / kinerja.

Dan juga, beberapa laporan bonus!
Otomatiskan - Kirill Tikhonov
Kami akan menulis layanan web paling sederhana dari klien dan server di C ++. Pada bagian C ++ ini akan berakhir, dan pengaturan lingkungan dan infrastruktur akan pergi. Kami akan memastikan determinasi perakitan dan uji coba. Memfasilitasi pembaruan pustaka dependen berikutnya. Kami mengotomatiskan pemeriksaan statis, verifikasi kode, uji coba. Kami akan memastikan ketersediaan layanan, mengkonfigurasi infrastruktur, menyeimbangkan beban, dan menambahkan penskalaan otomatis dan manual. Dan pada akhirnya, kami akan mengatur pengiriman terus-menerus sehingga kode akan diproduksi 5 menit setelah permintaan, sementara bahkan perubahan yang tidak valid dan kesalahan programmer tidak akan dapat mempengaruhi pekerjaannya.
Apakah Anda masih menulis kode dengan tangan Anda? Lalu kami pergi ke Anda! - Sergey Sadovnikov
Dalam dunia pengembangan C ++, ada banyak tugas di mana Anda harus menulis sejumlah besar kode boilerplate: serialisasi, RPC, ORM, binding bahasa scripting, dll. Dan, tentu saja, ada banyak pendekatan yang menyederhanakan penulisan kode seperti untuk, katakanlah, untuk serialisasi: tulis semuanya dengan tangan Anda, masukkan semuanya ke makro, seret templat yang dipimpin oleh Hana, gabungkan satu dengan yang lain. Tetapi ada satu pendekatan yang akhirnya harus menggantikan yang lain: pembuatan kode. json, bson, xml, yaml, protobuf - ada banyak opsi untuk format di mana Anda dapat menyimpan data. Setiap format memiliki perpustakaan sendiri, dan bukan satu. Perpustakaan terus-menerus menawarkan cara mereka sendiri untuk mendeskripsikan data, dan beberapa menawarkan seluruh infrastruktur yang Anda perlukan untuk menyesuaikan diri dan menyempurnakan kode Anda. Dan ini tidak selalu nyaman, karena orang menginginkan kebebasan. Saya ingin teks sumber bergantung sesedikit mungkin pada bagaimana data diserialisasi. Dan cara modern pembuatan kode dapat memberikan kebebasan ini, Anda hanya perlu tahu cara menggunakannya dengan benar.
Bencana nilai seumur hidup C ++ - Arno SchΓΆdl
Tautan nilai telah ada dalam bahasa sejak C ++ 11. Mereka diperkenalkan untuk membuat objek bergerak lebih efisien. Bersama dengan optimasi seperti itu, inovasi ini membawa banyak nuansa pada bahasa yang harus diketahui oleh setiap programmer yang menghargai diri sendiri. Mari kita terjun ke dunia tautan nilai dan hati-hati memeriksanya!
C ++ Pengecualian Melalui Prism of Compiler Optimization - Roman Rusyaev
Di halaman adalah abad ke-21, implementasi penanganan pengecualian C ++ yang tidak produktif berdasarkan setjmp / longjmp sudah ada di masa lalu. Kompiler modern, seperti gcc dan dentang, menggunakan implementasi lanjutan pengecualian C ++ yang disebut penanganan pengecualian biaya-nol. Tetapi seberapa benar ini nol-biaya? Ya, kami membayar dengan meningkatkan ukuran file biner, dan juga dalam kasus ketika pengecualian benar-benar dilemparkan, memulai proses pelepasan tumpukan, memanggil destruktor untuk objek lokal, dll. Tetapi apakah kita kehilangan kinerja jika pengecualian tidak dilontarkan? Apakah ada batasan pada optimisasi kompiler? Laporan ini menjelaskan bagaimana pengecualian C ++ mempengaruhi optimasi penyusun. Optimalisasi mana yang tidak dapat diterapkan jika fungsi dapat membuang pengecualian, dan optimasi mana yang menjadi lebih sulit untuk diterapkan. Contoh penerapan pengecualian dan optimisasi kompiler dipertimbangkan berdasarkan LLVM. Laporan ini bertujuan untuk memberi orang pemahaman tentang kapan masuk akal untuk membangun aplikasi Anda dengan -fno-exception, dan ketika Anda dapat menikmati semua kesenangan menggunakan pengecualian C ++, mengetahui bahwa kode mereka tidak secara signifikan kehilangan kinerja dibandingkan dengan kode di mana pengecualian dinonaktifkan.
Genset, Coroutine, dan Otaknya Yang Tidak Membalas yang Manis - Adi Shavit
C ++ 20 membawa kita coroutine dan dengan mereka kemampuan untuk menulis generator, tipe yang dapat diubah, dan rentang. Kita akan melihat bagaimana coroutine membantu menulis kode yang lebih bersih dan lebih mudah dibaca dengan abstraksi yang lebih ringan dan generalisasi.
Bagaimana tidak tersedak proyek tua besar - Yuri Minaev
Dunia telah berubah. Apa yang berhasil sebelumnya tidak berhenti bekerja, tetapi menjadi tidak mencukupi. Pemrograman pasangan, ulasan kode, tes unit masih penting dan perlu, tetapi mereka tidak dapat lagi memberikan tingkat kualitas dan keandalan proyek C ++ yang tepat. Banyak proyek telah berkembang ratusan kali. Pertumbuhan bertahap, dan tidak semua orang mengerti apa yang terjadi. Setiap proyek tua besar terdiri dari lapisan heterogen (deposit geologis) dan, yang paling penting, tidak ada yang tahu bagaimana semuanya bekerja. Waktunya telah tiba untuk alat dan metodologi untuk membantu menjaga kualitas dan integritas kode: DevSecOps, analisis statis, analisis dinamis, platform pengukuran kualitas.
Cara membantu dan cara mencegah kompiler - Andrey Oleinikov
Sebagai aturan, Anda dapat mengandalkan fakta bahwa kompiler mengoptimalkan file biner yang dihasilkan sehingga berfungsi secepat mungkin. Tetapi kompiler tidak tahu pada data apa dan pada perangkat keras apa program akan diluncurkan. Plus, saya ingin kompilasi mengambil jumlah waktu yang dapat diterima. Karena itu, hasilnya mungkin suboptimal. Saya sarankan menggunakan contoh untuk LLVM untuk melihat bagaimana Anda dapat memberitahu kompiler bagaimana mengoptimalkan program dan membuat hasilnya lebih baik atau lebih buruk.
CoreHard berikutnya (C ++ CoreHard Spring 2020 Conference) sedang dalam perjalanan dan akan diadakan pada 10-11 April 2020 di Minsk, mencari tiket dan program lengkap di situs web resmi.
Dan Anda dapat mengirimkan laporan di sini (hack hidup: pembicara tidak dapat membayar tiket!)