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

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

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° Ρ†Π΅Π» Π½Π° Emscripten Π΅ Π΄Π° създадС инструмСнт, ΠΊΠΎΠΉΡ‚ΠΎ позволява ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄ Π² Web нСзависимо ΠΎΡ‚ Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π΅ написан Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄. Π’ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ прилоТСния ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ повиквания Π½Π° стандартнитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ 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_LEGACY_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, ΠΏΡ€ΠΈ която Π·Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° C-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ memcpy ΠΈ memset сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ WebAssembly инструкциитС memory.copy ΠΈ memory.fill.
  • Π’ функцията PATH.basename() Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° нормализацията Π½Π° ΠΏΡŠΡ‚ΠΈΡ‰Π° (PATH.normalize()), Ρ‚.Π΅. ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° 'PATH.basename("a/." )' сСга Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ '.' вмСсто 'a', Π° 'PATH.basename("a/b/.." )' Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ '..' вмСсто 'a'.
  • ΠŸΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° опцията '-sMODULARIZE', factory Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ ΠΈ Π²Ρ€ΡŠΡ‰Π°Ρ‚ СкзСмпляри Π½Π° WebAssembly ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π·Π° JavaScript, сСга са ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈ с 'async' ΠΏΡ€ΠΈ компилация Π² Ρ€Π΅ΠΆΠΈΠΌ WASM_ASYNC_COMPILATION, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° JavaScript Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ опцията '-lfoo.js'. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ опцията 'β€”js-library', Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° сС изпълнява във всички ΠΏΡŠΡ‚ΠΈΡ‰Π°, посочСни Ρ‡Ρ€Π΅Π· опцията '-L'.
  • ΠŸΡ€ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΊΠ° (-O0 ΠΈΠ»ΠΈ -sASSERTIONS) ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ ΠΎΡ‚Π»Π°Π΄ΡŠΡ‡Π½ΠΈΡΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° функцията malloc с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ с assert, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Ρ‚ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° функцията free().

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

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