Standard library mencakup banyak kebutuhan, tetapi begitu kita butuh unit testing yang enak dibaca, parsing JSON, koneksi jaringan asinkron, atau jendela grafis, kita keluar dari wilayahnya — dan di sinilah ekosistem pihak ketiga masuk. Berbeda dengan beberapa bahasa modern, C++ tidak memiliki satu gudang paket resmi; sebagai gantinya, ada komunitas besar dengan repositori GitHub, registri seperti vcpkg dan Conan, serta daftar kurasi komunitas. Chapter ini mengurasi library yang layak dipelajari per kategori, memberi kriteria memilihnya, dan mencetak katalog singkat lewat program kecil.
Kategori dan Nama yang Layak Dipelajari #
Kurasi berikut memilih nama yang paling mapan per kategori — semua bisa kita sambut dengan toolchain dari chapter sebelumnya:
- Testing — GoogleTest , framework testing paling luas pemakaiannya di proyek C++ dengan dokumentasi primer yang rapi ; alternatifnya Catch2 yang menonjol lewat makro asertif yang ekspresif dan penyiapan proyek yang ringan.
- JSON — nlohmann/json , header tunggal dengan sintaks mirip JavaScript; dokumentasinya adalah salah satu yang terbaik di ekosistem, dan section Interoperabilitas course ini memakainya sebagai contoh.
- Networking — Asio , library jaringan asinkron yang menjadi dasar Networking TS; dokumentasinya mencakup tutorial bertahap dari soket sinkron hingga asinkron.
- Graphics — SDL untuk akses perangkat lintas platform (jendela, input, audio) yang jadi fondasi banyak game, dan SFML yang membungkus konsep serupa dengan antarmuka C++ berorientasi objek.
- GUI — Qt , framework GUI terbesar di dunia C++ dengan editor desain, sistem sinyal-slot, dan ekosistem modul yang jauh melampaui tampilan jendela saja.
- Machine learning — LibTorch , backend C++ dari PyTorch untuk inferensi dan pelatihan, serta dlib yang ringan untuk pembelajaran mesin klasik.
- Indeks kurasi — awesome-cpp , daftar terkurasi ratusan library per kategori; titik mulai terbaik ketika kebutuhan kita tidak ada di daftar di atas.
Kriteria Memilih Library #
Nama besar bukan jaminan cocok. Sebelum menambahkan dependensi, kita periksa lima kriteria ini:
| Kriteria | Pertanyaan kunci yang kita periksa |
|---|---|
| Lisensi | Apakah BSD/MIT/BSL yang longgar, atau GPL/LGPL yang menuntut keterbukaan kode turunan? |
| Maintenance | Kapan commit dan rilis terakhir? Apakah issue ditanggapi? |
| Dokumentasi | Apakah ada tutorial, referensi API, dan contoh yang terbarui? |
| Portabilitas | Apakah mendukung compiler dan sistem operasi yang kita sasar? |
| Populasi | Apakah ada komunitas yang bisa ditanya saat terjebak? |
Lisensi adalah kriteria yang paling sering diabaikan lalu paling mahal diperbaiki. Lisensi permisif seperti MIT, BSD, dan Boost Software License boleh dipakai di proyek komersial dengan syarat atribusi minimal; GPL menular ke kode yang menautkannya; LGPL lazimnya aman asal library ditautkan secara dinamis. Qt menarik karena menyediakan keduanya: lisensi terbuka untuk proyek yang kompatibel dan lisensi komersial untuk sisanya. Kriteria maintenance bisa diperiksa cepat di repositori: tanggal commit terakhir, jumlah issue terbuka, dan ritme rilis menceritakan banyak hal.
Katalog Singkat dalam Program #
Untuk membiasakan diri dengan data terstruktur, program berikut menyusun katalog di atas sebagai tabel rapi. Manipulator std::setw dan std::left yang kita pelajari pada section I/O mengurus perataan kolomnya:
#include <iomanip>
#include <iostream>
#include <string>
#include <vector>
// Satu baris katalog: library eksternal, lisensinya, dan alamat resminya.
struct Library {
std::string kategori;
std::string nama;
std::string lisensi;
std::string url;
};
int main() {
std::vector<Library> katalog = {
{"testing", "GoogleTest", "BSD-3-Clause", "github.com/google/googletest"},
{"testing", "Catch2", "BSL-1.0", "github.com/catchorg/Catch2"},
{"json", "nlohmann/json", "MIT", "json.nlohmann.me"},
{"networking", "Asio", "BSL-1.0", "think-async.com"},
{"graphics", "SDL", "zlib", "wiki.libsdl.org"},
{"graphics", "SFML", "zlib", "www.sfml-dev.org"},
{"gui", "Qt", "GPL/LGPL/komersial", "doc.qt.io"},
{"ml", "libtorch", "BSD-style", "pytorch.org/cppdocs"},
{"ml", "dlib", "BSL-1.0", "dlib.net"},
};
std::cout << std::left; // semua kolom rata kiri
std::cout << std::setw(12) << "kategori" << std::setw(15) << "nama"
<< std::setw(21) << "lisensi" << "url\n";
for (const Library& l : katalog) {
std::cout << std::setw(12) << l.kategori
<< std::setw(15) << l.nama
<< std::setw(21) << l.lisensi
<< l.url << "\n";
}
return 0;
}Output yang Dihasilkan:
kategori nama lisensi url
testing GoogleTest BSD-3-Clause github.com/google/googletest
testing Catch2 BSL-1.0 github.com/catchorg/Catch2
json nlohmann/json MIT json.nlohmann.me
networking Asio BSL-1.0 think-async.com
graphics SDL zlib wiki.libsdl.org
graphics SFML zlib www.sfml-dev.org
gui Qt GPL/LGPL/komersial doc.qt.io
ml libtorch BSD-style pytorch.org/cppdocs
ml dlib BSL-1.0 dlib.netBedah program di atas:
- Struct
Librarydengan empat field: setiap dependensi direkam sebagai data, bukan catatan pinggiran; kolom lisensi sengaja disandingkan dengan URL agar keputusan lisensi terlihat setiap kali kita membuka daftar. std::cout << std::left: manipulator ini menetapkan perataan kiri secara permanen hingga diganti; tanpanya,std::setwmeratakan kanan secara bawaan dan tabel menjadi berantakan.std::setw(n)pada setiap kolom: lebar kolom dihitung dari teks terpanjang —nlohmann/jsonmembutuhkan lebar 15 danGPL/LGPL/komersiallebar 21.- Range-based for tunggal: pencetakan tidak perlu tahu kategori; urutan penulisan di
katalogadalah urutan keluarannya.
Memakai library berarti membaca kode dan contoh yang ditulis orang lain — keahlian yang layak dilatih secara sengaja. Chapter berikutnya menunjuk sumber contoh yang terpercaya dan memberi metode membaca kode yang bukan milik kita.