انتشار کامپایلر Emscripten 3.0 منتشر شده است که به شما امکان می دهد کد را به زبان C/C++ و دیگر زبان هایی که برای آن ها فرانتندهای مبتنی بر LLVM در دسترس هستند در کد متوسط سطح پایین جهانی WebAssembly، برای ادغام بعدی با پروژه های جاوا اسکریپت، کامپایل کنید. در یک مرورگر وب، و در Node.js یا ایجاد برنامههای چند پلتفرمی مستقل که با استفاده از wam runtime اجرا میشوند، استفاده کنید. کد پروژه تحت مجوز MIT توزیع شده است. کامپایلر از پیشرفت های پروژه LLVM استفاده می کند و کتابخانه Binaryen برای تولید و بهینه سازی WebAssembly استفاده می شود.
هدف اصلی پروژه Emscripten ایجاد ابزاری است که به شما امکان می دهد بدون توجه به زبان برنامه نویسی که کد در آن نوشته شده است، کد را در وب اجرا کنید. برنامه های کامپایل شده می توانند از تماس با کتابخانه های استاندارد C و C++ (libc، libcxx)، پسوندهای C++، چند رشته ای مبتنی بر pthreads، API های POSIX و بسیاری از کتابخانه های چندرسانه ای استفاده کنند. APIهای یکپارچه سازی با Web API و کد جاوا اسکریپت به طور جداگانه ارائه می شوند.
Emscripten از پخش خروجی کتابخانه SDL2 از طریق Canvas پشتیبانی می کند و همچنین از OpenGL و EGL از طریق WebGL پشتیبانی می کند که به شما امکان می دهد برنامه های گرافیکی و بازی ها را به WebAssembly تبدیل کنید (به عنوان مثال، یک پورت از جعبه ابزار Qt وجود دارد و از Unreal Engine پشتیبانی می کند. موتورهای بازی 4 و Unit، موتور Bullet فیزیکی). علاوه بر کامپایل کد در C/C++، پروژههایی بهطور جداگانه در حال توسعه هستند تا مفسرها و ماشینهای مجازی بتوانند در مرورگرهای زبانهای Lua، C#، Python، Ruby و Perl اجرا شوند. همچنین میتوان فرانتاندهای غیر Clang را برای LLVM اعمال کرد که برای زبانهایی مانند Swift، Rust، D و Fortran در دسترس است.
تغییرات عمده در Emscripten 3.0:
- کتابخانه musl C مورد استفاده در emscripten به نسخه 1.2.2 به روز شده است (نسخه 2 در شاخه Emscripten 1.1.15.x استفاده شده است).
- بخشی از توابع که عمدتاً در پروژه استفاده میشدند از کتابخانه parseTools.js حذف شدهاند: removePointing، pointingLevels، removeAllPointing، isVoidType، isStructPointerType، isArrayType، isStructType، isVectorType، isStructuralType، isStructuralTypeartspeStructuralType، getStructuralTypeartspeStructuralType FunctionDef، isPossiblyFunctionType، isFunctionType، getReturnType، splitTokenList، _IntToHex، IEEEUnHex، Compiletime.isPointerType، Compiletime.isStructType، Compiletime.INT_TYPES، isType.
- در قالبهای shell.html و shell_minimal.html، خروجی پیامهای خطایی که در حین کار emscripten رخ میدهد و توسط برنامه از طریق stderr خروجی میشود، بهطور پیشفرض برای استفاده از console.warn به جای console.error سوئیچ میشود.
- قابلیت تعیین رمزگذاری متن خاص مورد استفاده در نام فایل ها را اضافه کرد. رمزگذاری را می توان در قالب یک پسوند هنگام ارسال نام فایل مشخص کرد، به عنوان مثال، "a.rsp.utf-8" یا "a.rsp.cp1251").
منبع: opennet.ru