seberapa layak untuk mem-port aplikasi C ++ ke Java bytecode menggunakan LLVM (saya kira LLJVM)?
Masalahnya adalah bahwa saat ini kami memiliki proses yang ditulis dalam C ++ tetapi klien baru telah membuat wajib untuk dapat menjalankan program dengan cara multiplatform, menggunakan Java Virtual Machine dengan jelas tanpa kode asli (tanpa JNI). Idenya adalah untuk dapat mengambil toples yang dihasilkan dan menyalin kemudian ke sistem yang berbeda (Linux, Win, 32 bit - 64 bit) dan seharusnya berfungsi.
Melihat sekeliling tampak seperti mungkin untuk mengkompilasi kode C ++ ke LLVM IR dan kemudian kode itu ke bytecode java. Kode yang dihasilkan tidak perlu dibaca.
Saya telah menguji sedikit dengan hal-hal serupa menggunakan emscripten, ini membutuhkan kode C ++ dan kompilasi ke JavaScript. Hasilnya adalah JS yang valid tetapi benar-benar tidak dapat dibaca (seperti assambler).
- Adakah yang melakukan port aplikasi dari C ++ ke Java bytecode menggunakan teknik ini?
- Masalah apa yang bisa kita hadapi?
- Apakah pendekatan yang valid untuk kode produksi?
Untuk memperjelas poin saya setelah beberapa komentar, mungkin port tidak digunakan dengan baik, saya tidak mengharapkan kode sumber yang dapat dibaca sebagai hasilnya, hanya java bytecode, jadi itu bukan 'port' yang akan dikembangkan lagi, hanya saja target plattform harus java JVM bukan assamblear asli.
Catatan: Saya sadar bahwa saat ini kami memiliki beberapa pustaka sumber C + + dan non-standar, kami sedang mencari untuk menghapus kode non-pangkalan ini dan semua pustaka sumber dekat dan menggunakan Free Libre Open Source Software, jadi anggaplah semua kode adalah kode standar C ++ dengan semua kode tersedia pada waktu kompilasi.
Note2: Ini bukan pilihan untuk menulis kode C ++ portabel dan kemudian mengkompilasinya ke platform target yang diinginkan, program yang dikompilasi harus multiplatform, sehingga penggunaan JVM.
Note3: Saat ini kami tidak mencari solusi serupa yang diterapkan pada Python atau basis bahasa lain, tetapi saya juga ingin mendengarnya. Dengan ini saya maksudkan bahwa target kita yang dapat dieksekusi harus bytecode java tetapi jika ada opsi untuk mengkompilasi C ++ ke kode terkompilasi python yang valid saya juga ingin mendengar tentang mereka.
Jawaban:
Saya benar-benar ragu ini akan berhasil. Anda mungkin dapat menerjemahkan kode Anda ke kode byte Java, tetapi itu tidak akan secara ajaib menerjemahkan panggilan perpustakaan menjadi panggilan yang setara dengan Java runtime dan libraries. Bahkan mungkin tidak ada panggilan Java runtime yang setara! Bahkan jika Anda menghilangkan semua perpustakaan eksklusif Anda masih tersisa dengan perpustakaan standar C ++.
Untuk membuat ini konkret: program C ++ Anda mungkin berisi panggilan ke fprintf (). Fungsi itu diimplementasikan dalam pustaka standar C dan sangat sah untuk memanggil program C ++. Penerjemah LLVM ke LLJVM mungkin tidak akan secara ajaib mengetahui urutan panggilan run time Java yang akan menghasilkan hasil yang setara dengan fprintf () dan menggantikan mereka yang masuk. Untuk menyediakan fasilitas tersebut pada dasarnya akan memerlukan implementasi ulang runtime C dan C ++ di Jawa kode byte
Ada beberapa alat yang melakukan terjemahan C ++ ke Java tetapi mereka hanya mengkonversi beberapa panggilan pustaka runtime yang lebih sederhana. Sisanya diserahkan kepada Anda untuk mencari tahu.
sumber
apr
atau serupa)