Sumber: Ward CunninghamTranspilasi adalah konversi kode dari satu bahasa ke bahasa lain. Menggunakan transpiler khusus (transkompiler), satu bahasa pemrograman tujuan umum dapat ditransfer ke bahasa pemrograman tujuan umum lainnya.
Jika Anda perlu beralih ke bahasa lain, transponder akan membantu pengembang menyimpan sebagian besar kode yang ada tanpa menulis ulang seluruh kode secara manual. Misalnya, saat mengonversi program dari Python 2 ke Python 3, atau saat memindahkan perangkat lunak dari API lama ke yang baru.
Istilah transpiler dan transcompiler sering digunakan secara bergantian, tetapi masih
diyakini bahwa ada perbedaan. Misalnya, untuk mengonversi kode C ++ ke C, Anda memerlukan transpiler, dan untuk mengonversi Python-Ruby, Anda memerlukan transcompiler.
Babel untuk JavaScript adalah transpiler, dan
TypeScript adalah bahasa yang
ditranskompilasi .
Kadang-kadang, setelah konversi oleh transporter, untuk operasi kode yang benar, konfigurasi manual diperlukan, sedangkan dalam bahasa yang ditranskompilasi kode harus bekerja tanpa perubahan. Hari ini kita akan berbicara tentang itu dan yang lain, tetapi yang paling penting, kita akan berbicara tentang proyek trans populer yang dapat digunakan pengembang dalam pekerjaan sehari-hari mereka.
Transpilasi front-end
Konversi adalah bagian penting dari pengembangan front-end: karena fitur baru muncul perlahan di browser, bahasa dengan fitur eksperimental telah dibuat yang menerjemahkan ke dalam bahasa yang kompatibel dengan browser.
Pengembang browser yang menggunakan mesin JavaScript mereka sendiri di setiap proyek juga bertanggung jawab atas booming trans-bahasa untuk JavaScript. Akibatnya, browser memiliki kinerja yang berbeda, menerapkan serangkaian fungsi JavaScript mereka sendiri, dan mendekati kepatuhan penuh dengan spesifikasi pada kecepatan yang berbeda.
Sass ,
Kurang, dan
Stylus membuatnya mudah untuk membuat kode CSS. Jadi Sass memiliki sintaks yang fleksibel, logika (@jika, masing-masing), matematika (Anda dapat menambahkan angka, garis, dan warna), yang dengannya semua kekayaan kode ditransformasikan menjadi program ruby CSS biasa.
Less (Leaner Style Sheets) terlihat sama dengan CSS, tetapi memiliki tambahan yang nyaman: variabel, mixin, operasi aritmatika (seperti Sass), dll.
Stylus ditulis dalam Node.js dan berbeda dari Sass dan Less dalam sintaksis yang lebih bersih. Namun pada kenyataannya, ketiga bahasa ini sangat mirip satu sama lain, jadi jangan salah jika Anda memilih salah satu dari mereka.
Katakan "Halo, Dunia!" Dalam CoffeeScript - yang bisa lebih sederhana:
alert "Hello, World!"
CoffeeScript telah lama menjadi proyek JavaScript
paling populer . Ini tidak mengherankan: menggabungkan aksesibilitas (dokumentasi sesuai pada satu halaman), fitur fungsional (tanda kurung, lekukan, dll.) Dan sintaks murni yang diilhami Ruby, bahasa ini memberi pengembang banyak derajat kebebasan dan memungkinkan JS dibuat lebih ekspresif.
Master TypeScript:
let message:string = "Hello World" console.log(message)
TypeScript adalah proyek yang bersaing untuk JavaScript, bahasa scripting dengan penambahan pengetikan statis opsional. Memungkinkan Anda untuk lebih menjelaskan properti dan metode objek dan kelas, tidak seperti JS, menghilangkan kebutuhan untuk memverifikasi semua argumen yang termasuk dalam metode atau fungsi.
Ada pendapat bahwa JavaScript adalah bahasa dengan kelemahan mendasar. Kalau tidak, sulit untuk menjelaskan popularitas trans-bahasa yang bekerja secara khusus untuk memperbaiki kekurangannya. Selain proyek-proyek di atas, ada juga bahasa pemrograman web yang fleksibel,
Dart , kompiler JavaScript di JavaScript
Closure Compiler, dan banyak solusi lain, yang dapat Anda temukan di halaman "
Daftar bahasa yang dikompilasi dalam JS ".
Konversikan ke C
Pada tahun 2006, proyek
Vala muncul, terdiri dari dua bahasa: Vala dan Genie, yang menerjemahkan kode C paling umum, yang, pada gilirannya, dikompilasi ke dalam file atau perpustakaan yang dapat dieksekusi.
Sintaks Vala sangat mirip dengan C #, tetapi disesuaikan untuk kompatibilitas yang lebih baik dengan sistem GObject, sementara Genie memiliki banyak kesamaan dengan Python. Bahasa pertama sekarang lebih umum daripada Genie, jadi mari kita lihat lebih dekat.
Mengapa Anda membutuhkan proyek semacam itu? Banyak pengembang ingin menulis aplikasi dan pustaka untuk GNOME dalam bahasa tingkat tinggi, tetapi karena berbagai alasan tidak bisa atau tidak ingin menggunakan C # atau Java. Vala memungkinkan Anda untuk dengan cepat membuat kode berorientasi objek yang kompleks, mendukung API C standar dan ABI dengan persyaratan memori rendah.
Pustaka C # dan Java tidak dapat digunakan dengan cara yang sama seperti pustaka GObject asli dari bahasa C dan lainnya, dan mereka tidak dapat dianggap sebagai bagian dari platform GNOME. Valac, transkompiler Vala, membuat file C dari file sumber Vala seolah-olah Anda menulis pustaka atau aplikasi Anda langsung di C. Menggunakan pustaka Vala dari aplikasi C tidak berbeda dengan menggunakan pustaka berbasis GObject lainnya.
Kami membaca dan menulis file ke Vala:
voidmain () { try { string filename = "data.txt";
Anda dapat membiasakan diri dengan contoh kode lain di
situs .
Dari Flash ke Multi-Platform
Haxe dibuat pada saat yang sama dengan Vala, tetapi dimaksudkan untuk ditransformasikan dalam Flash, JavaScript dan Neko. Dengan seperangkat keterampilan seperti itu, bahasa itu ditakdirkan untuk punah, tetapi tidak hanya bertahan, tetapi juga mendapatkan popularitas besar.
Rahasia sukses adalah multi-platform. Seiring waktu, Haxe telah tumbuh menjadi seperangkat alat yang kuat yang mendukung transkompilasi ke dalam berbagai bahasa dan platform, termasuk JavaScript, C ++, C #, Java, JVM, Python, Lua, PHP dan Flash.
Haxe adalah bahasa pemrograman modern, tingkat tinggi, sangat diketik. Pada saat yang sama, itu cukup sederhana dan praktis, sehingga kompilasi dapat disesuaikan dengan berbagai platform target. Sintaksisnya pada dasarnya adalah ECMAScript standar, tetapi diubah jika perlu.
"Hello World" di Haxe:
class Main { static public function main():Void { trace("Hello World"); } }
Dalam JavaScript, baris kode ini akan terlihat seperti ini:
haxe -main HelloWorld -js HelloWorld.js
Dan di Jawa seperti ini:
haxe -main HelloWorld -java path/to/java/out
Sebagian besar kode Haxe diorganisasikan ke dalam kelas dan fungsi, menjadikannya bahasa OOP yang menyerupai Java, ActionScript 3, dan C #. Namun, Haxe dirancang dengan penekanan pada pragmatisme dan kemudahan sintaksis.
Dan tentang transpiler
- C2Rust dan Corrode adalah dua peluang yang tidak berdosa untuk bermigrasi dari C ke Rust.
- VOC adalah transporter dari Python 3.4+ ke Java yang akan membantu Anda membuat aplikasi Android berdasarkan kode Python.
- Lombok adalah solusi yang menarik bagi mereka yang tidak suka Jawa, atau tidak suka apa pun selain Jawa. Ini adalah plugin kompiler yang menambahkan "kata kunci" baru ke Java dan mengubah anotasi menjadi kode Java, mengurangi upaya pengembangan dan menyediakan fungsionalitas tambahan. Misalnya, ini memungkinkan penggunaan kata kunci val (analog var dari C #) dalam kode Java biasa.
- Bridge.NET memungkinkan Anda untuk menggunakan kinerja C # dalam JavaScript, serta VisualStudio IDE yang kuat dan alat .NET standar (seperti msbuild, refactoring, pengujian unit, analisis statis, visualisasi kode, FxCop).
- Grumpy menerjemahkan kode Python menjadi representasi Go dan memungkinkan Anda untuk menjalankan program Python di lingkungan runtime Go. Proyek ini menghilangkan masalah penguncian global dari juru bahasa, yang tidak memungkinkan eksekusi paralel dari beberapa utas kode.
Tentu saja, ada banyak transponder lainnya. Anda dapat secara tradisional berbicara tentang alat favorit Anda di komentar.
Kesimpulan
Ada banyak bahasa lain, jadi untuk proyek Anda, Anda selalu dapat memilih yang paling cocok. Tetapi situasi di mana konversi kode-ke-kode diperlukan tidak jarang, karena C ++ ke C, PHP ke C ++, dan transpirasi "apa pun dalam JavaScript" sering terjadi.
“Penerjemah” dari satu bahasa ke bahasa lain adalah ide yang bagus, tetapi hanya selama hasilnya dapat diprediksi secara jelas dan digunakan tanpa risiko. Jadi, transisi dari COBOL ke Jawa sulit, karena di Jawa sebelum JDK 1.4
tidak ada file yang dipetakan memori . Dan C2Rust dan Corrode yang disebutkan dalam artikel memberikan kode non-idiomatik, ditandai sebagai tidak aman dan diisi dengan pointer mentah.