问题标签 [duktape]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
92 浏览

c - Duktape 的 SIGINT 处理

有人知道我在使用Duktape时如何处理 SIGINT(中断信号)吗?当用户使用 CTRL+C 中断时,我想抛出一个可以在 javascript 中捕获的异常。

我有一个捕捉信号的功能,但我目前的方法只是调用

因为我的信号处理程序不是很可靠。我猜当时引擎状态不好,所以不能继续。

有人有想法么?

我想过在某处设置一个标志,但不知道如何干净地做到这一点。

谢谢

马特

0 投票
3 回答
560 浏览

duktape - Any way to get proper C++ stack unwinding when duktape throws an error?

Is there currently any way to get duktape to properly unwind the C++ stack (calling all appropriate destructors, etc.) when an error is encountered in duktape?

I know that Lua (for example) has the capability to do this by switching from the use of longjmp to C++ exceptions when Lua is compiled by a C++ compiler, but at first glance I'm not seeing anything similar in duktape, and I'm definitely winding up with C++ destructors not getting called. If that capability doesn't exist yet in duktape, are there any plans for it? (If the longjmp destinations are set and used in a strictly LIFO fashion, I'm guessing it'd be doable. If not, then maybe not so doable...)

I've been playing with duktape a bit and so far I've been impressed...I'm mostly done with a C++ template-based metaprogramming library that lets you automatically create duktape bindings to C++ functions. This stack-unwinding thing may be a complete deal-breaker, though...don't think I can use duktape if I can't trust my C++ destructors to get called.

EDIT: actually, on further reflection, I can probably make things work without the stack unwinding, although of course everything will be significantly more complex and error-prone. It'd still be a great feature to have.

0 投票
1 回答
701 浏览

duktape - duktape:“类型错误:不可调用”

TypeError:不可调用 duk_js_call.c:682 位输入:1 全局输入:1 防止产量

0 投票
0 回答
790 浏览

duktape - 如何用 Duktape 包装 C++ 类

我正在玩Duktape作为 v8 的替代品。浏览文档并设法从Javascript调用C 函数,反之亦然。但是,当您需要以类似于 v8 的方式从 JavaScript访问C++类时,我不清楚如何继续。有人可以整理一个非常简单的例子来说明这一点吗?

谢谢!

0 投票
2 回答
404 浏览

duktape - 减少大量 Duktape 上下文的内存选项

我正在尝试配置一个轻量级的全功能 JavaScript 引擎,以便我可以同时拥有数万个独立的上下文。每个上下文所做的事情很少(主要是事件处理、轻字符串操作、自定义计时器等),并且不需要太多堆存储,但需要独立于其他上下文。使用 Duktape,如果我在 x64 中分配 20,000 个上下文,在进行大量处理之前我会使用超过 1.6GB 的内存,或者每个大约 80KB。作为另一个数据点,如果我使用 SpiderMonkey 1.7.0,20,000 运行我大约 1.4GB 或大约 70KB ......几乎相同。我已经使用了 Duktape 必须提供的一些优化,但它似乎不会影响这种用法。

所以问题是,有没有办法将每个上下文的内存利用率降低到每个上下文的 4KB(或更少)范围?

注意:是的,我知道 SpiderMonkey 1.7.0 并不是真正的全功能,但它是为了我正在尝试做的事情,并且没有我不想要也不需要的 JIT 复杂性来自后来的引擎、V8 等。因此,将 Duktape 视为替代方案。

谢谢!

0 投票
1 回答
985 浏览

typescript - 如何在 TypeScript 中替换 self 的类型?

我正在使用嵌入式 JavaScript 引擎(基于 duktape)。在这种情况下,“self”不是 Window 类型,而是 Script 或 JSComponent 类型。使用 typescript,编译在 self 上使用这些类的成员时会导致错误。

出于这个原因,我需要能够将 self 重新声明为 JSComponent 或 Script。在标准的 TypeScript 库中挖掘,我偶然发现了以下内容,我在任何地方都没有找到任何文档:

将此添加到要包含一半的 d.ts 可以解决问题:

我现在可以在我的 TS 文件中引用它,并将 self 用作 JSComponent。但是,我不能再在我的项目中的这个或任何其他 TS 文件中使用标准类,如 Object 和 Array。

有没有办法只对这部分代码使用 no-default-lib 来替换 self 的定义?或者,是否有另一种方法来实现这种重新声明?

0 投票
2 回答
821 浏览

arrays - Duktape 获取数组值

我可以像这样在全局中通过键粘贴带有值的数组:

但是我以后如何从全局获取值?

PS:对不起我的英语。

0 投票
1 回答
121 浏览

interpreter - duktape 启动 duk_create_heap_default 恐慌退出

我尝试用 IAR 编译器为 STM32F4 micro 编译 Duktape。我已经构建了第一个最小的示例程序,但以恐慌结束

最后四个调用堆栈过程是

提前感谢您的建议。

0 投票
1 回答
880 浏览

duktape - 如何使用 duktape 制作一个采用可变数量参数的本机 javascript 函数?

使用duktape javascript 实现,您可以将本机 C 函数公开给 javascript 并像这样实现它们:

在公开本机函数时,我们需要指定参数的数量。

请举例说明如何制作一个接受可变数量参数的 C 函数并使用 duktape 将其公开给 Javascript。

0 投票
1 回答
193 浏览

duktape - “require()”在沙箱中安全吗?

我正在构建一个沙盒 duktape 应用程序。sanboxing 文档 ( https://github.com/svaarala/duktape/blob/master/doc/sandboxing.rst ) 建议删除默认的 require() 实现。我不清楚为什么这是必要的。似乎 require() 依赖于 modSearch() 来确定要加载什么代码以及从哪里加载。如果 modSearch() 不允许从沙箱中不允许的任何地方加载数据,那么默认的 require() 实现是否还有其他不安全或引起警惕的地方?