Object 如何使用LLVM实现动态对象?

Object 如何使用LLVM实现动态对象?,object,hashmap,llvm,Object,Hashmap,Llvm,假设使用类似javascript的语言,我们如何实现以下系统: a = {}; a.foo = {}; a.foo.bar = 42; print a.foo['bar']; 使用LLVM C++ ++ API?< /P> 我没有找到任何关于complexe数据类型的文档(比如从值中继承的HashMap),所以我有点迷路了。LLVMC演示网页也没有用处,因为C/C++中没有这样的数据类型 我已经完成了《万花筒》教程,但没有找到任何其他真正好的教程。与您在任何其他低级语义的基础上完成该教程的方法

假设使用类似javascript的语言,我们如何实现以下系统:

a = {};
a.foo = {};
a.foo.bar = 42;
print a.foo['bar'];

使用LLVM C++ ++ API?< /P> 我没有找到任何关于complexe数据类型的文档(比如从值中继承的HashMap),所以我有点迷路了。LLVMC演示网页也没有用处,因为C/C++中没有这样的数据类型


我已经完成了《万花筒》教程,但没有找到任何其他真正好的教程。

与您在任何其他低级语义的基础上完成该教程的方法相同。您必须实现您自己的运行时库、您自己的哈希映射(或者您希望用于动态分派的任何其他内容)。LLVM不(也不应该)为它生成的代码提供任何运行时。

这里有一个使用LLVM用python编写的jit语言示例。

它不是直接需要的,而是面向对象的,报告涵盖了实现语言的对象定位的简单方法。< / P>我可以用C++作为运行库的语言吗?还是应该使用llvm中间表示编写它?你有关于这个的链接吗?我不知道怎么运送这个library@NisonMa当然,您可以链接到任何现有的库,包括libstdc++,但在您的情况下,这将是一个相当过分的技巧。你将不得不实现C++的ABI的很大一部分,尤其是Mangle,以便只使用一对库函数。最简单的方法是用C实现您的库,并根据需要静态或动态地链接它。另一种方法(虽然我不建议在你的情况下)是实现LLVM的内部。.P.S.,一种使用C++实现你的运行库的方法是把它的API打包成<代码>外“C”< /代码>我想我明白你的意思。您是否知道有任何文章讨论过设计这种库以便将其与llvm集成(甚至对于其他数据类型,如字符串容器)?如果您能举个例子,我将不胜感激。@NisonMaël,我不知道有任何关于这个主题的文章,但您可以看看VMkit和Pure语言。后者非常简单,具有紧凑且易于理解的运行时