ΠΠ±ΡΠ°Π²Π΅Π½ΠΎ Π΅ ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ Emscripten 3.0, ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΡΠΈ Π²ΠΈ Π΄Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ΄ Π²ΠΎ C/C++ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ°Π·ΠΈΡΠΈ Π·Π° ΠΊΠΎΠΈ ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ ΠΏΡΠ΅Π΄Π½ΠΈΡΠ΅ Π΄Π΅Π»ΠΎΠ²ΠΈ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° LLVM Π²ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΠ·Π°Π»Π΅Π½ ΡΡΠ΅Π΄Π΅Π½ ΠΊΠΎΠ΄ Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ WebAssembly, Π·Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ° ΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ JavaScript, ΠΊΠΎΠΈ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ Π²ΠΎ Π²Π΅Π±-ΠΏΡΠ΅Π»ΠΈΡΡΡΠ²Π°Ρ ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π³ΠΎ Π²ΠΎ Node.js ΠΈΠ»ΠΈ ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΠ½ΠΈ ΠΌΡΠ»ΡΠΈΠΏΠ»Π°ΡΡΠΎΡΠΌΡΠΊΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° wasm runtime. ΠΡΠΎΠ΅ΠΊΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄ Π΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° MIT. ΠΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ»ΡΡΡΠ²Π°ΡΠ° ΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ LLVM, Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Binaryen ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° WebAssembly.
ΠΠ»Π°Π²Π½Π°ΡΠ° ΡΠ΅Π» Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Emscripten Π΅ Π΄Π° ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ Π°Π»Π°ΡΠΊΠ° ΠΊΠΎΡΠ° Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΠΊΠΎΠ΄ Π½Π° ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ Π±Π΅Π· ΠΎΠ³Π»Π΅Π΄ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈΠΎΡ ΡΠ°Π·ΠΈΠΊ Π½Π° ΠΊΠΎΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΊΠΎΠ΄ΠΎΡ. ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΏΠΎΠ²ΠΈΡΠΈ Π΄ΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ C ΠΈ C++ (libc, libcxx), Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈ Π½Π° C++, ΠΌΡΠ»ΡΠΈΠ½ΠΈΡΠΊΠΈ Π·Π°ΡΠ½ΠΎΠ²Π°Π½ΠΈ Π½Π° pthreads, POSIX API ΠΈ ΠΌΠ½ΠΎΠ³Ρ ΠΌΡΠ»ΡΠΈΠΌΠ΅Π΄ΠΈΡΠ°Π»Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. API Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ° ΡΠΎ Web API ΠΈ JavaScript ΠΊΠΎΠ΄ ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΠΎΠ΄Π΄Π΅Π»Π½ΠΎ.
Emscripten ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° Π΅ΠΌΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΈΠ·Π»Π΅Π·ΠΎΡ ΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° SDL2 ΠΏΡΠ΅ΠΊΡ Canvas, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° OpenGL ΠΈ EGL ΠΏΡΠ΅ΠΊΡ WebGL, ΡΡΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΡΠ΅ Π³ΡΠ°ΡΠΈΡΠΊΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΠΈΠ³ΡΠΈ Π²ΠΎ WebAssembly (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ° ΠΏΡΠΈΡΡΠ°Π½ΠΈΡΡΠ΅ ΠΎΠ΄ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ Π°Π»Π°ΡΠΊΠΈ Qt ΠΈ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° Unreal Engine 4 ΠΈ Unit ΠΈΠ³ΡΠ° ΠΌΠΎΡΠΎΡΠΈ, ΡΠΈΠ·ΠΈΡΠΊΠΈ Bullet engine). ΠΠΎΠΊΡΠ°Ρ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ΅ΡΠΎ ΠΊΠΎΠ΄ Π²ΠΎ 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 isVectorType, isStructuralTypeStructuralTypeStructuralType, get ctionDef, isPossiblyFunctionType, isFunctionType, getReturnType, splitTo kenList, _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