ΠΎΠ±ΡΠ°Π²Π΅Π½ΠΎ ΠΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΌΠΎΡΠΎΡΠΎΡ 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 Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Duktape API Π΄Π° ΠΏΠΎΠ²ΠΈΠΊΠ°ΡΠ΅ JavaScript ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ΄ C/C++ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΠ° ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡΠ²Π°ΡΠ΅ Π½Π° Π½Π΅ΠΈΡΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΈ ΠΎΠ΄ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°, ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠΎΠ±ΠΈΡΠ°Ρ Π½Π° ΡΡΠ±ΡΠ΅ ΡΠΎ ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡ, ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠ° Π°Π»Π³ΠΎΡΠΈΡΠ°ΠΌ Π±ΡΠΎΠ΅ΡΠ΅ Π²ΡΡΠΊΠΈ ΡΠΎ Π°Π»Π³ΠΎΡΠΈΡΠ°ΠΌ Π·Π° ΠΎΠ±Π΅Π»Π΅ΠΆΡΠ²Π°ΡΠ΅ (Mark and Sweep). ΠΠΎΡΠΎΡΠΎΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° JavaScript Π²ΠΎ ΠΏΡΠ΅Π»ΠΈΡΡΡΠ²Π°ΡΠΎΡ NetSurf.
ΠΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΡΠ΅Π»ΠΎΡΠ½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Π½Π° Ecmascript 5.1 ΠΈ Π΄Π΅Π»ΡΠΌΠ½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Ecmascript 2015 ΠΈ 2016 (E6 ΠΈ E7), Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΏΡΠΎΠΊΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π° Π²ΠΈΡΡΡΠ΅Π»ΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° ΡΠ²ΠΎΡΡΡΠ²Π°, ΠΎΡΡΡΠΊΡΠ²Π°Π½ΠΈ Π½ΠΈΠ·ΠΈ, ArrayBuffer, Node.js ΡΠ°ΠΌΠΏΠΎΠ½, API Π·Π° ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅, ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π° ΡΠΈΠΌΠ±ΠΎΠ» ΠΈΡΠ½. ΠΠΊΠ»ΡΡΡΠ²Π° Π²Π³ΡΠ°Π΄Π΅Π½ Π΄Π΅Π±Π°Π³Π΅Ρ, ΠΌΠΎΡΠΎΡ ΡΠΎ ΡΠ΅Π³ΡΠ»Π°ΡΠ΅Π½ ΠΈΠ·ΡΠ°Π· ΠΈ ΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π½Π° Π£Π½ΠΈΠΊΠΎΠ΄. ΠΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΡΠ΅ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΡΡΠΈΠ½ΡΠΊΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ°, Π²Π³ΡΠ°Π΄Π΅Π½Π° ΡΠ°ΠΌΠΊΠ° Π·Π° Π»ΠΎΠ³ΠΈΡΠ°ΡΠ΅, ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·Π°ΠΌ Π·Π° Π²ΡΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° CommonJS ΠΈ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° Π±Π°ΡΡΠ΅ΠΊΠΎΠ΄ ΠΊΠΎΡ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° Π·Π°ΡΡΠ²ΡΠ²Π°ΡΠ΅ ΠΈ Π²ΡΠΈΡΡΠ²Π°ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΎ Π½ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΈ Π½ΠΎΠ²ΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ Π΄ΠΎ duk_to_stacktrace() ΠΈ duk_safe_to_stacktrace() Π·Π° Π΄Π° ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠ°Ρ ΡΡΠ°Π³ΠΈ ΠΎΠ΄ ΡΡΠ΅ΠΊ, duk_push_bare_array() Π·Π° Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π½Π΅Π·Π°Π²ΠΈΡΠ½ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡΠΈ ΠΎΠ΄ Π½ΠΈΠ·Π°. Π€ΡΠ½ΠΊΡΠΈΠΈΡΠ΅ duk_require_constructable() ΠΈ duk_require_constructor_call() ΡΠ΅ ΠΎΠ±ΡΠ°Π²Π΅Π½ΠΈ. ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ES2017. Π Π°Π±ΠΎΡΠ°ΡΠ° ΡΠΎ Π½ΠΈΠ·ΠΈ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π°. ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΎΠΏΡΠΈΡΠ°ΡΠ° β--Π½Π΅-Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠΈΡΠ°ΡΠ΅β Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΎΡ duk CLI Π·Π° Π΄Π° ΡΠ΅ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π·Π°Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π²Π½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ.
ΠΠ·Π²ΠΎΡ: opennet.ru