کامپایلر Cheerp 3.0 معرفی شده است که به شما امکان می دهد هر کد C/C++ را در WebAssembly یا JavaScript کامپایل کنید. شعبه جدید به دلیل انتقال کامپایلر و کتابخانه های همراه به استفاده از مجوزهای مجاز Apache 2.0 و LLVM، به جای سیاست مجوز محدود اعمال شده قبلی، ارائه گزینه مجوز GPLv2 برای پروژه های غیر تجاری و مجوز اختصاصی برای پروژه های تجاری قابل توجه است. کد کامپایلر بر اساس پیشرفت های LLVM و Clang است و شامل بهینه سازی های اضافی برای بهبود عملکرد و کاهش اندازه نتیجه کامپایل شده است.
Cheerp می تواند هم برای پورت کردن کتابخانه ها و برنامه های C/C++ موجود برای اجرا در مرورگر و هم برای ایجاد برنامه های کاربردی وب با کارایی بالا و اجزای WebAssembly از ابتدا استفاده شود. این پروژه به شما امکان می دهد کدهای C / C ++ و جاوا اسکریپت را در یک برنامه وب با قابلیت دسترسی از کد جاوا اسکریپت به توابعی که در ابتدا در C / C ++ توسعه یافته بودند و از کد C / C ++ به اشیاء جاوا اسکریپت، جاوا اسکریپت، ترکیب کنید. کتابخانه ها، Web API و تمام ویژگی های DOM. مجاز به ایجاد مجموعه های ترکیبی است که برخی از کدها در جاوا اسکریپت و برخی در WebAssembly کامپایل شده است. از پروژه های ساختمانی که از کتابخانه های استاندارد libc و libc++ استفاده می کنند، پشتیبانی می کند.
در مقایسه با کامپایلر Emscripten، Cheerp کد میانی WebAssembly بهینهسازی و فشردهتری تولید میکند (به طور متوسط، اندازه فایلهای بهدستآمده 7 درصد کوچکتر است). از نظر مفهومی، تفاوت ها به این واقعیت خلاصه می شود که Emscripten به عنوان قالب شی WebAssembly استفاده می شود و اتصال و بهینه سازی را در مرحله پس از پردازش WebAssembly (wasm-opt) انجام می دهد. Cheerp از بایت کد LLVM به عنوان یک نمایش میانی برای کتابخانه ها و فایل های شی استفاده می کند، که امکان بهینه سازی های گسترده تری در سطح پروژه را فراهم می کند که از ابرداده در سطح LLVM بدون نیاز به پس پردازش استفاده می کند.
علاوه بر این، Cheerp از بهینه ساز PreExecuter استفاده می کند که اجرای کد پیشگیرانه را در زمان کامپایل فراهم می کند، به عنوان مثال، برای تبدیل سازنده های مورد استفاده برای مقداردهی اولیه اشیاء سراسری به ثابت. همچنین هنگام کامپایل از PartialExecuter استفاده می شود که بر اساس تجزیه و تحلیل پارامترهای تابع، کدهایی را که تضمین می شود در حین اجرا استفاده نشوند حذف می کند.
Cheer همچنین میتواند کد جاوا اسکریپت را برای کار با حافظهای که توسط زباله جمعکننده پوشانده شده است تولید کند. به طور خاص، Cheerp به جای شبیهسازی فضای آدرس سنتی با آرایههای تایپشده، یک نگاشت مستقیم از اشیاء C++ به اشیاء جاوا اسکریپت ارائه میکند که مصرف حافظه را کاهش میدهد، زیرا جمعآوری زباله جاوا اسکریپت توانایی حذف اشیاء بلااستفاده را دارد. برای بهبود عملکرد، کد میانی WebAssembly تولید شده از پسوندهای SIMD برای سازماندهی موازی سازی عملیات داده استفاده می کند.
Cheerp می تواند به عنوان یک پلتفرم برای ساخت برنامه های وب یکپارچه مشتری/سرور در C++ استفاده شود. در رویه کنونی، ایجاد یک فرانتاند جداگانه مبتنی بر مرورگر که با جاوا اسکریپت نوشته شده است و یک بکاند جداگانه که با PHP، Python، Ruby یا JavaScript/Node.js نوشته شده است، رایج است. Cheerp ابزاری را برای ساخت برنامه های وب کامل C++ فراهم می کند که از backend و frontend در یک پایگاه کد واحد پشتیبانی می کنند. در طول فرآیند کامپایل، سمت سرور به کد بومی کامپایل می شود و رابط به یک نمایش جاوا اسکریپت تبدیل می شود. اشکال زدایی تمام اجزای پروژه، از جمله آنهایی که به جاوا اسکریپت تبدیل شده اند، با استفاده از متون منبع C++ با استفاده از فناوری Source Map انجام می شود (در صورت بروز خطا، می توانید بخشی از کد C++ را مشاهده کنید، نقاط شکست را در کد C++ و مرحله خط به خط تنظیم کنید. - اجرای گام به گام کد ++C پشتیبانی می شود).
منبع: opennet.ru