Dalam ilmu komputer, sebuah perpustakaan adalah kumpulan sumber daya yang dimanfaatkan selama pengembangan perangkat lunak untuk mengimplementasikan sebuah program komputer. Sumber daya tersebut dapat mencakup data konfigurasi, dokumentasi, bantuan, templat pesan, kode sumber atau fungsi dan kelas pra-dikompilasi, nilai atau spesifikasi tipe. Dalam IBM OS/360 dan penerusnya ini disebut sebagai kumpulan data yang dipartisi.
Sebuah perpustakaan fungsi memiliki antarmuka yang terdefinisi dengan baik melalui mana fungsi-fungsi tersebut dipanggil. Sebagai contoh, sebuah program dapat menggunakan perpustakaan untuk secara tidak langsung melakukan pemanggilan sistem daripada melakukan pemanggilan sistem tersebut secara langsung dalam program. Selain itu, fungsi-fungsi diekspos oleh perpustakaan untuk digunakan kembali oleh beberapa program yang independen.
Sebuah program memanggil fungsi perpustakaan melalui mekanisme yang terdefinisi dengan baik. Sebagai contoh, dalam bahasa C, sebuah fungsi perpustakaan dipanggil dengan menggunakan pemanggilan fungsi normal C. Pustakawan menghasilkan kode untuk memanggil fungsi melalui mekanisme perpustakaan jika fungsi tersebut tersedia dari perpustakaan daripada dari program itu sendiri.
Fungsi perpustakaan tersedia untuk digunakan oleh beberapa program yang tidak terkait, sedangkan fungsi yang didefinisikan dalam sebuah program hanya dapat digunakan oleh program tersebut. Perbedaan ini dapat memberikan pengertian hierarkis ketika sebuah program menjadi besar. Dalam hal ini, mungkin ada perpustakaan internal yang digunakan kembali oleh bagian-bagian sub-independen dari program besar tersebut. Sebuah fitur yang membedakan dari perpustakaan adalah bahwa itu dapat digunakan oleh beberapa program independen, dan programmer hanya perlu mengetahui antarmuka, bukan detail internal dari perpustakaan.
Nilai dari sebuah perpustakaan terletak dalam penggunaan kembali elemen-elemen program yang terstandarisasi. Ketika sebuah program memanggil sebuah perpustakaan, ia memperoleh perilaku yang diimplementasikan di dalam perpustakaan tanpa harus mengimplementasikan perilaku tersebut sendiri. Perpustakaan mendorong berbagi kode secara modular dan memudahkan distribusi kode.
Fungsi-fungsi dari sebuah perpustakaan dapat terhubung ke program yang memanggil pada fase siklus hidup program yang berbeda. Jika kode perpustakaan diakses selama pembangunan program yang memanggil, maka perpustakaan tersebut disebut sebagai perpustakaan statis. Alternatifnya adalah membangun program eksekutif untuk dipisahkan dari file perpustakaan. Fungsi-fungsi perpustakaan terhubung setelah eksekutor dimulai, baik pada waktu pemuatan atau waktu eksekusi. Dalam hal ini, perpustakaan disebut perpustakaan dinamis.
Sebagian besar bahasa pemrograman yang dikompilasi memiliki perpustakaan standar, meskipun para pemrogram juga dapat membuat perpustakaan khusus mereka sendiri. Sebagian besar sistem perangkat lunak modern menyediakan perpustakaan yang mengimplementasikan sebagian besar layanan sistem. Perpustakaan-perpustakaan tersebut telah mengorganisir layanan-layanan yang diperlukan oleh aplikasi modern. Oleh karena itu, sebagian besar kode yang digunakan oleh aplikasi modern disediakan dalam perpustakaan-perpustakaan sistem tersebut.
Sejarah singkat
Ide perpustakaan komputer sudah ada sejak komputer pertama yang diciptakan oleh Charles Babbage. Sebuah makalah tahun 1888 tentang Analytical Engine-nya menyarankan bahwa operasi komputer bisa dituliskan pada kartu-kartu terpisah dari input numerik. Jika kartu-kartu operasi ini disimpan untuk digunakan kembali maka "secara bertahap mesin akan memiliki perpustakaan sendiri".
Pada tahun 1947, Goldstine dan von Neumann berspekulasi bahwa akan berguna untuk membuat "perpustakaan" subroutine untuk pekerjaan mereka pada mesin IAS, sebuah komputer awal yang pada saat itu belum beroperasi. Mereka membayangkan sebuah perpustakaan fisik dari rekaman kawat magnetik, dengan setiap kawat menyimpan kode komputer yang dapat digunakan kembali.
Seorang wanita bekerja di sebelah lemari arsip yang berisi perpustakaan subrutin pada gulungan pita perekat untuk komputer EDSAC.
Terinspirasi oleh von Neumann, Wilkes dan timnya membangun EDSAC. Sebuah lemari arsip pita yang tertembus menahan perpustakaan subroutine untuk komputer ini. Program untuk EDSAC terdiri dari program utama dan urutan subroutine yang disalin dari perpustakaan subroutine tersebut. Pada tahun 1951 tim tersebut menerbitkan buku teks pertama tentang pemrograman, The Preparation of Programs for an Electronic Digital Computer, yang mendetailkan pembuatan dan tujuan perpustakaan tersebut.
COBOL termasuk "kemampuan primitif untuk sistem perpustakaan" pada tahun 1959, tetapi Jean Sammet menggambarkannya sebagai "fasilitas perpustakaan yang tidak memadai" dalam retrospektif. JOVIAL memiliki Communication Pool (COMPOOL), kurang lebih sebuah perpustakaan dari file-file header.
Kontributor utama lainnya untuk konsep perpustakaan modern datang dalam bentuk inovasi subprogram FORTRAN. Subprogram FORTRAN dapat dikompilasi secara independen satu sama lain, tetapi kompilator tidak memiliki linker. Jadi sebelum diperkenalkannya modul dalam Fortran-90, pemeriksaan tipe antara subprogram FORTRAN tidak mungkin. Pada pertengahan 1960-an, perpustakaan salin dan makro untuk assembler sudah umum. Mulai dari popularitas IBM System/360, perpustakaan yang berisi elemen-elemen teks lainnya, misalnya, parameter sistem, juga menjadi umum.
Simula adalah bahasa pemrograman berbasis objek pertama, dan kelas-kelasnya hampir identik dengan konsep modern yang digunakan dalam Java, C++, dan C#. Konsep kelas Simula juga merupakan leluhur dari paket dalam Ada dan modul Modula-2. Bahkan ketika dikembangkan awalnya pada tahun 1965, kelas-kelas Simula bisa dimasukkan dalam file perpustakaan dan ditambahkan pada waktu kompilasi.
Peran Vital Pustaka dalam Pengembangan Perangkat Lunak
Peran perpustakaan dalam proses linking atau pengikatan program sangatlah penting dalam pengembangan perangkat lunak. Proses linking ini umumnya dilakukan secara otomatis oleh program linker atau binder yang mencari serangkaian perpustakaan dan modul lainnya dalam urutan tertentu. Biasanya tidak dianggap sebagai kesalahan jika target link dapat ditemukan beberapa kali dalam satu set perpustakaan yang diberikan. Proses linking dapat dilakukan saat file eksekutif dibuat (static linking), atau setiap kali program digunakan pada waktu runtime (dynamic linking).
Referensi yang dipecahkan dalam proses linking dapat berupa alamat untuk perpindahan dan pemanggilan rutin lainnya. Referensi ini dapat berada dalam program utama, atau dalam satu modul tergantung pada modul lain. Referensi ini dipecahkan menjadi alamat tetap atau dapat diubah (dari satu basis yang umum) dengan mengalokasikan memori runtime untuk segmen memori dari setiap modul yang direferensikan.
Beberapa bahasa pemrograman menggunakan fitur yang disebut smart linking dimana linker mengetahui atau terintegrasi dengan kompiler, sehingga linker mengetahui bagaimana referensi eksternal digunakan, dan kode dalam perpustakaan yang sebenarnya tidak pernah digunakan, meskipun secara internal direferensikan, dapat dibuang dari aplikasi yang dikompilasi. Fitur smart-linking ini dapat menghasilkan ukuran file aplikasi yang lebih kecil dan penggunaan memori yang lebih efisien.
Relokasi adalah proses penyesuaian referensi-referensi dalam program atau modul perpustakaan yang disimpan dalam bentuk relatif atau simbolik yang tidak dapat dipecahkan sampai semua kode dan perpustakaan ditugaskan alamat statis akhir. Relokasi dilakukan oleh linker atau loader. Relokasi umumnya tidak dapat dilakukan ke perpustakaan individu itu sendiri karena alamat dalam memori dapat bervariasi tergantung pada program yang menggunakannya dan perpustakaan lain yang digabungkan dengan mereka. Kode independen posisi menghindari referensi ke alamat absolut dan oleh karena itu tidak memerlukan relokasi.
Perpustakaan statis, juga dikenal sebagai arsip, dimaksudkan untuk di-link secara statis. Awalnya, hanya perpustakaan statis yang ada. Linking statis harus dilakukan ketika modul apa pun dikompilasi ulang. Semua modul yang dibutuhkan oleh sebuah program kadang-kadang di-link secara statis dan disalin ke dalam file eksekutif. Proses ini, dan file mandiri yang dihasilkan, dikenal sebagai build statis dari program. Build statis mungkin tidak memerlukan relokasi lebih lanjut jika memori virtual digunakan dan tidak ada pemusatan tata letak ruang alamat yang diinginkan.
Perpustakaan bersama atau shared object adalah file yang dimaksudkan untuk dibagi oleh file eksekutif dan file objek bersama lainnya. Modul yang digunakan oleh sebuah program dimuat dari objek bersama individual ke dalam memori pada waktu muat atau waktu runtime, alih-alih disalin oleh linker ketika membuat satu file eksekutif monolitik tunggal untuk program tersebut. Perpustakaan bersama dapat di-link secara statis selama waktu kompilasi, yang berarti referensi ke modul perpustakaan dipecahkan dan modul dimuat ke dalam memori ketika file eksekutif dibuat. Namun seringkali linking dari perpustakaan bersama ditunda sampai mereka dimuat.
Disadur dari: en.wikipedia.org