Π”ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π΅ Emscripten 4.0, ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ ΠΎΡ‚ C/C++ Π² WebAssembly

ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° инструмСнтария Emscripten 4.0, ΠΊΠΎΠΉΡ‚ΠΎ позволява ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄ Π½Π° C/C++ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π΅Π·ΠΈΡ†ΠΈ, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ΠΎΠ²Π΅ Π½Π° Π±Π°Π·Π° LLVM, Π² унивСрсалСн Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄ WebAssembly. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° интСграция с JavaScript ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, стартиранС Π² ΡƒΠ΅Π± Π±Ρ€Π°ΡƒΠ·ΡŠΡ€, Ρ€Π°Π±ΠΎΡ‚Π° Π² Node.js ΠΈΠ»ΠΈ създаванС Π½Π° самостоятСлни ΠΌΡƒΠ»Ρ‚ΠΈΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½ΠΈ прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° wasm runtime. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° сС разпространява ΠΏΠΎΠ΄ MIT Π»ΠΈΡ†Π΅Π½Π·. Π’ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° са ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° LLVM, Π° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° WebAssembly ΠΈ оптимизация Π΅ Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Binaryen.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° Ρ†Π΅Π» Π½Π° Emscripten Π΅ Π΄Π° създадС инструмСнт, ΠΊΠΎΠΉΡ‚ΠΎ позволява ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄ Π² ΡƒΠ΅Π± нСзависимо ΠΎΡ‚ Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π΅ написан. Π’ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ прилоТСния ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ стандартни Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΈ извиквания Π½Π° C ΠΈ C++ (libc, libcxx), Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π° C++, многопоточност Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° pthreads, API POSIX ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΡƒΠ»Ρ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠžΡ‚Π΄Π΅Π»Π½ΠΎ сС прСдоставят API Π·Π° интСграция с Web API ΠΈ ΠΊΠΎΠ΄ Π½Π° JavaScript.

Emscripten ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° транслация Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° SDL2 ΠΏΡ€Π΅Π· Canvas, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° OpenGL ΠΈ EGL Ρ‡Ρ€Π΅Π· API WebGL, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π³Ρ€Π°Ρ„ΠΈΡ‡Π½ΠΈ прилоТСния ΠΈ ΠΈΠ³Ρ€ΠΈ Π² WebAssembly (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ, Π½Π°Π»ΠΈΡ‡Π΅Π½ Π΅ ΠΏΠΎΡ€Ρ‚ Π½Π° Ρ‚ΡƒΠ»ΠΊΠΈΡ‚Π° Qt, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ сС ΠΈΠ³Ρ€ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π½Π΄ΠΆΠΈΠ½ΠΈ Unreal Engine ΠΈ Unity, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π΅Π½Π΄ΠΆΠΈΠ½ΡŠΡ‚ Π·Π° симулация Π½Π° Ρ„ΠΈΠ·ΠΈΡ‡Π½ΠΈ процСси Bullet).

Π’ допълнСниС към компилацията Π½Π° ΠΊΠΎΠ΄ Π½Π° C/C++, ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ сС Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π·Π° стартиранС Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΈ Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ΠΈ Π·Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини Π΅Π·ΠΈΡ†ΠΈΡ‚Π΅ Lua, C#, Python, Ruby ΠΈ Perl. ОсвСн Ρ‚ΠΎΠ²Π°, Π΅ възмоТно ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚ Π΅Π½Π΄ΠΎΠ²Π΅ Π·Π° LLVM, Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΡ‚ Clang, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Ρ€ΠΎΠ½Ρ‚ Π΅Π½Π΄ΠΎΠ²Π΅ Π·Π° Π΅Π·ΠΈΡ†ΠΈ ΠΊΠ°Ρ‚ΠΎ Swift, Rust, D ΠΈ Fortran.

ΠŸΡ€ΠΈΡΠ²ΠΎΡΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° вСрсия 4.0 Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с измСнСния, Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°Ρ‰ΠΈ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π° Π½Π° Π½ΠΈΠ²ΠΎ ABI (ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Emscripten 4.0 Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅, създадСни с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈ вСрсии Π½Π° Emscripten). ΠžΡΠ½ΠΎΠ²Π½ΠΈΡ‚Π΅ измСнСния Π² Emscripten 4.0:

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ опция Β«-sWASM_LEAGCY_EXCEPTIONSΒ» Π·Π° ΠΈΠ·Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ старитС ΠΈ Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° старият ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ всички Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ΠΈ са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π»ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° WebAssembly Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.
  • ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅ compiler-rt, libcxx, libcxxabi ΠΈ libunwind са Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π΄ΠΎ ΠΊΠ»ΠΎΠ½Π° LLVM 19.
  • ΠœΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°Ρ‚Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π° вСрсия Π½Π° Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° Safari (настройката MIN_SAFARI_VERSION) Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π° ΠΎΡ‚ 14.1 Π½Π° 15.0, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΄Π° сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚ няколко Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π½Π° WebAssembly:
    • Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²ΠΈ инструкции Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏ float Π² int (nontrapping-fptoint), ΠΊΠΎΠΈΡ‚ΠΎ вмСсто Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π»ΠΈΠ²Π°Π½Π΅ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°, Π²Ρ€ΡŠΡ‰Π°Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎΡ‚ΠΎ ΠΈΠ»ΠΈ максималното възмоТно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° SIMD).
    • Π’ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π΅ опцията WASM_BIGINT, ΠΏΡ€ΠΈ която Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° 64-Π±ΠΈΡ‚ΠΎΠ²ΠΈ Ρ†Π΅Π»ΠΈ числа ΠΌΠ΅ΠΆΠ΄Ρƒ WebAssembly ΠΈ JavaScript ΠΊΠΎΠ΄ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚ΠΈΠΏΡŠΡ‚ BigInt.
    • Π’ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π΅ опцията BULK_MEMORY, ΠΏΡ€ΠΈ която Π·Π° рСализация Π½Π° Π‘ΠΈ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ memcpy ΠΈ memset сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ WebAssembly инструкции memory.copy ΠΈ memory.fill.
  • Π’ΡŠΠ² функцията PATH.basename() Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° нормализацията Π½Π° ΠΏΡŠΡ‚ΠΈΡ‰Π°Ρ‚Π° (PATH.normalize()), Ρ‚.Π΅. ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° β€˜PATH.basename(Β«a/.Β»)’ сСга Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ Β«.Β» вмСсто Β«aΒ», Π° β€˜PATH.basename(Β«a/b/..Β»)’ Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ Β«..Β» вмСсто Β«aΒ».
  • ΠŸΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° опцията Β«-sMODULARIZEΒ» Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ ΠΈ Π²Ρ€ΡŠΡ‰Π°Ρ‚ инстанции Π½Π° WebAssembly ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π·Π° JavaScript, Π²Π΅Ρ‡Π΅ са ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈ с ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° Β«asyncΒ» ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌ WASM_ASYNC_COMPILATION, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° JavaScript-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ опцията Β«-lfoo.jsΒ». Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ опцията Β«β€”js-libraryΒ», Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° във всички ΠΏΡŠΡ‚ΠΈΡ‰Π°, ΡƒΠΊΠ°Π·Π°Π½ΠΈ Ρ‡Ρ€Π΅Π· опцията Β«-LΒ».
  • ΠŸΡ€ΠΈ компонация Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΊΠ° (-O0 ΠΈΠ»ΠΈ -sASSERTIONS) ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ ΠΎΡ‚Π»Π°Π΄ΡŠΡ‡Π½ΠΈΡΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° функцията malloc с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Ρ‚ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° функцията free().

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster