Pemortaan: Perbedaan antara revisi

Konten dihapus Konten ditambahkan
Tidak ada ringkasan suntingan
Tag: VisualEditor Suntingan perangkat seluler Suntingan peramban seluler
Tag: Suntingan perangkat seluler Suntingan peramban seluler
Baris 22:
 
== Kompilator portaan ==
Alih-alih menerjemahkan langsung ke [[kode mesin]], [[kompiler|kompilator]] modern menerjemahkan ke [[Bytecode|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 [[Intermediate representation|bahasa perantara]] (sebuah mesin yang ditentukan oleh bahasanya dan sebaliknya).<ref name="Machinelanguage">{{harvnb|Tanenbaum|1984|p=3. §1.1 Languages,Levels, and Virtual Machines}} describes the terms and their relations.</ref> Instruksi kode perantara diterjemahkan ke dalam urutan kode mesin yang setara oleh sebuah ''code generator'' (penghasil kode) untuk membuat [[Executable|kode yang dapat dieksekusi]]. Dimungkinkan juga untuk melewati pembuatan kode mesin dengan benar-benar menerapkan ''[[interpreter]]'' atau [[Just-in-time compilation|JIT]] untuk mesin virtual.<ref>{{harvnb|Tanenbaum|1984|p=2. Ch. 1 Introduction}} explains translation and interpretation.</ref>
 
Penerjemah[[interpreter|Penafsir]] tidak terlalu rumit dan oleh karena itu lebih mudah untuk di-portdiporta daripada generatorpenghasil kode, karena tidak dapat melakukan pengoptimalan kode karena tampilan kode programnya terbatas (itu hanya melihat satu instruksi pada satu waktu, dan Anda memerlukan urutan untuk melakukan optimasi). Beberapa ''interpreter'' (penafsir) sangat mudah untuk di-portdiporta, karena mereka hanya membuat asumsi minimal tentang set instruksi dari perangkat keras yang mendasarinya. Hasilnya, mesin virtual bahkan lebih sederhana daripada ''CPU target''.<ref>{{harvnb|Richards|Whitby-Strevens|1984|p=133. §7.4 The bootstrapping process and INTCODE}} explains the role of the INTCODE interpreter.</ref>
 
Menulis sumber kompilator seluruhnya dalam bahasa pemrograman yang seharusnya diterjemahkan oleh kompilator, membuat pendekatan berikut, lebih dikenal sebagai ''[[Bootstrapping (kompiler)|compiler bootstrapping]]'', layak di mesin sasaran:
 
# Pemortaan penerjemahpenafair. Ini perlu dikodekan dalam [[Bahasa rakitan|kode rakitan]], menggunakan ''[[assembler]]'' yang sudah ada di sasaran.
# Sesuaikan sumber pembuatpenghasil kode (''code generator'') ke mesin baru.
# Eksekusi sumber yang disadurkan menggunakan penerjemah dengan sumber pembuatpenghasil kode sebagai masukan. Ini akan menghasilkan kode mesin untuk pembuatpenghasil kode.
 
Bagian yang sulit dari pengkodean rutinitas pengoptimalan dilakukan dengan menggunakan [[bahasa pemrograman tingkat tinggi|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.<ref>{{harvnb|Richards|Whitby-Strevens|1984|p=136. §7.4.3 Example}} gives an example translation of a BCPL program into INTCODE for the interpreter.</ref>