Coba jelasin Kompilator portaan dari Porting dong

Alih-alih menerjemahkan langsung ke kode mesin, kompilator modern menerjemahkan ke kode perantara mesin independen untuk meningkatkan portabilitas kompilator dan meminimalkan upaya desain. Bahasa perantara mendefinisikan mesin virtual yang dapat menjalankan semua program yang ditulis dalam bahasa perantara (sebuah mesin yang ditentukan oleh bahasanya dan sebaliknya). Instruksi kode perantara diterjemahkan ke dalam urutan kode mesin yang setara oleh sebuah code generator (penghasil kode) untuk membuat kode yang dapat dieksekusi. Dimungkinkan juga untuk melewati pembuatan kode mesin dengan benar-benar menerapkan interpreter atau JIT untuk mesin virtual.

Penafsir tidak terlalu rumit dan oleh karena itu lebih mudah untuk diporta daripada penghasil kode, karena tidak dapat melakukan pengoptimalan kode karena tampilan kode programnya terbatas (hanya melihat satu instruksi pada satu waktu, dan Anda memerlukan urutan untuk melakukan optimasi). Beberapa interpreter (penafsir) sangat mudah untuk diporta, karena mereka hanya membuat asumsi minimal tentang set instruksi dari perangkat keras yang mendasarinya. Hasilnya, mesin virtual bahkan lebih sederhana daripada CPU target.

Menulis sumber kompilator seluruhnya dalam bahasa pemrograman yang seharusnya diterjemahkan oleh kompilator, membuat pendekatan berikut, lebih dikenal sebagai compiler bootstrapping, layak di mesin sasaran:

Pemortaan penafair. Ini perlu dikodekan dalam kode rakitan, menggunakan assembler yang sudah ada di sasaran.

Sesuaikan sumber penghasil kode (code generator) ke mesin baru.

Eksekusi sumber yang disadurkan menggunakan penerjemah dengan sumber penghasil kode sebagai masukan. Ini akan menghasilkan kode mesin untuk penghasil kode.

Bagian yang sulit dari pengkodean rutinitas pengoptimalan dilakukan dengan menggunakan bahasa tingkat tinggi alih-alih bahasa rakitan sasaran.

Menurut para perancang bahasa BCPL, kode yang ditafsirkan (dalam kasus BCPL) lebih ringkas daripada kode mesin; biasanya dengan faktor dua banding satu. Namun kode yang ditafsirkan berjalan sekitar sepuluh kali lebih lambat daripada kode yang dikompilasi pada mesin yang sama.

Para perancang bahasa pemrograman Java mencoba memanfaatkan kekompakan kode yang ditafsirkan, karena program Java mungkin perlu dikirim melalui Internet sebelum eksekusi dapat dimulai pada Mesin Virtual Java sasaran.