Pustaka (perangkat lunak)Ilustrasi arsitektur aplikasi yang memanfaatkan pustaka eksternal libvorbisfile untuk memutar berkas audio Ogg Vorbis.
Dalam ilmu komputer dan pemrograman, pustaka (bahasa Inggris:librarycode: en is deprecated ) adalah kumpulan atau koleksi dari rutin-rutin program komputer (subrutin), kode program, kelas, konfigurasi, serta data pembantu yang dikelompokkan bersama untuk memfasilitasi pengembangan perangkat lunak. Pustaka menyediakan layanan, fungsi, atau kemampuan siap pakai kepada program-program independen, sehingga pemrogram tidak perlu menulis ulang kode untuk fungsi-fungsi dasar dari nol.[1]
Pustaka merupakan implementasi nyata dari paradigma pemrograman modular, di mana sebuah perangkat lunak besar dipecah menjadi komponen-komponen kecil yang dapat digunakan kembali (*reusable*). Berbeda dengan berkas yang dapat dieksekusi (seperti program aplikasi mandiri), sebagian besar pustaka tidak dapat dijalankan secara langsung oleh pengguna; pustaka murni bertindak sebagai penyedia fungsionalitas yang pasif bagi program utama.
Mekanisme pengaitan (Linking)
Sebuah program utama dapat merujuk dan menggunakan modul yang ada di dalam pustaka melalui proses yang disebut **pengaitan** (linking). Proses ini dilakukan oleh sebuah program utilitas sistem yang dinamakan Linker. Terdapat dua metode pengaitan pustaka yang digunakan dalam arsitektur komputer:[2]
Pengaitan statis (Static linking)
Dalam metode ini, linker menyalin seluruh kode biner dari pustaka yang dibutuhkan dan menggabungkannya secara fisik ke dalam berkas eksekusi program utama saat fase kompilasi.
Kelebihan: Program menjadi mandiri (tidak membutuhkan berkas pustaka eksternal saat dijalankan di komputer pengguna) dan waktu eksekusinya relatif lebih cepat.
Kekurangan: Ukuran berkas akhir program menjadi sangat besar, dan jika terjadi pembaruan pada pustaka, seluruh program utama harus dikompilasi ulang. Berkas pustaka statis biasanya berformat `.a` pada sistem Unix/Linux atau `.lib` pada Windows.
Pengaitan dinamis (Dynamic linking)
Dalam metode ini, kode biner dari pustaka tidak dimasukkan ke dalam berkas eksekusi program utama. Berkas program hanya memuat referensi atau "janji" berupa nama fungsi yang dibutuhkan. Ketika program dijalankan (runtime), sistem operasi akan mencari, memuat pustaka tersebut ke dalam memori RAM, dan menghubungkannya dengan program utama.
Kelebihan: Ukuran berkas program menjadi jauh lebih kecil, dan beberapa program yang berjalan bersamaan dapat berbagi satu berkas pustaka yang sama di memori (sehingga menghemat RAM). Pembaruan pada pustaka juga dapat dilakukan secara terpisah tanpa mengompilasi ulang aplikasi utama.
Kekurangan: Program dapat gagal berjalan jika berkas pustaka yang dibutuhkan hilang atau versinya tidak cocok. Berkas pustaka dinamis biasanya berformat `.so` (shared object) pada Linux, `.dll` (dynamic-link library) pada Windows, atau `.dylib` pada macOS.
Pustaka sistem operasi
Sebagian besar sistem operasi modern menyediakan pustaka bawaan berskala besar untuk mengimplementasikan layanan-layanan inti sistem, seperti manajemen berkas, antarmuka grafis (GUI), jaringan, dan keamanan.
Contoh yang paling terkenal adalah Windows API (Win32) pada sistem operasi Windows, atau pustaka C standar ( seperti `glibc`) pada sistem berbasis Unix/Linux. Pustaka jenis ini bertindak sebagai perantara aman antara aplikasi pihak ketiga dengan panggilan sistem (system call) milik kernel sistem operasi. Oleh karena itu, sebagian besar fungsionalitas dari aplikasi modern saat ini sebenarnya memanfaatkan kode bersama yang disediakan oleh pustaka sistem operasi tersebut.
Pustaka bahasa dan ekosistem
Selain pustaka bawaan sistem operasi, setiap bahasa pemrograman modern memiliki pustaka standarnya sendiri (standard library) untuk menangani operasi mendasar seperti pemrosesan string, struktur data koleksi (seperti larik dinamis), dan operasi matematika tingkat lanjut.
Dalam pengembangan aplikasi modern, pemrogram juga dapat memasang pustaka pihak ketiga secara instan dari repositori komunitas global menggunakan manajer paket (seperti npm untuk JavaScript, PyPI untuk Python, atau Pub untuk Dart/Flutter) guna mempercepat pembuatan fitur-fitur kompleks seperti integrasi kecerdasan buatan, visualisasi grafis, atau manajemen basis data.
↑Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009). Introduction to Algorithms (dalam bahasa Inggris) (Edisi 3rd). MIT Press. ISBN978-0-262-03384-8.
↑Stallings, William (2018). Operating Systems: Internals and Design Principles (dalam bahasa Inggris) (Edisi 9th). Pearson. ISBN978-0134670959.