如何自动将纯代码转换为使用可变数组提高效率的代码?

Rob*_*een 5 arrays optimization haskell code-generation mutable

这是一个Haskell问题,但我也对其他语言的答案感兴趣.有没有办法自动翻译纯函数代码,编写处理列表或不可变数组而不进行任何破坏性更新,代码使用可变数组提高效率?

在Haskell中,生成的代码将在STmonad中运行(在这种情况下它将全部包装在runST或中runSTArray)或在IOmonad中运行,我假设.

我最感兴趣的是适用于任何元素类型的通用解决方案.

我以为我以前见过这个,但我不记得在哪里.如果它还不存在,我有兴趣创建它.

Hea*_*ink 4

使用破坏性更新实现函数式语言是一种内存管理优化。如果不再使用旧值,则可以安全地重用旧内存来保存新值。检测一个值将不再被使用是一个难题,这就是为什么重用仍然是手动管理的。

线性类型推断和唯一性类型推断发现了一些有用的信息。这些分析发现了保存对某个对象的唯一引用的变量。最后一次使用该变量后,要么将该对象转移到其他地方,要么可以重新使用该对象来保存新值。

包括SisalSAC在内的多种语言尝试重用旧的数组内存来保存新数组。在SAC中,程序首先被转换为使用显式内存管理(具体来说,引用计数),然后优化内存管理代码。