ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π²ΡΠΏΡΡΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Emscripten 3.0, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π½Π° C/C++ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΈΠΌΠ΅ΡΡΡΡ ΡΡΠΎΠ½ΡΡΠ½Π΄Ρ Π½Π° Π±Π°Π·Π΅ LLVM, Π² ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΠΊΠΎΠ΄ WebAssembly, Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ JavaScript-ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ, Π·Π°ΠΏΡΡΠΊΠ° Π² web-Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Node.js ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΠΎΡΠΎΠ±Π»Π΅Π½Π½ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ wasm runtime. ΠΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT. Π ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½Π°ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° LLVM, Π° Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ WebAssembly ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Binaryen.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅Π»ΡΡ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Emscripten ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π² Web ΠΊΠΎΠ΄ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½. Π ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ C ΠΈ Π‘++ (libc, libcxx), ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ C++, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π½Π° Π±Π°Π·Π΅ pthreads, API POSIX ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΌΡΠ»ΡΡΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ API Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Web API ΠΈ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° JavaScript.
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:
- ΠΠ°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π½Π°Ρ Π² emscripten Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° musl ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ 1.2.2 (Π² Π²Π΅ΡΠΊΠ΅ Emscripten 2.x ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ Π²Π΅ΡΡΠΈΡ 1.1.15).
- ΠΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ parseTools.js ΡΠ΄Π°Π»Π΅Π½Π° ΠΏΠΎΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°: removePointing, pointingLevels, removeAllPointing, isVoidType, isStructPointerType, isArrayType, isStructType, isVectorType, isStructuralType getStructuralTypeParts, getStructuralTypePartBits, isFunctionDef, 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