Duktape

拿来即用:用C+JS结构来处理JSON数据

三世轮回 提交于 2020-10-03 03:39:31
【面对的问题】 在物联网产品的开发过程中,对JSON格式的数据处理是一个强需求,例如亚马逊的 AWS IOT平台,设备与后台之间的通讯数据都是JSON格式,先瞄一眼大概的样子: 这是一个真实产品的通讯数据,设备端的代码C代码中利用cJSON这个开源工具来完成JSON字符的解析和组装工作。代码我这里就不贴了,解析函数很长,要滚动好多次鼠标滑轮。而且一不注意释放资源就会发生内存泄漏! 那么,是否有更好的方式来解决这个问题呢? 答案就是这篇文章介绍的duktape引擎! 【Duktape简介】 这里只是简单介绍下duktape,详细的介绍大家自己去google。 Duktape 是一个嵌入式 Javascript引擎,专注于可移植性和空间占用。 易于集成到C/C++项目中,使用API实现C代码与JS代码的双向调用。 【代码说明】 1.文件说明 duktape.c:引擎主要C文件。 duktape.h:引擎头文件。 main.c : main函数所在文件。 main.js :Javascript文件,处理业务逻辑的代码就放在这里。 Makefile : 编译脚本。 miniz.c :有时候为了js代码的保密,不能把js源码放到最终产品中,需要压缩和混淆;加载的时候再进行解压。 2.核心步骤 当C代码中需要对JSON格式的字符串进行处理时,把JSON数据通过栈结构传给JS程序

【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[3]:自定义代币

与世无争的帅哥 提交于 2019-12-10 03:57:18
原文作者:Xuejie 原文链接: https://xuejie.space/2019_09_06_introduction_to_ckb_script_programming_udt/ Nervos CKB 脚本编程简介[3]:自定义代币 CKB 的 Cell 模型和 VM 支持许多新的用例。然而,这并不意味着我们需要抛弃现有的一切。如今区块链中的一个常见用途是 Token 发行者发布具有特殊目的/意义的新 Token。在以太坊中,我们称之为 ERC20 Token,下面让我们看看我们如何在 CKB 中构建类似的概念。为了与 ERC20 区分,在 CKB中的 Token 我们称之为 user defined token,简称 UDT。 本文使用 CKB v0.20.0 版本来演示。具体来说,我会在每个项目中使用以下提交的版本: ckb: 472252ac5333b2b19ea3ec50d54e68b627bf6ac5 ckb-duktape: 55849c20b43a212120e0df7ad5d64b2c70ea51ac ckb-sdk-ruby: 1c2a3c3f925e47e421f9e3c07164ececf3b6b9f6 数据模型 以太坊会为每个合约账户提供单独的存储空间,CKB 与之不同,CKB 是在多个 Cell 之间传递数据。Cell 的 Lock Sript 和

【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[5]:调试 debug

穿精又带淫゛_ 提交于 2019-12-09 11:41:36
作者:Xuejie 原文链接: https://xuejie.space/2019_10_18_introduction_to_ckb_script_programming_debugging/ Nervos CKB 脚本编程简介[5]:调试 debug 事实上,CKB 脚本工作的层级要比其他智能合约低很多,因此 CKB 的调试过程就显得相当神秘。在本文中,我们将展示如何调试 CKB 脚本。你会发现,其实调试 CKB 脚本和你日常调试程序并没有太大区别。 本文建立在 ckb v0.23.0 之上。具体的,我在每个项目中使用的是如下版本的 commit: ckb: 7e2ad2d9ed6718360587f3762163229eccd2cf10 ckb-sdk-ruby: 18a89d8c69e173ad59ce3e3b3bf79b5d11c5f8f8 ckb-duktape:347bf730c08eb0aab7e56e0357945a4d6cee109a ckb-standalone-debugger: 2379e89ae285e4e639b961756c22d8e4fde4d6ab 使用 GDB 调试 C 程序 CKB 脚本调试的第一种方案,通常适用于 C、Rust 等编程语言。也许你已经习惯了写 C 的程序,而 GDB 也是你的好搭档。你想知道是不是可以用 GDB 来调试 C

【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[5]:调试 debug

孤街醉人 提交于 2019-12-08 17:12:38
作者:Xuejie 原文链接: https://xuejie.space/2019_10_18_introduction_to_ckb_script_programming_debugging/ Nervos CKB 脚本编程简介[5]:调试 debug 事实上,CKB 脚本工作的层级要比其他智能合约低很多,因此 CKB 的调试过程就显得相当神秘。在本文中,我们将展示如何调试 CKB 脚本。你会发现,其实调试 CKB 脚本和你日常调试程序并没有太大区别。 本文建立在 ckb v0.23.0 之上。具体的,我在每个项目中使用的是如下版本的 commit: ckb: 7e2ad2d9ed6718360587f3762163229eccd2cf10 ckb-sdk-ruby: 18a89d8c69e173ad59ce3e3b3bf79b5d11c5f8f8 ckb-duktape:347bf730c08eb0aab7e56e0357945a4d6cee109a ckb-standalone-debugger: 2379e89ae285e4e639b961756c22d8e4fde4d6ab 使用 GDB 调试 C 程序 CKB 脚本调试的第一种方案,通常适用于 C、Rust 等编程语言。也许你已经习惯了写 C 的程序,而 GDB 也是你的好搭档。你想知道是不是可以用 GDB 来调试 C

【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[3]:自定义代币

眉间皱痕 提交于 2019-12-07 22:41:22
原文作者:Xuejie 原文链接: https://xuejie.space/2019_09_06_introduction_to_ckb_script_programming_udt/ Nervos CKB 脚本编程简介[3]:自定义代币 CKB 的 Cell 模型和 VM 支持许多新的用例。然而,这并不意味着我们需要抛弃现有的一切。如今区块链中的一个常见用途是 Token 发行者发布具有特殊目的/意义的新 Token。在以太坊中,我们称之为 ERC20 Token,下面让我们看看我们如何在 CKB 中构建类似的概念。为了与 ERC20 区分,在 CKB中的 Token 我们称之为 user defined token,简称 UDT。 本文使用 CKB v0.20.0 版本来演示。具体来说,我会在每个项目中使用以下提交的版本: ckb: 472252ac5333b2b19ea3ec50d54e68b627bf6ac5 ckb-duktape: 55849c20b43a212120e0df7ad5d64b2c70ea51ac ckb-sdk-ruby: 1c2a3c3f925e47e421f9e3c07164ececf3b6b9f6 数据模型 以太坊会为每个合约账户提供单独的存储空间,CKB 与之不同,CKB 是在多个 Cell 之间传递数据。Cell 的 Lock Sript 和

export c++ class to duktape

ε祈祈猫儿з 提交于 2019-11-30 13:57:14
say I have a c++ class Point class Point { public: Point(); Point(float x, float y); ~Point(); float X; float Y; }; I'd like to add javascript functionality to it and chose duktape. is it possible to reuse this class in javascript? say var p = new Point(1.23, 4.56); I have been reading the duktape documentation and it only says how to reuse functions inside javascript. My personal advice is to create C++ bindings for it just like you would do in JavaScript. The only need, is to save the real C++ object in the JavaScript object, we use internal properties for that purpose. You need to create a

【在 Nervos CKB 上做开发】Nervos CKB脚本编程简介[2]:脚本基础

Deadly 提交于 2019-11-28 18:25:56
CKB脚本编程简介[2]:脚本基础 原文作者:Xuejie 原文链接:Introduction to CKB Script Programming 2: Script 本文译者:Shooter,Jason,Orange (排名不分先后) 上一篇我们介绍了当前 CKB 的验证模型。这一篇会更加有趣一点,我们要向大家展示如何将脚本代码真正部署到 CKB 网络上去。我希望在你看完本文后,你可以有能力自行去探索 CKB 的世界并按照你自己的意愿去编写新的脚本代码。 需要注意的是,尽管我相信目前的 CKB 的编程模型已经相对稳定了,但是开发仍在进行中,因此未来还可能会有一些变化。我将尽力确保本文始终处于最新的状态,但是如果在过程到任何疑惑,本文以 此版本下的 CKB 作为依据。 警告:这是一篇很长的文章,因为我想为下周更有趣的话题提供充足的内容。所以如果你没有充足的时间,你不必马上完成它。我在试着把它分成几个独立的不凡,这样你就可以一次尝试一个。 <br> 语法 在继续之前,我们先来区分两个术语:脚本(script)和脚本代码(script code) 在本文以及整个系列文章内,我们将区分脚本和脚本代码。脚本代码实际上是指你编写和编译并在 CKB 上运行的程序。而脚本,实际上是指 CKB 中使用的脚本数据结构,它会比脚本代码稍微多一点点: pub struct Script { pub