ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° JavaScript Π΄Π²ΠΈΠ³Π°ΡΠ΅Π» , ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ ΠΊΡΠΌ Π²Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π² ΠΊΠΎΠ΄ΠΎΠ²Π°ΡΠ° Π±Π°Π·Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π½Π° Π΅Π·ΠΈΠΊ C/C++. ΠΠ²ΠΈΠ³Π°ΡΠ΅Π»ΡΡ ΡΠ΅ ΠΎΡΠ»ΠΈΡΠ°Π²Π° Ρ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΈ, Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡ ΠΈ Π½ΠΈΡΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ. ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° Π΄Π²ΠΈΠΆΠΊΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π΅Π·ΠΈΠΊ C ΠΈ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π· MIT.
ΠΠΎΠ΄ΡΡ Π½Π° Duktape Π·Π°Π΅ΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ 160 kB ΠΈ ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ° Π΅Π΄Π²Π° 70 kB RAM, Π° Π² ΡΠ΅ΠΆΠΈΠΌ Ρ Π½ΠΈΡΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ 27 kB 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
