【发布时间】:2011-09-11 07:32:22
【问题描述】:
当我第一次看到 C# 中的值类型时,我想到的第一件事是“哇,多么棒的优化”,第二件事是,“我们真的需要一种新的语言结构吗?我们不能用而是注释?”。
我们的想法是,给定一个类,我们将像往常一样使用它
class A {int i;}
class B {
A m_a;
int F(A a) {m_a = a;}
}
一时兴起,我们将A改为
[ValueType]
class A {int i;int j;}
并且编译器会自动将B类转换为
class B {
#region A
int A_i;
int A_j;
#endregion
int F(/*A param*/int i,int j) {
#region A_assign
A_i = i;
A_j = j;
#endregion
}
请记住,如果编译器不希望优化某些实例 - 它不必这样做。无论哪种方式都可以。
模板可能会出现问题,
int f<T>() {
T t; // how much stack should I allocate
}
但我不确定它是否比目前的情况更糟。我实际上不确定现在会发生什么(f<struct_of_100_bytes> 与 f<int> 的功能不同吗?)。
【问题讨论】:
标签: c# jvm language-design value-type vm-implementation