Cheerp 3.0, C/C++ ke compiler JavaScript, bermigrasi ke lisensi Apache 2.0 dan LLVM

Kompiler Cheerp 3.0 telah diperkenalkan, memungkinkan Anda untuk mengkompilasi kode C/C++ apa pun ke WebAssembly atau JavaScript. Cabang baru ini terkenal karena memindahkan kompiler dan perpustakaan yang menyertainya untuk menggunakan lisensi Apache 2.0 dan LLVM yang permisif, alih-alih kebijakan lisensi terbatas yang diterapkan sebelumnya, menawarkan opsi lisensi GPLv2 untuk proyek non-komersial dan lisensi kepemilikan untuk proyek komersial. Kode kompiler didasarkan pada pengembangan dari LLVM dan Clang, dan mencakup optimasi tambahan untuk meningkatkan kinerja dan mengurangi ukuran hasil kompilasi.

Cheerp dapat digunakan baik untuk mem-porting pustaka dan aplikasi C/C++ yang ada untuk dijalankan di browser, dan untuk membuat aplikasi web berkinerja tinggi dan komponen WebAssembly dari awal. Proyek ini memungkinkan Anda menggabungkan kode dalam C/C++ dan JavaScript dalam satu aplikasi web dengan kemampuan untuk mengakses dari kode JavaScript ke fungsi yang aslinya dikembangkan di C/C++, dan dari kode C/C++ ke objek JavaScript, pustaka JavaScript, API Web, dan semua fitur DOM. Dimungkinkan untuk membuat rakitan gabungan, sebagian kode dikompilasi ke dalam JavaScript, dan sebagian lagi ke WebAssembly. Ini mendukung proyek pembangunan yang menggunakan perpustakaan standar libc dan libc++.

Dibandingkan dengan kompiler Emscripten, Cheerp menghasilkan kode perantara WebAssembly yang lebih optimal dan ringkas (rata-rata file yang dihasilkan 7% lebih kecil). Secara konseptual, perbedaannya adalah Emscripten digunakan sebagai format objek WebAssembly dan melakukan penautan dan optimasi pada tahap pasca-pemrosesan WebAssembly (wasm-opt). Cheerp menggunakan bytecode LLVM sebagai representasi perantara untuk perpustakaan dan file objek, memungkinkan pengoptimalan yang lebih luas yang mencakup keseluruhan proyek dan memanfaatkan metadata tingkat LLVM tanpa memerlukan pasca-pemrosesan.

Selain itu, Cheerp menggunakan pengoptimal PreExecuter, yang memastikan eksekusi kode preemptif pada tahap kompilasi, misalnya, untuk mengubah konstruktor yang digunakan untuk menginisialisasi objek global menjadi konstanta. Selain itu, selama kompilasi, PartialExecuter digunakan, yang berdasarkan analisis parameter fungsi, menghapus kode yang dijamin tidak akan digunakan selama eksekusi.

Cheer juga dapat menghasilkan kode JavaScript untuk memanipulasi memori secara dinamis yang dicakup oleh pengumpul sampah. Secara khusus, alih-alih meniru ruang alamat tradisional menggunakan array yang diketik, Cheerp menyediakan pemetaan langsung objek C++ ke objek JavaScript, yang mengurangi konsumsi memori karena pengumpul sampah JavaScript memiliki kemampuan untuk menghapus objek yang tidak digunakan. Untuk meningkatkan kinerja, kode perantara WebAssembly yang dihasilkan menggunakan ekstensi SIMD yang memungkinkan paralelisasi operasi data.

Cheerp dapat digunakan sebagai platform untuk membuat aplikasi web klien/server terintegrasi di C++. Dalam praktik saat ini, merupakan hal yang umum untuk mengembangkan front end dalam browser terpisah, yang ditulis dalam JavaScript, dan back end terpisah, yang ditulis dalam PHP, Python, Ruby, atau JavaScript/Node.js. Cheerp menyediakan alat untuk membuat aplikasi web lengkap dalam C++, di mana backend dan frontend didukung dalam satu basis kode. Selama proses kompilasi, sisi server dikompilasi menjadi kode asli, dan antarmuka diubah menjadi representasi JavaScript. Debugging semua komponen proyek, termasuk yang dikonversi ke JavaScript, dilakukan menggunakan teks sumber dalam C++ menggunakan teknologi Source Map (jika terjadi kesalahan, Anda dapat melihat bagian kode C++; ini mendukung pengaturan breakpoint dalam kode C++ dan baris demi baris -line eksekusi kode C++ langkah demi langkah).

Sumber: opennet.ru

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster