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