在我的编译器的开发阶段,我遇到了一个非常复杂的问题:如何在我的语言中存储弱类型变量。
由于我允许在不明确指定其类型的情况下声明变量,并允许函数返回任一类型(例如函数可以返回标量 OR 数组),我现在面临着以何种形式存储这些变量的困难。
以下是我考虑过的可能性,但它们都有很大的开销:
- 将所有变量视为双精度列表 (
List<double>
) 并让第一个元素指定它是标量还是数组(0
或1
例如)。 - 将所有变量视为
object
实例。 - 将所有变量视为
TVar
(自定义类),可以是 adouble
或List<double>
.
要牢记:
- 我打算拥有的唯一两种类型的变量是双精度和双精度数组,因为所有其他变量都可以从中派生(例如 char 是双精度的情况,字符串是字符数组等)
- 我正在使用
ILAsm
它是更高级别的汇编风格(基本上是.NET中间语言)