Apa sebenarnya target kompilasi?

17

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.

ScionOfBytes
sumber
Saya menyarankan Anda untuk membaca artikel tentang kompiler.
4
Artikel tentang kompiler menganggap Anda sudah mengetahui hal ini. Itu pertanyaan yang masuk akal.
Karl Bielefeldt
Saya lebih memikirkan artikel gaya wikipedia. Dan saya setuju pertanyaan itu masuk akal. Itu hanya saran, bukan kritik.
4
Pertanyaannya masuk akal, tetapi ditulis dengan buruk. Istilah "target" dapat memiliki arti berbeda, jadi saya akan merekomendasikan untuk memberikan referensi atau lebih banyak konteks di mana Anda mendengarnya atau membaca tentangnya.
Doc Brown
@DocBrown Saya pernah mendengarnya dalam banyak konteks, tetapi yang terbaru dalam konteks web assembly menjadi target kompilasi untuk bahasa lain.
ScionOfBytes

Jawaban:

17

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 .

Blrfl
sumber
2
Sebagai catatan tambahan, mungkin perlu disebutkan bahwa istilah ini juga digunakan dalam bentuk yang lebih umum dalam konteks sistem pembangunan - target adalah output dari langkah pembangunan apa pun, yang tidak harus berupa tindakan kompilasi (mis. membuat installer).
BartoszKP
2
kompiler adalah penerjemah, bukan filter.
1
@Birfl. jelas. "tr" berarti menerjemahkan, bukan memfilter. filter bukan penerjemah, ini hanya jelas.
2
@Birfl: saya tidak menggunakan wikipedia. hanya menghasilkan satu aliran dari ssys yang lain tidak ada. perbedaan antara filter dan penerjemah sangat terkenal. filter termasuk / tidak termasuk, berdasarkan predikat. itu tidak berubah. filter daftar bilangan bulat dengan genap? dan Anda mendapatkan bilangan bulat bahkan tidak diubah. terjemahkan daftar yang sama menggunakan inc dan Anda mendapatkan versi yang diubah dari daftar asli.
1
akun kompilasi Anda baik-baik saja kecuali untuk istilah "filter".
4

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).

Chris Cirefice
sumber
0

WebAssemby adalah sesuatu yang terbaru dan terhebat, yang mengubah kode c / c ++ dalam format biner.

  • WebAssembly bertujuan untuk mengeksekusi dengan kecepatan asli dengan memanfaatkan perangkat keras umum. Itu dirancang untuk berintegrasi dengan platform web.

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.

# include<stdio.h>

int square(int num) {
    return num * num;
}

int main() {
    int res = square(4);
    printf("%d\n",res);
  return 0;
}
  • Menentukan format biner portabel, ukuran dan waktu-efisien untuk melayani sebagai target kompilasi yang dapat dikompilasi untuk dieksekusi pada kecepatan asli dengan mengambil keuntungan dari kemampuan perangkat keras umum yang tersedia pada berbagai platform, termasuk ponsel dan IoT.

Beberapa info dasar tentang host dan target, bagaimana bahasa pemrograman diterjemahkan ke dalam 10101010.

host=>pc :(windows, iOS, Linux, zOS, Solaris..etc)
target=>CPUhardware: (Intel x86, ARM, PowerPC, etc)
  1. 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.

  2. Assembler dan linker adalah bagian dari rantai alat yang berarti bahwa mereka biasanya dikirimkan bersama dengan kompiler.

  3. 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.

WebAssembly: https://github.com/WebAssembly/design

danglingpointer
sumber