ΠΏΡΡΠΊ Π½Π° JavaScript Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ , ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ ΠΊΡΠΌ Π²Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π² ΠΊΠΎΠ΄ΠΎΠ²Π°ΡΠ° Π±Π°Π·Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π½Π° C/C++. ΠΠ²ΠΈΠ³Π°ΡΠ΅Π»ΡΡ ΡΠ΅ ΠΎΡΠ»ΠΈΡΠ°Π²Π° Ρ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ΅Π½ ΡΠ°Π·ΠΌΠ΅Ρ, Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡ ΠΈ Π½ΠΈΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡ Π½Π° ΡΠ΅ΡΡΡΡΠΈ. ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C ΠΈ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π· MIT.
ΠΊΠΎΠ΄ΡΡ Π½Π° Duktape Π·Π°Π΅ΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ 160 kB ΠΈ ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ° ΡΠ°ΠΌΠΎ 70kB RAM, Π° Π² ΡΠ΅ΠΆΠΈΠΌ Ρ Π½ΠΈΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π΅ 27kB RAM. ΠΠ° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π΅ Π½Π° Duktape Π² ΠΊΠΎΠ΄ Π½Π° C/C++ Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ duktape.c ΠΈ duktape.h Π² ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° JavaScript ΠΎΡ ΠΊΠΎΠ΄Π° Π½Π° C/C++ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΠ° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ Π½Π° Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΠΎΡ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ±ΠΎΡΠ½ΠΈΠΊ Π·Π° Π±ΠΎΠΊΠ»ΡΠΊ Ρ ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡ, ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π½Π° Π±ΡΠΎΠ΅Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ (Mark and Sweep). ΠΠ²ΠΈΠ³Π°ΡΠ΅Π»ΡΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° JavaScript Π² Π±ΡΠ°ΡΠ·ΡΡΠ° .
ΠΎΡΠΈΠ³ΡΡΡΠ²Π°ΡΠ° ΠΏΡΠ»Π½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Ecmascript 5.1 ΠΈ ΡΠ°ΡΡΠΈΡΠ½Π° Ecmascript 2015 ΠΈ 2016 (E6 ΠΈ E7), Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠ° Proxy Π·Π° Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΡΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΌΠ°ΡΠΈΠ²ΠΈ, ArrayBuffer, Node.js Buffer, Encoding API, ΠΎΠ±Π΅ΠΊΡ Symbol ΠΈ Π΄Ρ. ΠΠΊΠ»ΡΡΠ²Π° Π²Π³ΡΠ°Π΄Π΅Π½ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, Π΄Π²ΠΈΠ³Π°ΡΠ΅Π» Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Unicode. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΊΠΎΡΡΡΠΈΠ½ΠΈ, Π²Π³ΡΠ°Π΄Π΅Π½ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π·Π° Π°ΡΠ΄ΠΈΡ, ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° CommonJS, ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π±Π°ΠΉΡ ΠΊΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ ΠΈ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π Π½ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° duk_to_stacktrace() ΠΈ duk_safe_to_stacktrace() Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ»Π΅Π΄ΠΈ ΠΎΡ ΡΡΠ΅ΠΊΠ°, duk_push_bare_array() Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΈ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ Π½Π° ΠΌΠ°ΡΠΈΠ²ΠΈ. ΠΡΠ±Π»ΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π²Π΅Π΄Π΅Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Ρ duk_require_constructable() ΠΈ duk_require_constructor_call(). ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° Π΅ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΠ° ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ES2017. ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π° Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΌΠ°ΡΠΈΠ²ΠΈ ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ. Π CLI ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° duk Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΎΠΏΡΠΈΡΡΠ° Β«βno-auto-completeΒ» Π·Π° ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΠΎ Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π²Ρ ΠΎΠ΄Π°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
