cheerp数据类型包装
这个文章主要描述在cheerp环境下, js和c++侧数据类型的转换和包装内容。 1 基础数据类型 首先我们知道javascript是弱类型的脚本语言,开发者在开发的时候不必关注数据的类型和边界,而c++是静态编程语言, 在编译阶段就需要确定类型,在编译器处理的时候可以获得更好的优化。 我们都知道js所拥有的数值类型,(int,uint,float,double)默认不区分都是double类型存储,这点和lua很相似。 在一般堆栈机下,如果使用函数调用会有大量的push,pop指令来获取传递的参数,还要在内部进行根据类型包装成可识别的类型。 cheerp的内存模型是平坦的,目标如果不是wasm的话, 是和js一致的,可以直接调用(翻译成javascript,不需要push,pop这种指令)。 在cheerp环境下如果交织javascript和c++代码, cheerp会通过位移移除来替我们处理类型, 比如int类型,用js的Number左移两位来标识。我们可以不关心这些基础数据的转换。 2复合数据类型 如果是js模式,cheerp会将js对象转换成struct,或者是class类的映射...
