Dalam catatan blog ini, kita akan melihat bagaimana penyusun merapatkan jurang antara bahasa mesin dan bahasa peringkat tinggi, menjadikan komputer sebagai alat untuk orang ramai.
Pada tahun 1942, Komputer Atanasoff-Berry, komputer elektronik pertama manusia, telah siap. Sejak itu, komputer terus berkembang, sehingga sukar untuk mencari seseorang di sekeliling yang tidak menggunakannya. Pada masa hadapan, kita akan tinggal di dalam hutan elektromagnet yang tidak kelihatan yang dipanggil Internet of Things, di mana objek akan disambungkan antara satu sama lain dalam rangkaian internet untuk bertukar maklumat. Apabila komputer mula-mula muncul, orang tertanya-tanya, "Mengapa membina sekeping besi buruk yang mahal dan kikuk untuk melakukan pengiraan yang boleh dilakukan dengan mudah oleh manusia?" Tetapi dalam era moden, komputer telah menjadi sangat penting sehingga dunia tidak akan berfungsi tanpanya. Salah satu alat terpenting yang telah menyumbang kepada pembangunan komputer ialah pengkompil. Tanpa penyusun, komputer mungkin masih menjadi sesuatu yang anda hanya lihat di kemudahan penyelidikan besar seperti reaktor pelakuran nuklear dan pemecut zarah, jauh daripada jisim.
Jadi apakah sebenarnya penyusun, dan mengapa ia wujud? Secara umum, pengkompil ialah alat yang menterjemahkan bahasa manusia ke dalam bahasa mesin. Bahasa mesin adalah bahasa yang boleh difahami oleh mesin. Walau bagaimanapun, bahasa mesin biasanya diwakili dalam perduaan, dengan 0s dan 1s, seperti peranti elektrik dihidupkan atau dimatikan, atau semasa hadir atau tidak hadir. Contohnya, 01100001 (97 dalam perpuluhan) mewakili huruf 'a'. Seperti yang anda lihat, bahasa mesin sangat menyusahkan untuk membaca dan menulis, jadi pada peringkat awal pembangunan komputer, bahasa yang lebih intuitif dan difahami manusia yang dipanggil bahasa himpunan digunakan sebagai ganti bahasa mesin. Walau bagaimanapun, masalah timbul apabila program dipindahkan ke komputer lain. Oleh kerana bahasa mesin ialah bahasa khusus untuk mesin, ia tidak boleh digunakan pada mesin lain. Assembler ialah terjemahan bahasa mesin yang boleh difahami manusia, jadi ia mempunyai surat-menyurat satu dengan satu dengan bahasa mesin. Jadi jika anda menukar mesin, anda perlu menulis semula berpuluh-puluh ribu baris kod dari awal. Bahasa peringkat tinggi muncul untuk menyelesaikan masalah ini. Bahasa peringkat tinggi adalah bebas mesin, bermakna ia tidak mengandungi penyataan khusus mesin, jadi ia mempunyai makna yang sama tidak kira mesin mana yang digunakan. Masalahnya ialah mesin tidak dapat memahaminya. Di sinilah pengkompil masuk. Penyusun mengurus terjemahan ke dalam bahasa mesin, membenarkan pengaturcara menulis program dalam satu bahasa peringkat tinggi biasa, walaupun terdapat pelbagai jenis mesin. Sedangkan dahulunya memerlukan 10,000 program untuk ditulis bagi 100 komputer bagi melaksanakan 100 tugasan, kini hanya memerlukan 100 compiler dan 100 program sahaja.
Pengkompil pertama telah dibangunkan oleh Dr. Grace Hopper untuk menterjemah A-0 ke dalam bahasa mesin. Ini adalah kali pertama istilah "penyusun" digunakan. Walau bagaimanapun, dari masa ke masa, alat untuk menterjemah ke dalam bahasa mesin dan pengkompil menjadi tidak sinonim. Dalam erti kata yang luas, pengkompil hanya menukar satu bahasa kepada sesuatu yang lain. Sudah tentu, semantik mesti dipelihara. Sebagai contoh, alat yang menukar bahasa mesin kembali kepada bahasa peringkat tinggi dipanggil penyahkompil. Ia boleh menukar bahasa peringkat tinggi kepada bahasa peringkat tinggi yang lain, atau ia boleh menukar bahasa mesin ke bahasa mesin yang lain. Dalam bahasa JAVA, pengkompil menterjemahkan bahasa peringkat tinggi ke dalam kod bait yang bukan mesin mahupun peringkat tinggi. Malah mungkin untuk menukar bahasa peringkat tinggi kepada fail gambar, asalkan ia masuk akal apabila ditafsirkan. Pengkompil yang menterjemah bahasa A ke bahasa A juga merupakan pengkompil jika ia dapat mengekalkan semantik dengan tepat. Ini mungkin kedengaran agak pelik. Contohnya, anda tidak pernah mendengar tentang penterjemah yang menterjemah bahasa Korea ke bahasa Korea.
Untuk memahami perkara ini, anda perlu mengetahui tentang salah satu fungsi utama pengkompil: pengoptimuman. Sebagai contoh, katakan anda perlu menghantar bungkusan dan anda perlu pergi ke setiap tingkat dari tingkat pertama hingga kesepuluh sekali. Anda boleh bermula dari tingkat satu dan naik ke tingkat 10, atau anda boleh turun dari tingkat 10 ke tingkat satu. Tapi kalau zigzag, macam naik tingkat 10, lepas tu turun tingkat 1, lepas tu naik semula ke tingkat 9, masih boleh hantar bungkusan dari tingkat 1 ke tingkat 10. Begitu juga, kod pengaturcaraan mempunyai banyak cara untuk menyelesaikan tugas tertentu, tetapi tidak semuanya menjamin prestasi terbaik, itulah sebabnya penting bagi penyusun menukar kod sumber bertulis yang tidak cekap kepada kod yang cekap. Jika penyusun antara bahasa berbeza ialah "terjemahan", penyusun antara bahasa yang sama lebih kepada tugas "mengedit" atau "bersara". Pengkompil lengkap pertama dianggap sebagai pengkompil Fortran yang dibangunkan oleh John Backus pada tahun 1957. Pengoptimuman ini masuk akal untuk penyusun yang menterjemahkan bahasa tertentu ke dalam bahasa tertentu itu. Walau bagaimanapun, dalam kebanyakan kes, kita tidak akan melihat bentuk bahasa yang diubah dan ia akan disusun terus ke dalam bahasa mesin. Bentuk perantaraan antara input dan output dalam proses terjemahan ini dipanggil "perwakilan perantaraan". Sebagai contoh, jika kita menterjemah bahasa peringkat tinggi kepada penghimpun dan kemudian kembali ke bahasa mesin, penghimpun ialah perwakilan perantaraan.
Selain itu, salah satu sebab untuk menyatakan sesuatu dalam bahasa yang sama ialah kebolehbacaan. Tidak kira betapa baiknya pengoptimuman, prestasi program bergantung pada kemahiran pengaturcara. Walau bagaimanapun, kod yang baik tidak semestinya mudah dibaca. Kod tidak ditulis sekali dan selesai; ia perlu dikekalkan apabila keadaan berubah. Jika anda tidak dapat mengingati ratusan ribu baris kod, anda perlu membaca dan mentafsirnya semula setiap kali, dan kod dengan logik yang kompleks bukan sahaja sukar untuk ditafsir, tetapi kesilapan dalam tafsiran boleh membawa kepada ralat maut dalam program anda . Jadi penting untuk memudahkan manusia memahami, bukan mesin.