如何在 C++ 中为 Node.JS 实现动态变量

How dynamic variables implemented for Node.JS in C++

首先,本人是C/C++初学者,手下留情

在Node.JS中,所有变量都是动态的,我们可以将变量转换为任何类型。因此,Node.JS 是用 C++ 编写的,而在 C++ 或 C 中没有动态变量。那么动态变量是如何实现的呢?

在 JS 中:

var A;
A = 5; //Integer
A = "Hello world!"; //String
A = 2.5; //Float
A = 5 * "Hello world!"; // I do not sure about this one.

有两种很好的方法。

首先是将局部变量视为一系列值的名称。这允许您使用 ,而不是变量,即使变量没有,值也有类型。

一种效率较低的处理方法是创建多态存储,如 boost::anystd::any。对于 JS 来说,基本类型只有几种,所以 boost::variantstd::variant 绰绰有余。 (复杂的 JS 对象只是乱七八糟的键值映射)。

A variant 是一种标记联合。数据结构有一个整数或枚举来说明存储的类型,然后是一个可以被视为任何这些类型的存储块。访问器检查类型,然后与数据交互,就好像它是那种类型一样。

标记的联合可以用不同类型的数据替换存储的数据,方法是手动销毁它(使用 .~X() 语法),然后在该位置手动创建新类型(使用 placement-new 句法)。在 C 中执行此操作基本相同,但语言支持较少。

第一种技术——找出真正存在的类型并使用它——往往要快一个数量级(在我看到它分析的情况下),所以智能脚本引擎确实有效很难做到这一点。但是第二个功能足够了。

现在,我不知道 node.js 是否真的被重新编译为 C/C++ 代码。但是在层层编译解析和字节码之后,它会被 C/C++ 或汇编解释器解释,或者它会自己编译成机器码而不经过 C/C++ 中间体步。在任何情况下,机器代码中此问题的解决方案都等同于 C/C++。