用Sounio做气候科学
执行阅读
此路线存在,是为了证明Sounio不仅关于更快计算。它关于拒绝将不稳定证据转化为政策准备就绪的数字。
气候软件是很好的压力测试,因为它惩罚虚张声势。你总是可以发布另一个预测。更难的纪律是决定当集合传播、模型分歧或数据质量变得太弱时,程序是否应该停止说话。
这就是论点:语言应该帮助科学代码在证据不再证明一个清晰答案之前停止、缩小范围或标记拒绝。
此路线试图证明什么
Sounio应该在正确答案有时是“不要假装这个估计是决策级的”的工作流程中有用。
气候路线因此是关于拒绝纪律:
- 集合聚合应该保留不确定性,而不是将其压平
- 下游软件应该看到信心故事,而不仅仅是平均值
- 增加方差应该能够约束或停止计算
- 用户应该能够区分有界的预测和光鲜的虚张声势
如果语言不能支持这种立场,那么所有的“认识论”修辞都是装饰性的。
持怀疑态度的读者应该问
- 这是否只是普通数值代码的另一个不确定性包装?
- 路线是否展示了分歧的传播,或者只提到了它?
- 程序是否被允许拒绝结果,或者只是事后注释它?
- 这个关于气候科学的声明是关于软件本身的纪律,还是关于软件?
答案应该是第二个:此路线不是声称要取代一个完整的气候实验室。它是在声称科学软件必须在这些限制成为公共政策错误之前,使其可读。
集合聚合
struct EpistemicValue {
value: f64,
variance: f64,
conf_alpha: f64,
conf_beta: f64
}
fn ensemble_mean_5(
m1: EpistemicValue,
m2: EpistemicValue,
m3: EpistemicValue,
m4: EpistemicValue,
m5: EpistemicValue
) -> EpistemicValue {
let n = 5.0
let mean_value = (m1.value + m2.value + m3.value + m4.value + m5.value) / n
let within_var = (m1.variance + m2.variance + m3.variance + m4.variance + m5.variance) / n
// ... between variance calculated ...
let total_var = within_var + between_var
return EpistemicValue {
value: mean_value,
variance: total_var,
conf_alpha: 1.0,
conf_beta: 1.0
}
}
示例的目的是不是平均是新颖的。重点是聚合表面保持不确定性故事,而不是将其视为可选元数据,一旦数字足够漂亮就可以丢弃。
为什么这对语言很重要
气候是“总是产生答案”成为政治失败模式的最清晰的地方之一。
如果你的软件堆栈仅优化于继续输出数字,它很容易混淆输出连续性与知识连续性。一个认真对待不确定性的语言必须给程序另一个选项:缩小范围、表面分歧或停止。
这就是为什么此路线与GPU和神经成像一起出现在商店橱窗中。它不是在这里为了话题多样性。它在这里是因为它证明了语言正在由拒绝是能力一部分的领域塑造。
什么能说服持怀疑态度的读者
- 从承载不确定性的值到下游决策的可见路径
- 例子中,增加传播改变控制流,而不仅仅是复制
- 对当前有界的气候表面的诚实文档
- 对“有趣的研究压力”和“生产预测平台”的明确区分
这就是此路线应该被持有的标准。
边界仍然在哪里
此路线不声称:
- Sounio已经是一个完整的气候建模平台
- 当前示例是替代完整预测堆栈
- 每个科学工作流已经用拒绝意识控制流编码
主张是更窄的:气候压力暴露了为什么科学软件需要一个语言,可以保留不确定性并在证据停止证明清晰答案时停止说话。