Cheerp 3.0, C/C++ ka kompiler JavaScript, hijrah ka Apache 2.0 sareng lisensi LLVM

Kompiler Cheerp 3.0 parantos diwanohkeun, ngamungkinkeun anjeun pikeun nyusun kode C / C ++ kana WebAssembly atanapi JavaScript. Cabang anyar kasohor pikeun ngagerakkeun kompiler sareng perpustakaan anu ngiringan nganggo permisif Apache 2.0 sareng lisensi LLVM, tibatan kawijakan lisénsi kawates anu diterapkeun sateuacana, nawiskeun pilihan lisénsi GPLv2 pikeun proyék-proyék non-komérsial sareng lisénsi proprietary pikeun komérsial. Kode kompiler dumasar kana kamajuan tina LLVM na Clang, tur ngawengku optimizations tambahan pikeun ngaronjatkeun kinerja sarta ngurangan ukuran tina hasil disusun.

Cheerp bisa dipaké duanana pikeun porting aya C / C ++ perpustakaan jeung aplikasi pikeun dijalankeun dina browser, sarta pikeun nyieun-kinerja tinggi aplikasi wéb jeung komponén WebAssembly ti scratch. Proyék ieu ngamungkinkeun anjeun pikeun ngagabungkeun kode dina C / C ++ sareng JavaScript dina hiji aplikasi wéb kalayan kamampuan aksés tina kode JavaScript kana fungsi anu asalna dikembangkeun dina C / C ++, sareng tina kode C / C ++ ka objék JavaScript, perpustakaan JavaScript, API wéb sareng kabéh fitur DOM. Kasebut nyaéta dimungkinkeun pikeun nyieun rakitan gabungan, bagian tina kode nu geus disusun kana JavaScript, sarta bagian kana WebAssembly. Ngawangun proyék nganggo perpustakaan libc sareng libc++ standar dirojong.

Dibandingkeun sareng kompiler Emscripten, Cheerp ngahasilkeun kode perantara WebAssembly anu langkung dioptimalkeun sareng kompak (rata-rata 7% file anu langkung alit). Conceptually, bédana nyaéta yén Emscripten dipaké salaku format obyék WebAssembly sarta ngalakukeun linking jeung optimasi dina WebAssembly tahap pos-processing (wasm-opt). Cheerp nganggo bytecode LLVM salaku perwakilan perantara pikeun perpustakaan sareng file obyék, ngamungkinkeun pikeun optimasi anu langkung lega anu ngalangkungan sadayana proyék sareng ngungkit metadata tingkat LLVM tanpa peryogi pemrosesan pasca.

Salaku tambahan, Cheerp nganggo pangoptimal PreExecuter, anu mastikeun palaksanaan preemptive kode dina tahap kompilasi, contona, pikeun ngarobih konstruktor anu dianggo pikeun ngamimitian objék global kana konstanta. Ogé, nalika kompilasi, PartialExecuter dianggo, anu, dumasar kana analisa parameter fungsi, ngaleungitkeun kode anu dijamin henteu dianggo nalika palaksanaan.

Surak ogé bisa ngahasilkeun kode JavaScript pikeun dinamis ngamanipulasi memori katutupan ku kolektor sampah. Dina sababaraha hal, tinimbang emulating spasi alamat tradisional ngagunakeun arrays diketik, nyadiakeun Cheerp pemetaan langsung objék C ++ ka objék JavaScript, nu ngurangan konsumsi memori sabab collector sampah JavaScript boga kamampuhan pikeun miceun objék henteu kapake. Pikeun ngaronjatkeun kinerja, dihasilkeun kode panganteur WebAssembly ngagunakeun ekstensi SIMD nu ngidinan parallelization operasi data.

Cheerp tiasa dianggo salaku platform pikeun nyiptakeun aplikasi wéb klien / server terpadu dina C++. Dina prakték ayeuna, geus ilahar pikeun ngamekarkeun tungtung hareup dina-browser misah, ditulis dina JavaScript, sarta tungtung deui misah, ditulis dina PHP, Python, Ruby, atawa JavaScript / Node.js. Cheerp nyayogikeun alat pikeun nyiptakeun aplikasi wéb lengkep dina C ++, dimana backend sareng frontend dirojong dina dasar kode tunggal. Salila prosés kompilasi, sisi server disusun kana kode asli, sareng antarbeungeutna dirobih janten perwakilan JavaScript. Debugging sadaya komponén proyék, kaasup nu dirobah jadi JavaScript, dilumangsungkeun maké téks sumber dina C ++ ngagunakeun téhnologi Source Map (lamun aya kasalahan, anjeun tiasa ningali bagian tina kode C ++; ngarojong setelan breakpoints dina kode C ++ sarta baris-demi). -line step-by-step palaksanaan kode C ++).

sumber: opennet.ru

Tambahkeun komentar