Saat mencari tentang perbedaannya, saya menemukan definisi ini:
Kompilasi adalah istilah umum untuk mengambil kode sumber yang ditulis dalam satu bahasa dan mengubahnya ke bahasa lain.
Transpiling adalah istilah khusus untuk mengambil kode sumber yang ditulis dalam satu bahasa dan mengubahnya ke bahasa lain yang memiliki tingkat abstraksi yang serupa.
Saya mengerti apa itu Abstraksi.
Tetapi apa arti "tingkat abstraksi yang serupa" dalam definisi di atas? Dan bagaimana kita menemukan tingkat abstraksi dalam suatu bahasa?
compiler-construction
abstraction
transpiler
Nishi Mahto
sumber
sumber
Jawaban:
Definisi yang Anda kutip di atas terlalu umum untuk dipahami sepenuhnya oleh pemula, jadi izinkan saya menyederhanakannya menjadi sesuatu yang kita lihat secara praktis.
Compiler: adalah istilah umum untuk mendeskripsikan program yang mengambil kode sumber yang ditulis dalam satu bahasa dan menghasilkan (atau banyak) file output dalam beberapa bahasa lain. Dalam prakteknya kita kebanyakan menggunakan istilah ini untuk mendeskripsikan kompiler seperti gcc yang mengambil kode C sebagai masukan dan menghasilkan biner yang dapat dieksekusi (kode mesin) sebagai keluaran.
Transpiler juga dikenal sebagai kompiler sumber-ke-sumber. Jadi pada dasarnya mereka adalah bagian dari kompiler yang mengambil file kode sumber dan mengubahnya menjadi file kode sumber lain dalam beberapa bahasa lain atau versi berbeda dari bahasa yang sama. Ouput umumnya dapat dimengerti oleh manusia. Output ini masih harus melalui compiler atau interpreter agar dapat dijalankan di mesin.
Beberapa contoh transpiler:
Sekarang, apa yang mereka maksud dengan "tingkat abstraksi yang serupa": Seperti yang saya katakan itu mengkompilasi / transpiles ke file sumber, orang dapat berpendapat bahwa bahasa assembly juga merupakan file sumber dan dengan demikian gcc juga merupakan transpiler. Jadi, argumen inilah yang serupa dengan tingkat abstraksi yang kosong.
Gagasan untuk mengkategorikan bahasa ke tingkat bawah, menengah, dan atas didasarkan pada tingkat abstraksi yang mereka sediakan dari kerja aktual mesin / arsitektur.
Bahasa tingkat bawah seperti assembly sangat mirip dengan arsitektur prosesor, misalnya memiliki instruksi berbeda untuk prosesor yang berbeda. Sementara C / C ++ / Java / JavaScript, abstrak semua ini menyediakan lebih banyak abstraksi.
Jadi, transpiler mengkompilasi ke bahasa yang lebih dekat dengan bahasa yang Anda gunakan dalam abstraksi ini (atau lebih dekat ke level bahasa tersebut di tangga bahasa level bawah-menengah-atas).
Semoga ini membantu!
sumber
Berikut ini semacam cara deskriptif untuk menjawab
Jika Anda menganggap lapisan abstraksi sebagai contoh ini:
Kompiler pergi ke tingkat yang lebih rendah (angka lebih rendah). Transpiler beralih dari satu bahasa (atau versi bahasa) ke bahasa lain pada nomor yang sama.
sumber
javac
kompiler atau tidak.Saya sangat setuju dengan tapananand jawaban, tapi ...
definisi
Kata-kata "dibuat", sehingga memiliki tujuan. Dan ini juga berubah seiring waktu.
Kita sekarang cenderung menggunakan transpiler untuk menentukan kompilator yang menerjemahkan kode ke kode lain yang "lebih mirip" dengan kode sumber, yang mungkin dilakukan oleh kompilator. Dan digunakan untuk membedakan keduanya sebagian besar ketika keduanya disebutkan dalam konteks yang sama (sekali lagi sebagian besar menyiratkan bahwa bahasa transpile harus dikompilasi setidaknya sekali lagi)
contoh
Jadi semuanya sangat subjektif. Pada saat penulisan ini:
fazit
Jadi transpile saat ini sangat jarang digunakan lagi, dan hanya untuk membedakan dua kompiler.
Ini mungkin akan menghilang sebagai konsep, karena kompilasi jauh lebih rumit dari itu (bahasa yang sama / lebih tinggi / lebih rendah, versi, dll), dan kata tersebut sepertinya tidak berguna lagi ("transpiler" sekarang ada dimana-mana)
sumber
Contoh: TypeScript (superset Microsoft dari JavaScript dengan tipe pemeriksaan aman) mentransformasikan ke kode JavaScript yang dapat dijalankan di berbagai jenis browser.
https://en.wikipedia.org/wiki/Microsoft_TypeScript "Microsoft TypeScript adalah bahasa pemrograman sumber terbuka yang dikembangkan dan dikelola oleh Microsoft. Ini adalah superset sintaksis ketat dari JavaScript, dan menambahkan pengetikan statis opsional ke bahasa tersebut.
TypeScript dirancang untuk pengembangan aplikasi besar dan ditranskompilasi ke JavaScript. [5] Karena TypeScript adalah superset dari JavaScript, program JavaScript yang ada juga merupakan program TypeScript yang valid. TypeScript dapat digunakan untuk mengembangkan aplikasi JavaScript untuk eksekusi sisi klien dan sisi server (Node.js). "
sumber