ДоступСн Emscripten 3.0, компилятор ΠΈΠ· C/C++ Π² WebAssembly

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ выпуск компилятора 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