ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ 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
