Futhark 最终怎么处理别名传播
来源:futhark-lang.org — 2026-10-11
📋 概述
Futhark 作者总结别名传播这一难题的结论。为保证就地更新安全,类型检查器必须保守地追踪两个对象是否可能共享内存:函数返回类型 t 表示结果可能与参数别名,*t 表示结果全新。麻烦来自多态高阶函数——apply 这类函数必须同时适用于 reverse 与 copy,按声明只能保守认为结果与参数别名,管道运算符 |> 的体验因此很差。作者拒绝把"新鲜度多态"写进用户可见的类型语言,改为利用参数性推断更精确的类型:若结果中的类型参数只出现一次、且只能来自某个函数参数的应用,就继承那个函数的新鲜度。该精化极其保守,只在函数是已完全应用的多态变量时生效。
🔑 核心要点
- 病根:多态高阶函数无法在类型里表达"结果和谁一样新",apply 与 |> 因而体验很差
- 类型层面区分 t(可能与参数别名)与 *t(全新)
- 拒绝把新鲜度多态写进用户可见的类型语言,改为利用参数性推断更精确的类型
- 精化规则:结果中的类型参数只出现一次、且只能来自某函数参数的应用,则继承该函数的新鲜度
- 做法非常保守:只在函数是已完全应用的多态变量时生效,绕过部分应用等花招
- 作者对健全性很谨慎,正在尝试把系统形式化(并谈到借助 AI 编码代理协助)
💡 金句
因为这项工作走在通往 Futhark 1.0 的路上,我非常不想引入意外的不可靠性。
👍 0
👎 0
← 返回 Lobsters 首页