ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π²ΡΠΏΡΡΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Emscripten 6.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 ΡΠ΅ΡΠ΅Π· API WebGL, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ Π² WebAssembly Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ³ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΠΎΡΡ ΡΡΠ»ΠΊΠΈΡΠ° Qt, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΈΠ³ΡΠΎΠ²ΡΠ΅ Π΄Π²ΠΈΠΆΠΊΠΈ Unreal Engine ΠΈ Unit, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π²ΠΈΠΆΠΎΠΊ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Bullet).
ΠΠΎΠΌΠΈΠΌΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π½Π° C/C++ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ Π΄Π»Ρ ΡΠ·ΡΠΊΠΎΠ² Lua, C#, Python, Ruby ΠΈ Perl. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ½ΡΡΠ½Π΄ΠΎΠ² ΠΊ LLVM, ΠΎΡΠ»ΠΈΡΠ½ΡΡ ΠΎΡ Clang, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ½ΡΡΠ½Π΄ΠΎΠ² Π΄Π»Ρ ΡΠ·ΡΠΊΠΎΠ², ΠΊΠ°ΠΊ Swift, Rust, D ΠΈ Fortran.
ΠΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° Π²Π΅ΡΡΠΈΠΈ 6.0 ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ Π²Π½Π΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½Π°ΡΡΡΠ°ΡΡΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Emscripten 6.0:
- Π£Π²Π΅Π»ΠΈΡΠ΅Π½Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΡ Π΄Π²ΠΈΠΆΠΊΠΎΠ², Π² ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄: Chrome 74 -> 85, Firefox 68 -> 79 ΠΈ Safari 12.2 -> 14.1. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ WebAssembly Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈ ΡΠΊΡΠΏΠΎΡΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΠΈ ΡΠΈΡΠ΅Π» Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ Π·Π½Π°ΠΊΠ° ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
- ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Fetch ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ 8 ΠΠ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π² ΠΏΠ°ΠΌΡΡΡ ΡΡΠ°Π·Ρ Π²ΡΠ΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ².
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ Π²Π΅ΡΡΠΈΠΈ musl libc 1.2.6, libpng 1.6.58 ΠΈ google-closure-compiler 20260429.0.0.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ»Π°Π³ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Β«-m64Β», ΠΊΠΎΡΠΎΡΡΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΡΠ»Π°Π³Π°ΠΌ
Β«-sMEMORY64Β» ΠΈ Β«βtarget=wasm64Β». - ΠΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ° PThread ΡΠ΄Π°Π»Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅ PThread.runningWorkers.
- Π€ΡΠ½ΠΊΡΠΈΡ pause() ΡΠ΅ΠΏΠ΅ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0 Π²ΠΌΠ΅ΡΡΠΎ EINTR.
- ΠΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Windows Π²ΠΌΠ΅ΡΡΠΎ bat-ΡΠ°ΠΉΠ»Π° (emcc.bat) Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Emscripten ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ exe-ΡΠ°ΠΉΠ» (emcc.exe).
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
