Saya terus mendengar istilah ini dan semua pencarian google membawa saya ke artikel tentang kompiler. Saya hanya ingin mengerti apa artinya target kompilasi: |
UPDATE: Untuk memberikan beberapa konteks: Saya pernah mendengarnya mengatakan bahwa web assembly adalah target kompilasi untuk bahasa lain seperti C, C ++, Rust dll.
Jawaban:
Kompiler pada dasarnya adalah penerjemah yang mengambil input dalam satu bahasa dan menghasilkan output dalam bahasa lain. Sebagai contoh, kompiler Software Eiffel mengambil input bahasa Eiffel dan menghasilkan C. GCC untuk Intel membaca input bahasa-C dan menghasilkan perakitan x86. Assembler GAS untuk Intel mengambil perakitan x86 dan menghasilkan kode objek x86. Ketiga hal ini secara teknis adalah penyusun.
Terlepas dari format, input yang dibaca oleh kompiler disebut sumber dan output disebut target . Istilah yang terakhir diambil dari salah satu definisinya, "hasil yang diinginkan."
Mayoritas kompiler dirancang untuk menghasilkan kode assembly atau objek untuk prosesor atau arsitektur tertentu. Karena itu, target sering digunakan untuk merujuk pada arsitektur itu sendiri daripada format output.
Target dari sebuah kompiler tidak harus sama dengan arsitektur di mana ia berjalan, dan dalam kasus di mana itu terjadi, program ini disebut cross-compiler . (Misalnya, GCC dapat dibangun untuk berjalan pada sistem x86 untuk mengkompilasi C ke dalam perakitan ARM.)
Selain itu, ada satu kompiler yang mampu menghasilkan output untuk target yang berbeda tergantung pada input seperti sakelar pada baris perintah. Ini disebut kompiler multi-target .
sumber
Dalam terjemahan, apakah bahasa adalah bahasa alami seperti bahasa Inggris, atau bahasa buatan seperti C, kami menggunakan sumber terminologi dan target untuk berbicara tentang input dan output sistem terjemahan. Dalam terjemahan bahasa alami, sistem adalah otak manusia yang kompeten yang mampu menerjemahkan antara dua bahasa. Dalam bahasa pemrograman, itu adalah kompiler.
Jadi, sumber untuk kompiler adalah bahasa pemrograman (C), sedangkan targetnya adalah bytecode (instruksi tingkat mesin). Kita sering menggunakan target dalam kompilasi karena sistem yang berbeda (arsitektur CPU) memiliki set instruksi yang berbeda, misalnya ARM, MIPS, dll. Kompiler perlu mengetahui set instruksi mana yang menjadi target, sehingga dapat membuat output yang benar (bytecode).
sumber
WebAssemby adalah sesuatu yang terbaru dan terhebat, yang mengubah kode c / c ++ dalam format biner.
Berikut ini tautan tempat salah satu aplikasi dapat Anda lihat, seberapa cepat ia mengonversi program faktorial sederhana dalam kode mesin.
Lihat binatang ini, https://godbolt.org/
Anda dapat menggunakan program sampel ini untuk berjalan di situs itu untuk melihat perakitan.
Beberapa info dasar tentang host dan target, bagaimana bahasa pemrograman diterjemahkan ke dalam 10101010.
GCC mengubah kode C / C ++ menjadi kode rakitan. Alat yang disebut "assembler" mengubah kode rakitan menjadi kode mesin dan alat yang disebut "penghubung" menghubungkan beberapa file kode mesin menjadi satu file executable (.EXE di bawah Windows). Sebagian besar kompiler ini memungkinkan Anda untuk menulis kode assembler yang dihasilkan ke dalam file sehingga Anda dapat melihat kode assembler atau memodifikasinya.
Assembler dan linker adalah bagian dari rantai alat yang berarti bahwa mereka biasanya dikirimkan bersama dengan kompiler.
Namun beberapa kompiler (seperti Microsoft) secara langsung mengkonversi kode C / C ++ ke dalam bahasa mesin sehingga tidak diperlukan assembler lagi. Banyak dari kompiler ini tidak dapat membuat kode assembler sehingga Anda tidak dapat menulis kode assembler ke dalam file.
Omong-omong: Bahkan ada kompiler (bukan untuk C / C ++, tetapi untuk bahasa pemrograman lainnya) yang secara langsung membuat file .EXE sehingga tidak perlu linker.
sumber