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

标签 c++ c++11 language-design dynamic-variables

首先,我是 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 对象只是无用的键值映射)。

变体是一种标记 union 类型。数据结构有一个整数或枚举来说明存储的类型,然后是一个可以被视为任何这些类型的存储 block 。访问器检查类型,然后与数据交互,就像数据是该类型一样。

标记的 union 可以通过手动销毁数据(使用 .~X() 语法)将存储的数据替换为不同类型的数据,然后在该位置手动创建新类型(使用放置-语法)。在 C 中执行此操作基本相同,但语言支持稍少一些。

第一种技术 - 找出真正存在的类型并使用它 - 往往会快一个数量级(在我看到它的概要分析的情况下),因此智能脚本引擎很难工作让这一切发生。但第二个功能足够了。

现在,我不知道 node.js 是否真的被重新编译为 C/C++ 代码。但是,经过层层编译、解析和字节码之后,它将由 C/C++ 或汇编解释器进行解释,或者将自身编译为机器代码,而无需经过 C/C++ 中间步骤。无论如何,用机器代码解决这个问题与 C/C++ 的解决方案是等价的。

关于c++ - 如何在 C++ 中为 Node.JS 实现动态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38568401/

相关文章:

c++ - 未解析的外部符号 - C++

c++ - 为 C++ Linux 应用程序创建隐藏配置文件

c++ - 在 Visual Studio 中创建静态/动态 C++ 库时出现问题

c++ - 派生类的模板特化

perl - 为什么 Perl 控制语句需要大括号?

c++ - 堆栈 View - 解释

c++ - 使用 vector 中的每 2 个元素进行计算的嵌套循环中的段错误

c++ - 如何将字符串数组转换为char**

c++ - 如何跟踪给定主题的较新的 C++ 标准文档?

rust - 为什么 Rust 有时会在泛型的参数之前放置一个::?