Jika sesuatu dapat dihasilkan, maka hal itu adalah data, bukan kode.
Sejauh yang Anda tentukan nanti tentang kode itu adalah data, proposisi Anda berkurang menjadi "Jika sesuatu dapat dihasilkan, maka benda itu bukan kode." Jadi, bisakah Anda mengatakan bahwa kode rakitan yang dihasilkan oleh kompiler C bukan kode? Bagaimana jika kebetulan itu bertepatan dengan kode perakitan yang saya tulis dengan tangan? Anda dipersilakan untuk pergi ke sana jika Anda mau, tetapi saya tidak akan ikut dengan Anda.
Mari kita mulai dengan definisi "kode". Tanpa terlalu teknis, definisi yang cukup bagus untuk keperluan diskusi ini adalah "instruksi yang dapat ditindaklanjuti dengan mesin untuk melakukan perhitungan."
Karena itu, bukankah seluruh gagasan pembuatan kode sumber ini merupakan kesalahpahaman?
Ya, proposisi awal Anda adalah bahwa kode tidak dapat dibuat, tetapi saya menolak proposisi itu. Jika Anda menerima definisi saya tentang "kode" maka seharusnya tidak ada masalah konseptual dengan pembuatan kode secara umum.
Yaitu, jika ada generator kode untuk sesuatu, maka mengapa tidak menjadikan sesuatu itu fungsi yang tepat yang dapat menerima parameter yang diperlukan dan melakukan tindakan yang benar bahwa kode "akan dihasilkan" akan dilakukan?
Nah itu pertanyaan yang sama sekali berbeda, tentang alasan mempekerjakan pembuatan kode, bukan tentang sifatnya. Anda mengusulkan alternatif yang alih-alih menulis atau menggunakan pembuat kode, satu menulis fungsi yang menghitung hasilnya secara langsung. Namun dalam bahasa apa? Lewat sudah hari-hari ketika seseorang menulis secara langsung dalam kode mesin, dan jika Anda menulis kode Anda dalam bahasa lain maka Anda bergantung pada pembuat kode dalam bentuk kompiler dan / atau assembler untuk menghasilkan program yang benar-benar berjalan.
Jadi, mengapa Anda lebih suka menulis di Java atau C atau Lisp atau apa pun? Bahkan assembler? Saya menegaskan bahwa itu sebagian karena bahasa-bahasa tersebut menyediakan abstraksi untuk data dan operasi yang membuatnya lebih mudah untuk mengekspresikan rincian perhitungan yang ingin Anda lakukan.
Hal yang sama juga berlaku untuk kebanyakan generator kode level yang lebih tinggi. Kasing prototipe mungkin generator pemindai dan pengurai seperti lex
dan yacc
. Ya, Anda bisa menulis pemindai dan pengurai langsung dalam bahasa C atau dalam bahasa pemrograman lain pilihan Anda (bahkan kode mesin mentah), dan kadang-kadang orang melakukannya. Tetapi untuk masalah kompleksitas yang signifikan, menggunakan tingkat tinggi, bahasa tujuan khusus seperti lex's atau yacc's membuat kode tulisan tangan lebih mudah untuk menulis, membaca, dan memelihara. Biasanya jauh lebih kecil juga.
Anda juga harus mempertimbangkan apa yang sebenarnya Anda maksud dengan "pembuat kode". Saya akan mempertimbangkan preprocessing C dan instantiation template C ++ sebagai latihan dalam pembuatan kode; apakah Anda keberatan dengan ini? Jika tidak, maka saya pikir Anda perlu melakukan beberapa senam mental untuk merasionalisasi menerima itu tetapi menolak rasa generasi kode lainnya.
Jika itu dilakukan karena alasan kinerja, maka itu terdengar seperti kekurangan dari kompiler.
Mengapa? Anda pada dasarnya berpendapat bahwa seseorang harus memiliki program universal di mana pengguna memasukkan data, beberapa diklasifikasikan sebagai "instruksi" dan yang lain sebagai "input", dan yang mulai melakukan perhitungan dan memancarkan lebih banyak data yang kita sebut "output". (Dari sudut pandang tertentu, orang mungkin menyebut program universal seperti itu sebagai "sistem operasi".) Tetapi mengapa Anda mengira bahwa kompiler harus sama efektifnya dalam mengoptimalkan program tujuan umum seperti halnya dalam mengoptimalkan program yang lebih khusus program? Kedua program memiliki karakteristik dan kemampuan yang berbeda.
Jika sedang dilakukan untuk menjembatani dua bahasa, maka itu terdengar seperti kurangnya antarmuka perpustakaan.
Anda mengatakan bahwa seolah-olah memiliki perpustakaan antarmuka universal-ke-beberapa derajat tentu akan menjadi hal yang baik. Mungkin memang demikian, tetapi dalam banyak kasus perpustakaan seperti itu akan besar dan sulit untuk ditulis dan dipelihara, dan mungkin bahkan lambat. Dan jika binatang seperti itu sebenarnya tidak ada untuk melayani masalah tertentu yang ada, lalu siapa Anda yang bersikeras bahwa seseorang harus diciptakan, ketika pendekatan pembuatan kode dapat menyelesaikan masalah dengan lebih cepat dan mudah?
Apakah saya melewatkan sesuatu di sini?
Beberapa hal, saya pikir.
Saya tahu bahwa kode adalah data juga. Yang tidak saya mengerti adalah, mengapa menghasilkan kode sumber? Mengapa tidak membuatnya menjadi fungsi yang dapat menerima parameter dan menindaklanjutinya?
Pembuat kode mentransformasikan kode yang ditulis dalam satu bahasa menjadi kode dalam bahasa yang berbeda, biasanya tingkat yang lebih rendah. Anda bertanya, lalu, mengapa orang ingin menulis program menggunakan banyak bahasa, dan terutama mengapa mereka mungkin ingin mencampur bahasa dari tingkat yang berbeda secara subyektif.
Tapi saya sudah menyentuh itu. Seseorang memilih bahasa untuk tugas tertentu berdasarkan sebagian pada kejelasan dan ekspresifnya untuk tugas itu. Karena kode yang lebih kecil memiliki lebih sedikit bug rata-rata dan lebih mudah dipelihara, ada juga bias terhadap bahasa tingkat yang lebih tinggi, setidaknya untuk pekerjaan skala besar. Tetapi program yang kompleks melibatkan banyak tugas, dan seringkali beberapa di antaranya dapat ditangani secara lebih efektif dalam satu bahasa, sedangkan yang lain lebih efektif atau lebih ringkas ditangani dalam bahasa lain. Menggunakan alat yang tepat untuk pekerjaan itu terkadang berarti menggunakan pembuatan kode.