Cheerp 3.0, C/C++ ke pengkompil JavaScript, berhijrah ke Apache 2.0 dan lesen LLVM

Pengkompil Cheerp 3.0 telah diperkenalkan, membolehkan anda menyusun sebarang kod C/C++ ke dalam WebAssembly atau JavaScript. Cawangan baharu ini terkenal kerana menggerakkan pengkompil dan perpustakaan yang disertakan untuk menggunakan lesen Apache 2.0 dan LLVM yang permisif, bukannya dasar pelesenan terhad yang digunakan sebelum ini, menawarkan pilihan lesen GPLv2 untuk projek bukan komersial dan lesen proprietari untuk projek komersial. Kod pengkompil adalah berdasarkan perkembangan daripada LLVM dan Clang, dan termasuk pengoptimuman tambahan untuk meningkatkan prestasi dan mengurangkan saiz hasil yang disusun.

Cheerp boleh digunakan untuk mengalihkan perpustakaan dan aplikasi C/C++ sedia ada untuk dijalankan dalam penyemak imbas, dan untuk mencipta aplikasi web berprestasi tinggi dan komponen WebAssembly dari awal. Projek ini membolehkan anda menggabungkan kod dalam C/C++ dan JavaScript dalam satu aplikasi web dengan keupayaan untuk mengakses daripada kod JavaScript kepada fungsi yang dibangunkan pada asalnya dalam C/C++, dan daripada kod C/C++ kepada objek JavaScript, perpustakaan JavaScript, API Web dan semua ciri DOM. Ia adalah mungkin untuk membuat perhimpunan gabungan, sebahagian daripada kod yang disusun ke dalam JavaScript, dan sebahagian ke dalam WebAssembly. Pembinaan projek menggunakan perpustakaan libc dan libc++ standard disokong.

Berbanding dengan pengkompil Emscripten, Cheerp menjana kod perantaraan WebAssembly yang lebih dioptimumkan dan padat (purata 7% lebih kecil terhasil fail). Secara konsep, perbezaannya ialah Emscripten digunakan sebagai format objek WebAssembly dan melakukan pemautan dan pengoptimuman dalam peringkat pasca pemprosesan WebAssembly (wasm-opt). Cheerp menggunakan kod bait LLVM sebagai perwakilan perantaraan untuk perpustakaan dan fail objek, membolehkan pengoptimuman yang lebih luas yang merangkumi keseluruhan projek dan memanfaatkan metadata peringkat LLVM tanpa memerlukan pemprosesan pasca.

Selain itu, Cheerp menggunakan pengoptimum PreExecuter, yang memastikan pelaksanaan preemptive kod pada peringkat penyusunan, sebagai contoh, untuk menukar pembina yang digunakan untuk memulakan objek global kepada pemalar. Juga, semasa penyusunan, PartialExecuter digunakan, yang, berdasarkan analisis parameter fungsi, mengalih keluar kod yang dijamin tidak akan digunakan semasa pelaksanaan.

Cheer juga boleh menjana kod JavaScript untuk memanipulasi memori secara dinamik yang dilindungi oleh pengumpul sampah. Khususnya, daripada meniru ruang alamat tradisional menggunakan tatasusunan ditaip, Cheerp menyediakan pemetaan langsung objek C++ ke objek JavaScript, yang mengurangkan penggunaan memori kerana pengumpul sampah JavaScript mempunyai keupayaan untuk mengalih keluar objek yang tidak digunakan. Untuk meningkatkan prestasi, kod perantaraan WebAssembly yang dihasilkan menggunakan sambungan SIMD yang membenarkan penyelarasan operasi data.

Cheerp boleh digunakan sebagai platform untuk mencipta aplikasi web klien/pelayan bersepadu dalam C++. Dalam amalan semasa, adalah perkara biasa untuk membangunkan bahagian hadapan dalam penyemak imbas yang berasingan, yang ditulis dalam JavaScript dan bahagian belakang yang berasingan, yang ditulis dalam PHP, Python, Ruby atau JavaScript/Node.js. Cheerp menyediakan alatan untuk mencipta aplikasi web lengkap dalam C++, di mana bahagian belakang dan bahagian hadapan disokong dalam satu pangkalan kod. Semasa proses penyusunan, bahagian pelayan disusun menjadi kod asli, dan antara muka ditukar menjadi perwakilan JavaScript. Penyahpepijatan semua komponen projek, termasuk yang ditukar kepada JavaScript, dijalankan menggunakan teks sumber dalam C++ menggunakan teknologi Peta Sumber (jika ralat berlaku, anda boleh melihat bahagian kod C++; ia menyokong menetapkan titik putus dalam kod C++ dan baris demi -line pelaksanaan langkah demi langkah kod C++ ).

Sumber: opennet.ru

Tambah komen