C++ Modern yang Luar Biasa
Kumpulan sumber daya pada C++ modern.
Tujuannya adalah mengumpulkan daftar sumber daya untuk membantu orang mempelajari dan memanfaatkan C++11 modern dan seterusnya.
Berkontribusi
Untuk menambah, menghapus, atau mengubah sesuatu dalam daftar: silakan kirimkan permintaan penarikan ke repositori GitHub.
Buku
- Tur C++ (Bjarne Stroustrup) [C++17/11/20]
- Bahasa Pemrograman C++ (Bjarne Stroustrup) [C++11]
- C++ Modern yang Efektif (Scott Meyers) [C++11/14]
- Ikhtisar C++ Baru (Scott Meyers) [C++11/14]
- Pedoman Inti C++ (Bjarne Stroustrup, Herb Sutter) [C++14/11/17] - Pedoman untuk menggunakan C++ modern.
- C++ Concurrency in Action (Anthony Williams) [C++11/14/17] - Referensi dan panduan untuk menulis kode multi-thread dengan standar C++.
- C++17 - Panduan Lengkap (Nicolai M. Josuttis) [C++17] - Memberikan panduan tentang cara menggunakan Fitur Bahasa dan Perpustakaan C++17.
- CMake Profesional (Craig Scott) - Panduan praktis menggunakan CMake untuk membangun proyek C++ Anda.
- Tutorial C++ Modern: C++ 14/11/17/20 On the Fly (Changkun Ou) - Buku ini diklaim sebagai "On the Fly". Tujuannya adalah untuk memberikan pengenalan komprehensif tentang fitur-fitur yang relevan mengenai C++ modern (sebelum tahun 2020-an).
Untuk panduan komprehensif tentang buku C++, lihat Panduan dan Daftar Buku C++ Definitif Stackoverflow.
Masyarakat
Temukan berita dan pembaruan C++ terkini:
- Berita, Status & Diskusi tentang Standar C++.
Dengarkan podcast C++ terbaru:
- CppCast (YouTube, Twitter) - Podcast pertama oleh pengembang C++ untuk pengembang C++!
- Cpp.chat (YouTube, Twitter) - Komentar tentang c++ dan masalah yang menarik bagi pemrogram c++.
- C++ Weekly - Video pendidikan oleh Jason Turner.
Baca proposal standar C++ terbaru:
- Makalah Komite Standar C++.
Diskusikan segala sesuatu yang berhubungan dengan C++:
- r/cpp - Subreddit C++.
- C++ Slack - Ruang kerja C++ Slack.
- Grup Telegram CoreHard.
Ajukan pertanyaan C++ Anda:
- r/cpp_questions - Subreddit untuk pertanyaan dan jawaban C++.
- Stackoverflow C++ / C++11 / C++14 / C++17 / C++20 - Pertanyaan Stackoverflow tentang C++.
Mungkin pertanyaan Anda sudah terjawab di FAQ?:
- C++ Super-FAQ.
- Pertanyaan Umum C++11.
Kunjungi salah satu dari banyak konferensi C++:
- Daftar konferensi C++ yang akan datang dan yang lalu.
Temukan grup pengguna C++:
- Bertemu dengan daftar grup pengguna C++.
- Daftar grup pengguna di C++ Super-FAQ.
- Pertemuan C/C++.
- Cari saluran yang dimulai dengan
#ug
di C++ Slack.
Pembicaraan
TODO menyusun daftar pembicaraan bagus tentang cara menyederhanakan kode menggunakan fitur C++17/11/20
Mulailah dengan Pendidikan SG20 dan Video Rekomendasi untuk Pengajaran C++.
- Pembicaraan CppCon - Pembicaraan dari Konferensi C++.
- CppCon 2014: Bjarne Stroustrup "Membuat Tugas Sederhana Menjadi Sederhana!"
- CppCon 2014: Herb Sutter "Pemrograman Bebas Kunci (atau, Juggling Razor Blades), Bagian I"
- CppCon 2014: Herb Sutter "Pemrograman Bebas Kunci (atau, Juggling Razor Blades), Bagian II"
- CppCon 2014: Scott Meyers "Jenis Pengurangan dan Mengapa Anda Peduli"
- CppCon 2015: Bjarne Stroustrup "Menulis C++14 yang Baik"
- CppCon 2015: Herb Sutter "Menulis C++14 yang Baik... Secara Default"
- CppCon 2016: Chandler Carruth “Sampah Masuk, Sampah Keluar: Berdebat tentang Perilaku Tidak Terdefinisi..."
- CppCon 2016: Herb Sutter "Kebebasan Kebocoran di C++... Secara Default."
- CppCon 2017: Jason Turner "C++17 Praktis"
- CppCon 2018: Jonathan Boccara “105 Algoritma STL dalam Waktu Kurang dari Satu Jam”
- code::dive conference 2014 - Scott Meyers: Cpu Cache dan Mengapa Anda Peduli (slide)
- code::dive conference 2015 - Andrei Alexandrescu - Menulis Kode Cepat I (slide)
- code::dive conference 2015 - Andrei Alexandrescu - Menulis Kode Cepat II (slide)
- C++Now Talks - Pembicaraan dari konferensi C++Now.
- Menjadi Asli 2012: Template Variadik bersifat Funadik
- Menjadi Asli 2013: Stephan T Lavavej - "Jangan Bantu Kompiler"
- Menjadi Asli 2013: Sean Parent - "Bumbu C++"
Blog
- Blog C++ Andrzej - Pedoman dan pemikiran tentang C++.
- blog Anthony Williams
- Tertanam di Akademisi - John Regehr, Profesor Ilmu Komputer, Universitas Utah, AS.
- Eric Niebler
- Fasih C++ - Kode Ekspresif dalam C++.
- Guru Minggu Ini (postingan baru) - Serangkaian masalah pemrograman C++ reguler yang dibuat dan ditulis oleh Herb Sutter.
- Guru Minggu Ini (postingan lama) - Postingan Guru Minggu Ini Lama.
- Renungan C++ Marshall
- Blog Paul Fultz II
- Mengutamakan Pemrograman
- Sederhanakan C++ - Tulis C++ yang bersih dan mudah dipelihara.
- Sticky Bits - Sebuah blog yang membahas pengembangan perangkat lunak untuk sistem real-time dan tertanam.
- Sutter's Mill - Herb Sutter tentang pengembangan perangkat lunak.
- Pemandangan dari Aktivitas dan Minat Profesional Aristeia -Scott Meyers.
- Blog Tim Visual C++
- Mengapa burung gagak seperti meja tulis?
Situs web
- Praktik Terbaik C++ - Kumpulan Kolaboratif Praktik Terbaik C++.
- Pola C++ - Gudang pola C++ modern.
- Referensi C++ - referensi C++.
- C++ Dengan Contoh - Pelajari C++ dengan Contoh!
Templat Pemula Proyek
- ModernCppStarter - Templat untuk memulai proyek C++ modern menggunakan CMake, CI, cakupan kode, format dentang, manajemen ketergantungan yang dapat direproduksi, dan banyak lagi.
- modern-cpp-template - Templat untuk proyek C++ modern menggunakan CMake, Clang-Format, CI, pengujian unit, dan banyak lagi, dengan dukungan untuk penyertaan hilir.
- cmake_template - Proyek templat CMake untuk membantu Anda memulai C++ dan perkakas.
- Pitchfork - Pitchfork adalah Kumpulan Konvensi Proyek C++.
Perpustakaan
Ini tidak seharusnya menjadi daftar lengkap semua perpustakaan C dan C++. Ini adalah daftar perpustakaan modern berkualitas tinggi dengan penerapan umum (serialisasi, database, pengujian, dll) atau perpustakaan berkualitas tinggi dengan penggunaan baru fitur C++ baru.
Tempat Cuci Piring / Kerangka
- abseil - Abseil adalah kumpulan kode C++ sumber terbuka (sesuai dengan C++11) yang dirancang untuk menambah pustaka standar C++.
- Boost - Koleksi perpustakaan C++.
- Kebodohan - Perpustakaan Sumber Terbuka Facebook.
- POCO - Perpustakaan POCO C++ adalah pustaka C++ lintas platform yang kuat untuk membangun aplikasi berbasis jaringan dan internet yang berjalan di desktop, server, seluler, IoT, dan sistem tertanam.
- nonstd-lite - Induk dari repositori *-lite, jalur migrasi ke fitur pasca-C++11 untuk lingkungan pra-C++11.
- xtd - Kerangka kerja C++17/20 modern untuk membuat aplikasi konsol (CLI), formulir (GUI seperti WinForms) dan tunit (pengujian unit seperti Microsoft Unit Testing Framework) di Windows, macOS, Linux, iOS, dan Android.
Pengujian
- Tes Persetujuan untuk C++ - Tes Persetujuan Asli untuk C++ di Linux, Mac dan Windows.
- autocheck - klon QuickCheck dan SmallCheck untuk C++.
- Bandit - Kerangka kerja khusus header untuk C++11 yang ingin membuat bekerja dengan pengujian unit menjadi pengalaman yang menyenangkan.
- Boost:UT - C++20 μ(micro)/Unit Testing framework, single-header, tanpa memerlukan makro.
- Boost.Test - Tingkatkan kerangka pengujian.
- Catch - Kerangka kerja modern, asli C++, hanya header, untuk pengujian unit, TDD, dan BDD.
- clean-test - Kerangka pengujian C++-20 modern.
- doctest - Kerangka pengujian header tunggal C++11/14/17/20 tercepat yang kaya fitur untuk pengujian unit dan TDD.
- Fakeit - mengejek C++ menjadi mudah. Pustaka yang sederhana namun sangat ekspresif, hanya header untuk tiruan c++.
- Googletest - Kerangka Pengujian dan Mocking Google.
- Mull - Alat pengujian mutasi praktis untuk C dan C++
- rapidcheck - klon QuickCheck untuk C++.
- pengadu - Kerangka pengujian C++20 yang ringan.
Pembandingan
Perpustakaan dan kerangka kerja untuk membuat tolok ukur mikro.
- Celero - Pustaka/Kerangka Penulisan Tolok Ukur C++.
- Tolok Ukur Google? - Pustaka dukungan microbenchmark.
- hayai - kerangka pembandingan C++.
- Nonius - Kerangka kerja pembandingan mikro C++. Pustaka/Kerangka Penulisan Tolok Ukur C++.
- nanobench - Fungsi microbenchmarking single-header yang sederhana, cepat, dan akurat untuk C++14/11/17/20
Pencatatan
- fmtlog - Pustaka logging bergaya fmtlib dengan latensi dalam nanodetik.
- spdlog - Pustaka logging C++ yang cepat.
- loguru - Pustaka logging C++ yang ringan dan fleksibel
benang
- antrian bersamaan - Antrean bersamaan multi-produser, multi-konsumen dan bebas kunci yang cepat untuk C++11.
- Cpp-Taskflow - Perpustakaan Pemrograman Tugas Paralel C++ Modern
- Persimpangan - Struktur data bersamaan di C++.
- MPMCQueue - Antrean bebas kunci multi-produsen multi-konsumen terbatas yang ditulis dalam C++11.
- SPSCQueue - Antrean bebas tunggu dan bebas kunci konsumen tunggal produsen tunggal yang ditulis dalam C++11.
- Threading Building Blocks - Threading Building Blocks (TBB) adalah pustaka templat C++ yang dikembangkan oleh Intel untuk pemrograman paralel pada prosesor multi-core. Dengan menggunakan TBB, komputasi dipecah menjadi tugas-tugas yang dapat dijalankan secara paralel. Perpustakaan mengelola dan menjadwalkan thread untuk menjalankan tugas-tugas ini.
- execq - Antrian cerdas yang menjalankan tugas dengan cara seperti threadpool (serial/bersamaan) di C++11.
- concurrencpp - Pustaka konkurensi umum yang berisi tugas, pelaksana, pengatur waktu, dan coroutine C++20 untuk mengatur semuanya.
Parsing & Serialisasi
- json? - JSON untuk C++ Modern.
- jsoncpp - Pustaka C++ untuk berinteraksi dengan JSON.
- toml++ - Pustaka C++17 khusus header untuk parsing TOML v0.5.0 dan yang lebih baru.
- tinytoml - Pustaka C++11 khusus header untuk parsing TOML.
- yaml-cpp - Parser dan emitor YAML di C++.
- cpptoml - Pustaka khusus header untuk mem-parsing file konfigurasi TOML.
- sereal - Pustaka C++11 untuk serialisasi.
- cista - Pustaka C++17 untuk serialisasi biner tanpa salinan berkinerja tinggi.
- simdjson - Mempercepat penguraian JSON menggunakan instruksi SIMD yang umum tersedia
- Boost.JSON - Pustaka JSON dengan dukungan kuat untuk pengalokasi khusus.
- hjson-cpp - Pustaka C++11 untuk membaca dan menulis file Hjson dan/atau JSON.
- json_struct - Parser JSON header tunggal berkinerja tinggi, parsing langsung ke dan dari struct C++.
- daw_json_link - Serialisasi dan parsing JSON yang cepat dan nyaman dalam C++
Pemformatan & templat string
- {fmt} - Pustaka pemformatan kecil, aman, dan cepat.
- Inja - Mesin Templat untuk C++ Modern.
- Kumis - Templat teks kumis di C++11.
- tinyformat.h - Minimal, ketik perpustakaan pengganti printf yang aman untuk C++.
- pprint - Printer Cantik untuk C++ Modern.
skrip
- sol2 - perpustakaan C++ yang mengikat ke Lua.
- ChaiScript - Bahasa skrip tertanam yang mudah digunakan untuk C++.
- pybind11 - Pengoperasian yang mulus antara C++11 dan Python.
Web/HTTP
- Beast - HTTP dan WebSocket dibangun di atas Boost.Asio di C++11.
- cpprestsdk - C++ REST SDK adalah proyek Microsoft untuk komunikasi klien-server berbasis cloud dalam kode asli menggunakan desain C++ API asinkron modern. Proyek ini bertujuan untuk membantu pengembang C++ terhubung dan berinteraksi dengan layanan.
- cpr - Permintaan C++: Curl for People, pelabuhan spiritual Permintaan Python.
- Crow - Microframework yang Cepat dan Mudah digunakan untuk membuat server web (terinspirasi oleh Python Flask).
- dmbcs-micro-server - JSON, HTML, teks, dan PNG berbasis C++20 melalui HTTP; cara sederhana untuk menyematkan server ke dalam aplikasi Anda untuk menyediakan UI berbasis web.
- Drogon - Kerangka aplikasi HTTP berkinerja tinggi berbasis C++14/17
- oat++ - Kerangka kerja Web berkinerja tinggi (C++11, tanpa ketergantungan).
- pistache - Kerangka kerja C++ REST yang elegan.
- restbed - Kerangka kerja Restbed menghadirkan fungsionalitas RESTful asinkron ke aplikasi C++11.
Basis data
- mongo-cxx-driver - Driver C++ untuk MongoDB.
- redoks - Klien C++11 yang modern, asinkron, dan sangat cepat untuk Redis.
- sqlite_orm - header yang kuat hanya perpustakaan SQLite3 ORM untuk C++14.
- sqlite3pp - pembungkus C++ dari API SQLite3.
- sqlpp11 - Pustaka templat SQL yang aman untuk C++.
- libpqxx - API klien C++ resmi untuk PostgreSQL.
- TinyORM - Pustaka C++ ORM modern.
BioC++
- SeqAn - Pustaka C++ modern untuk analisis urutan (C++17, C++20).
Lain-lain
- ASAP - pustaka khusus header untuk mengurai, menampilkan, mengoperasikan, dan mengulangi tanggal.
- BigIntegerCPP - Pustaka bilangan bulat besar C++11 dengan kinerja tinggi yang efektif, bersifat sederhana dan juga bersih di mata.
- CAF - Implementasi Model Aktor Open Source di C++.
- Cinder - Cinder adalah perpustakaan sumber terbuka dan gratis untuk pengkodean kreatif berkualitas profesional dalam C++.
- Conduit - Aliran Kinerja Tinggi Berdasarkan Coroutine TS.
- cppitertools - implementasi itertools (python) untuk C++14
- cxxopts - Pengurai opsi baris perintah C++ yang ringan.
- date - Pustaka tanggal dan waktu berdasarkan header C++11/14/17.
- docopt.cpp - docopt membuat antarmuka baris perintah yang indah.
- EnTT - Sistem komponen entitas (ECS) khusus header, cepat dan andal untuk C++ modern.
- Font Chef - Pustaka C99 dan C++14 untuk memasak font dan merender teks
- HashLibPlus - Pustaka C++11 yang menyediakan antarmuka yang mudah digunakan untuk menghitung hash dan checksum string, file, aliran, bytearray, dan data yang belum diketik, dan masih banyak lagi. Ini juga mendukung Hashing Tambahan.
- IntX - Port C++11 dari pustaka IntX presisi arbitrer Integer dengan kecepatan, tentang implementasi algoritma perkalian/pembagian O(N * log N).
- iod - Utilitas pemrograman meta untuk C++14.
- Magic Enum - Refleksi statis untuk enum (ke string, dari string, iterasi) untuk C++ modern, bekerja dengan tipe enum apa pun tanpa kode makro atau boilerplate.
- Wise Enum - Refleksi statis untuk enum mirip dengan Magic Enum tetapi bekerja dengan C++ 14/11/17.
- Nameof - Pustaka C++17 khusus header menyediakan makro nama dan fungsi untuk mendapatkan nama sederhana variabel, tipe, fungsi, makro, dan enum.
- PEGTL - Pustaka Templat Tata Bahasa Ekspresi Parsing (C++11, khusus header).
- acak - Header yang sederhana, nyaman, hanya Acak untuk C++ modern.
- rang - Pustaka C++11 sederhana, modern & hanya header untuk warna di terminal Anda.
- range-v3 - Pustaka rentang eksperimental untuk C++14/11/17.
- SimpleBaseLib4CPP - Pustaka Pengkodean Dasar C++11 sederhana yang saat ini menyediakan dukungan untuk pengkodean dan penguraian berbagai basis seperti Base16, Base32 (berbagai varian), Base58 (berbagai varian), Base64 (berbagai varian). [MIT]
- simple_match - Pencocokan pola hanya header sederhana untuk c++14.
- SRL-CPP - Pustaka pembuat Bahasa Regex Sederhana yang ditulis dalam C++11 yang menyediakan antarmuka yang mudah digunakan untuk membuat ekspresi regex sederhana dan kompleks. [MIT]
- tweeny - Pustaka interpolasi khusus header dengan 30+ fungsi pelonggaran.
- Vireo - Pustaka pemrosesan video yang ringan dan serbaguna dari Twitter.
- indikator - Indikator Aktivitas untuk C++ Modern.
- AssociatedEnum - pustaka khusus header untuk C++ untuk enumerasi dengan nilai terkait.
- openFrameworks - toolkit C++ open source untuk pengkodean kreatif.
- tabulate - Pembuat Tabel untuk C++ Modern.
Peralatan
Lain-lain
- format dentang? - Alat untuk memformat kode C++.
- clangd - memahami kode C++ Anda dan menambahkan fitur cerdas ke editor Anda: penyelesaian kode, kesalahan kompilasi, masuk ke definisi, dan banyak lagi.
- Compiler Explorer - Jelajahi keluaran perakitan kode C++ Anda secara interaktif.
- cquery - Server bahasa C/C++ yang mendukung basis kode multi-juta baris, didukung oleh libclang. Emacs, Vim, VSCode, dan lainnya dengan dukungan protokol server bahasa. Referensi silang, penyelesaian, diagnostik, penyorotan semantik, dan banyak lagi (Tidak ada lagi penerapan sejak 27 November 2018)
- ccls - Server bahasa C/C++/ObjC yang mendukung referensi silang, hierarki, penyelesaian, dan penyorotan semantik, bercabang dari cquery, yang sedang dalam pengembangan aktif
- ironi-mode - Mode minor AC/C++ untuk Emacs yang didukung oleh libclang.
- modern-cpp-font-lock-mode - Sintaks yang menyoroti dukungan untuk C++ Modern dengan emacs
Analisis dinamis
- pembersih? - Proyek ini adalah rumah bagi Sanitizer: AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer, dan banyak lagi.
- Valgrind - adalah kerangka instrumentasi untuk membangun alat analisis dinamis. Ada alat Valgrind yang secara otomatis dapat mendeteksi banyak manajemen memori dan bug threading, dan membuat profil program Anda secara detail. Anda juga dapat menggunakan Valgrind untuk membuat alat baru.
Analisis statis
- cppcheck - adalah alat analisis statis untuk kode C/C++. Ini memberikan analisis kode unik untuk mendeteksi bug dan berfokus pada mendeteksi perilaku tidak terdefinisi dan konstruksi pengkodean berbahaya.
- dentang-rapi? - adalah alat "linter" C++ berbasis dentang. Tujuannya adalah untuk menyediakan kerangka kerja yang dapat diperluas untuk mendiagnosis dan memperbaiki kesalahan pemrograman umum, seperti pelanggaran gaya, penyalahgunaan antarmuka, atau bug yang dapat disimpulkan melalui analisis statis. clang-tidy bersifat modular dan menyediakan antarmuka yang nyaman untuk menulis cek baru.
- clang-analyzer - adalah alat analisis kode sumber yang menemukan bug dalam program C, C++, dan Objective-C. Ini mengimplementasikan analisis antar-prosedural yang peka terhadap jalur berdasarkan teknik eksekusi simbolik.
kabur
- American fuzzy lop - American fuzzy lop adalah fuzzer yang berorientasi pada keamanan.
- hongfuzz - Fuzzer yang berorientasi pada keamanan, didorong oleh umpan balik, evolusioner, dan mudah digunakan dengan opsi analisis yang menarik.
- libFuzzer - Perpustakaan untuk pengujian fuzz yang dipandu cakupan.
Membangun sistem
- Bazel - adalah sistem pembangunan yang cepat, terukur, multi-bahasa, dan dapat diperluas.
- build2 - adalah toolchain build lintas platform untuk mengembangkan dan mengemas kode C dan C++.
- Buat? - Rangkaian alat lintas platform yang dirancang untuk membangun, menguji, dan mengemas perangkat lunak.
- Meson - adalah sistem pembangunan sumber terbuka yang dimaksudkan untuk menjadi sangat cepat, dan, yang lebih penting, senyaman mungkin bagi pengguna.
- XMake - adalah utilitas pembangunan lintas platform berdasarkan Lua.
Manajemen paket
- Buckaroo - Manajer Paket Polyglot Terdesentralisasi Sepenuhnya untuk C++ dan Teman
- cget - Pengambilan paket CMake.
- conan - manajer paket C/C++.
- CPM - Skrip CMake untuk manajemen ketergantungan lintas platform tanpa pengaturan.
- Hunter - Manajer paket lintas platform untuk C++.
- vcpkg - Manajer Perpustakaan C++ untuk Windows, Linux, dan MacOS
- xrepo - Manajer paket C/C++ lintas platform berdasarkan Xmake.
Tentang
Daftar ini disusun oleh Erik Rigtorp dengan bantuan komunitas C++:
- rigtorp.se
- [email protected]
- github.com/rigtorp
- twitter.com/rigtorp
- linkedin.com/in/rigtorp