我正在尝试将内部语言(ihl)交叉编译为Python。
一个IHL的特性是指针和引用,这些行为和C或C++所期望的一样。例如,您可以执行以下操作:
a = [1,2]; // a has an array
b = &a; // b points to a
*b = 2; // derefernce b to store 2 in a
print(a); // outputs 2
print(*b); // outputs 2
有没有办法在Python中复制这个功能。
我应该指出,我想我把一些人搞糊涂了。我不想要Python中的指针。我只是想从Python专家那里了解一下,我应该生成什么样的Python来模拟上面所示的情况
我的Python不是最伟大的,但到目前为止,我的探索还没有取得任何有希望的成果
我应该指出的是,我们正在寻求从ihl转向更通用的语言,因此如果有人能提出更合适的另一种语言,我们就不会真正依赖于Python。
您可能需要阅读Semantics of Python variable names from a C++ perspective。底线是:所有变量都是引用。
更重要的是,不要考虑变量,而要考虑可以命名为的对象。
如果你正在编译一种类似于C语言的语言,请说:
在Python中,所有的“Python中的所有内容都是引用”都是一个错误的名称。
Python中的所有内容都是一个引用,但许多核心类型(int、string)是不可变的,这一事实在许多情况下有效地撤销了这一点。在Python中没有直接实现上述内容的方法。
现在,您可以间接地这样做:对于任何不可变类型,将其包装为可变类型。埃弗米恩特的解决方案有效,但我经常这样做:
(我这样做是为了解决Python在2.x中缺少“非本地”的问题几次。)
这意味着更多的开销:每一个不可变类型(或者每一个类型,如果你不试图区分的话)突然创建一个列表(或者另一个容器对象),所以你显著增加了变量的开销。单独来说,它不是很多,但是当应用到整个代码库时,它会累加起来。
您可以通过只包装不可变类型来减少这种情况,但是您需要跟踪输出中包装的变量和不包装的变量,以便您可以适当地使用“a”或“a[0]访问该值。可能会有毛。
至于这是不是个好主意,那要看你为什么这么做。如果你只是想运行一个VM,我倾向于说不。如果你想从Python调用你现有的语言,我建议你使用你现有的VM并为它创建Python绑定,这样你就可以从Python访问和调用它。
这可以显式地完成。
相关问题 更多 >
编程相关推荐