Untuk memahami “sebaris” Anda perlu memahami sejarah dan seperti apa kehidupan 20 (dan 30) tahun yang lalu.
Kami sedang menulis kode pada komputer yang memiliki sedikit memori, jadi tidak mungkin bagi kompiler untuk memproses semua kode yang membentuk sebuah program sekaligus. Kompiler juga sangat lambat, jadi Anda tidak ingin harus mengkompilasi ulang kode yang tidak berubah - mengambil alih 24 jam (pada komputer yang harganya lebih dari mobil kelas atas) untuk mengkompilasi ulang semua kode yang normal untuk beberapa proyek I bekerja pada.
Oleh karena itu setiap file kode dikompilasi secara terpisah menjadi file objek. Setiap file objek dimulai dengan daftar semua fungsi yang dikandungnya, bersama dengan "alamat" fungsi. File objek juga memiliki daftar semua fungsi yang dipanggil dalam file objek lain bersama dengan lokasi panggilan.
Seorang linker pertama-tama akan membaca semua file objek, dan menyusun daftar semua fungsi yang mereka ekspor, bersama dengan file yang ada di sana dan alamatnya. Kemudian akan membaca kembali semua file objek, mengeluarkannya ke file program, sambil memperbarui semua panggilan fungsi "eksternal" dengan alamat fungsi.
Linker tidak mengubah atau mengoptimalkan kode mesin yang dihasilkan oleh kompiler dengan cara apa pun selain untuk memperbaiki referensi untuk panggilan fungsi eksternal. Linker adalah bagian dari sistem operasi dan mendahului sebagian besar kompiler. Ketika orang menulis kompiler baru, mereka memerlukannya untuk bekerja dengan penghubung saat ini, dan untuk dapat menautkan ke file objek saat ini, jika tidak, panggilan sistem tidak dapat dibuat.
Kompiler hanya pernah melihat kode dalam file ".c" atau ".cpp" yang dikompilasi bersama dengan semua file header yang disertakan. Jadi itu tidak dapat membuat optimasi berdasarkan kode di file ".c" atau ".cpp" lainnya.
Kata kunci "inline" memungkinkan tubuh fungsi (metode) untuk didefinisikan dalam file header, sehingga memungkinkan kompiler untuk menggunakan kode fungsi sambil mengkompilasi kode yang memanggilnya. Misalnya, Anda memiliki kelas koleksi yang ditentukan dalam file .cpp anther, kelas ini akan memiliki metode "isEmpty", yang berisi satu baris kode, akan ada percepatan besar dari program yang dihasilkan jika alih-alih panggilan ke fungsi , panggilan fungsi diganti dengan satu baris ini.
Kata kunci "inline" dilihat pada saat itu sebagai cara "murah dan mudah" untuk memungkinkan enkapsulasi data sambil menghindari biaya pemanggilan fungsi, tanpa itu banyak programmer akan hanya mengakses bidang pribadi objek. (Makro di mana cara yang jauh lebih buruk "inlining" kode yang mana umum pada saat itu.)
“Linker” akhir-akhir ini melakukan banyak optimasi kode dan cenderung ditulis oleh beberapa tim sebagai kompiler. Compiler sering hanya memeriksa kode yang benar dan "kompres" itu, meninggalkan sebagian besar tugas pembuatan kode mesin ke linker.