假设我有一个 A 类型的对象。对于 A -> A 类型的任何函数考虑这种情况(即获取 A 类型的对象并返回另一个 A 类型的对象):
foo = func(foo)
在这里,最简单的情况是将 的结果func(foo)
复制到foo
. 是否有可能对此进行优化,以便:
foo
就地修改func
使用的语言没有限制。我想知道的是语言必须具有哪些约束和属性才能实现这种优化。是否有任何现有的语言可以执行这种优化?
示例(在伪代码中):
type Matrix = List<List<int>>
Matrix rotate90Deg(Matrix x):
Matrix result(x.columns, x.rows) #Assume it has a constructor which takes as args the num of rows, and num of cols.
for (int i = 0; i < x.rows; i++):
for (int j = 0; j < x.columns; j++):
result[i][j] = x[j][i]
return result
Matrix a = [[1,2,3],[4,5,6],[7,8,9]]
a = rotate90Deg(a)
在这里,是否可以优化代码,使其不为新矩阵(结果)分配内存,而只是修改传递的原始矩阵。