在从非常类似于JavaScript到C ++的语言开发编译器时,我需要一种表示数据结构的方法。 JavaScript的主要数据结构是Arrays和Hash-Tables。数组更直接:我可以使用无类型指针的向量。它需要是一个向量,因为JS数组是动态的,而且是指针,因为JS数组可以包含任何类型的对象,例如:
var array = [1,2,[3,4],"test"];
除了那个以外我找不到代表这个的方法(是吗?)。对于哈希,我可以使用类似的东西,除了在访问时包括字符串哈希步骤。
问题是: JavaScript哈希被JIT编译成实际的C ++对象,这可能比哈希快得多。这样,我担心我生成类似C ++的尝试实际上会导致代码比JavaScript版本慢!
答案 0 :(得分:0)
如果这是一个AOT编译器,你只能处理你在编译时看到的哈希键。在这种情况下,您可以更改对已知密钥的散列访问以进行数组访问,为每个已知密钥提供一个小整数作为索引。