Bagaimana saya bisa mengatakan bahwa bahasa pemrograman mengkompilasi ke bahasa lain?

22

Bagaimana saya bisa mengatakan dalam bahasa Inggris, bahwa bahasa pemrograman dapat dikompilasi ke bahasa pemrograman lain?

Contohnya bisa Haxe . Di situs web bahasa didekribusikan sebagai "Multiplatform":

Multiplatform: Haxe dapat dikompilasi ke semua platform pemrograman populer dengan kompiler cepatnya - JavaScript, Flash, NekoVM, PHP, C ++, C # dan Java (segera)

tetapi multiplatform dapat disalahpahami sebagai platform perangkat keras atau perangkat lunak (win, mac, linux).

Jadi apa kata yang paling cocok untuk menggambarkan kemampuan ini?

danilo2
sumber
3
Saya akan menghapus "kompilasi" dan hanya mengatakan bahwa bahasa pemrograman ini dapat diubah menjadi yang lain melalui penggunaan beberapa penerjemah.
Neil
6
Anda dapat menggunakan kata yang sama seperti untuk bahasa biasa: terjemahkan, penerjemah. Jelas, dan saya pernah mendengar kata yang digunakan dalam pengertian ini.
superM
4
@teresko Bagaimana bisa begitu? Satu-satunya cara saya bisa melihat Anda berdebat adalah Anda menggunakan definisi kompilasi yang terlalu ketat dan tidak berguna (yang membatasi output ke kode mesin).
18
@ Neil: mengubah program yang ditulis dalam satu bahasa ke bahasa lain bukan interpretasi. Bahkan, ini adalah definisi dari kompilasi .
Jörg W Mittag
2
@ Neil, kompilasi, menurut definisi, adalah transformasi dari satu bahasa ke bahasa lain. Dan "transformasi" terdengar sama tidak jelas dan misteriusnya sebagai "kompilasi", selama pembaca Anda tidak berpengalaman dalam penulisan ulang istilah dan semacamnya. Jadi saya sarankan menggunakan kata "penargetan", misalnya, "Haxe menargetkan JavaScript, Flash, apa pun, dan semacamnya".
SK-logic

Jawaban:

41

Istilah yang biasa adalah "transkompilasi" - bukan istilah yang umum, tetapi yang secara teknis benar. Ini bukan hanya untuk bahasa skrip baru yang trendi (CoffeeScript -> JavaScript); kompiler C ++ pertama sebenarnya adalah transkompiler ke C.

Kilian Foth
sumber
2
Juga "transpiles" seperti dalam "Transfile mentransformasikan CoffeeScript ke dalam Javascript"
4
Saya belum pernah mendengar istilah ini sebelumnya, berada di lapangan selama beberapa dekade. Pikiran menunjuk ke asal-usulnya (tautan ke kertas pertama di mana ia muncul akan menjadi yang terbaik)?
SK-logic
Dari Wikipedia : "Kompilator sumber-ke-sumber [alias." Transkompiler "," transpiler "] menerjemahkan antara bahasa pemrograman yang beroperasi pada tingkat abstraksi yang kira-kira sama, sedangkan kompiler tradisional menerjemahkan dari bahasa pemrograman tingkat yang lebih tinggi ke bahasa yang lebih rendah bahasa pemrograman tingkat. "
l0b0
4
@ l0b0, wikipedia tidak mengomentari asal-usul istilah, dan itu pasti tidak pernah seharusnya menjadi sumber asli .
SK-logic
3
... mencari "transkompilasi" di google tidak menghasilkan hasil yang terkait ...
Bakuriu
27

Tuan-tuan maaf, tapi kata untuk ini hanya "dikompilasi" . Itu berarti mengubah satu jenis kode menjadi jenis kode lain. Tidak ada perbedaan nyata jika kode itu adalah bahasa Inggris, C ++, kode mesin x86, kode mesin ARM, Java, bytecode , atau kembali ke bahasa Inggris. Kami biasanya menggunakannya untuk mengartikan perjalanan dari bahasa pemrograman ke kode mesin, tetapi itulah aspek yang didapat dari waktu ke waktu. Dan hei, jika cukup banyak orang mulai menggunakan kata yang salah, itu memang mendapatkan makna baru. Tetapi jika Anda menginginkan kata untuk mengubah Haxe menjadi C ++, kata tersebut adalah "kompilasi" .

Multiplatform: Haxe dapat dikompilasi ke dalam semua bahasa pemrograman populer dengan kompiler cepatnya - JavaScript, Flash, NekoVM, PHP, C ++, C # dan Java (segera)

(Juga, aku mengabaikan Merriam-Webster, karena mereka bodoh karena mereka tidak setuju denganku ... hmmmm)

Philip
sumber
10

Mungkin ini adalah pertanyaan untuk https://english.stackexchange.com/ namun saya akan mengatakan bahwa proses kompilasi mencakup kompilasi ke bahasa tingkat tinggi lainnya dan tidak hanya terbatas pada kompiler yang mengkompilasi kode mesin asli.

Sebagai kata "Kompilasi" tidak spesifik untuk kompiler komputer sama sekali dan cukup umum. "Mengompilasi tabel" atau "menyusun daftar nama" muncul di benak saya, oleh karena itu cukup luas untuk banyak tujuan (pemroses teks seperti juga kompilasi Latex, dll.). Untuk lebih spesifik tentang target kompilasi saya akan menggunakan to-source-compiler

Sekarang untuk contoh spesifik, saya pikir platform adalah kata yang tepat untuk digunakan. Karena bahasa manusia secara inheren ambigu, Anda harus menggunakan redundansi (contoh, parafrase dengan kata lain, menjelaskan) untuk mendapatkan maksud jika ragu-ragu.

Saya juga akan membaca pernyataan "Haxe" dengan cara yang mencakup perpustakaan standar dan hal-hal serupa. Yaitu dalam hal itu plattform akan menjadi superset "bahasa" dan Anda dapat memisahkannya dengan menyebutnya "platform pengembangan perangkat lunak" dll.

wirrbel
sumber
4
Saya pikir maksud Anda english.stackexchange.com?
Suman
3

Anda dapat mengatakan bahwa kompiler memiliki bahasa X, Y, dan Z sebagai target terjemahan , atau merancang bahasa dengan target tersebut dalam pikiran.

datang badai
sumber
2

Saya akan mengatakan bahwa kompiler dengan definisi diterjemahkan ke dalam bahasa pemrograman yang berbeda (setidaknya ini adalah definisi yang saya tahu - program yang mengubah satu bahasa menjadi bahasa lain). Sebagai contoh, kebanyakan kompiler C menghasilkan perakitan sebagai output. Compiler Majelis mengambil output ini dan mengubahnya menjadi kode biner yang juga merupakan bahasa (tentu - mungkin tidak ada yang menulis menulis di dalamnya selama 40 tahun terakhir atau lebih tetapi secara teknis itu adalah bahasa) - yang dapat diambil dan dikompilasi ulang untuk mengatakan mikro ops oleh prosesor (atau ada operasi tertentu yang dilakukan oleh linker pada file objek). Demikian pula denganjavapmengkompilasi menjadi bytecode. Biasanya pada akhir rantai seperti itu ada juru bahasa yang mengeksekusi kode akhir (baik itu CPU, GPU atau program yang dijalankan). Tidak ada yang namanya kode mesin sebagai x86 modern mengkompilasi ulang program ke dalam operasi internal (micro-ops) dan saya sangat mampu memperlakukan kode mesin ARM sebagai bahasa yang ditafsirkan pada x86 atau sebaliknya (dalam beberapa kasus bahkan mengkompilasi ulang dari satu bentuk ke bentuk lainnya).

Haxe adalah kompiler sumber-ke-sumber karena ia tidak mengubah bahasa level yang lebih tinggi ke level yang lebih rendah seperti contoh sebelumnya. Tampaknya tidak membahas langsung masalah ambiguitas multi-platform Anda, tetapi sayangnya saya tidak berpikir ada cara praktis untuk membedakan antara kedua hal tersebut - API adalah jenis bahasa yang dapat diartikan secara umum, disusun ulang dll.

Maciej Piechotka
sumber
1

Hal pertama yang pertama: Saya tidak tahu apakah sudah ada kata yang cocok untuk fitur ini.

Tapi mungkin itu bisa disebut multilanguage? Atau bahasaagnostik? Karena ini lebih tentang bahasa pemrograman, maka penyebutan 'bahasa' dalam nama bisa membuatnya lebih jelas daripada multiplatform.

Tentu saja bahasa juga ambigu, karena dapat dipahami bahwa kode sumber dapat ditulis dalam bahasa dunia nyata (misalnya karena variabel dapat ditulis dalam unicode).

Di sisi lain, setiap programmer berpengalaman mungkin akan mengenali konstruk yang berbeda dari lokalisasi atau internasionalisasi, sehingga mereka mungkin 'mendapatkannya' dengan lebih mudah.

Hanya 2 sen saya.

Enduriel
sumber
saya tidak berpikir itu akurat; dan jika Anda melihat fakta, situs hanya menyukai jawaban yang benar secara faktual. tapi selamat datang di komunitas dan harap Anda menjawab lebih banyak lagi di mana Anda yakin tentang jawabannya :)
tgkprog