Fortran 2023
Fortran 2023 标准的发布让人们重新关注这门在高性能计算中仍然举足轻重的语言,尤其是在天气预报、气候建模、CFD 和物理等领域。评论者强调了 Fortran 的优势——特别是数组语义、严格的别名规则以及成熟的编译器——这些特性使得编写快速数值代码比在 C/C++ 或 Python+NumPy 中更容易;同时也指出了诸如字符串处理薄弱、缺少泛型以及工具链碎片化等问题。讨论还涉及标准演进缓慢且保守、ISO 官方规范需付费,以及大型遗留 Fortran 代码库应迁移到新语言还是在现代加速器(如 GPU)上获得更好的支持。
语言变更与标准化
- Fortran 2023 被描述为在 2018 和 2008 之上的增量更新,新增特性相对较少。
- 一个值得注意的语义变化:对可分配字符变量的内部写入现在必须重新分配,以匹配写入长度,而不是填充/截断,这可能会破坏先前符合标准的代码。
- 有些批评认为 Fortran 在尚未经过充分实现/测试之前就将特性标准化,导致多年后才发现歧义和编译器行为不兼容。
编译器支持与工具链
- 提到的当前开源编译器有:GFortran、LLVM Flang 和 LFortran,它们都支持“现代 Fortran”,但尚未完整支持 F’23。
- Flang 可以对在 F’23 下语义会改变的构造发出警告。
- 尽管有 FPM 这样的项目,缺乏一个标准、广泛采用的包管理器仍被认为是一个痛点。
为什么 Fortran 仍在使用
- 主要领域:数值天气预报、气候模型、CFD、有限元分析、地球物理、计算物理、晶体学、计算化学、生物信息学,以及核/武器代码。
- 强大的路径依赖:科学机构和政府实验室中存在规模庞大、经过高度优化的遗留代码和专业知识。
- 与 C++ 相比,Fortran 被视为对科学家/研究生而言相对更小巧、更容易学习。
与其他语言的性能对比
- 关键优势:对数组别名的严格规则以及更受限制的内存模型,使得 aggressive 优化成为可能,尤其适用于多维数组和切片。
- 理论上,C 通过
restrict、谨慎编码,甚至汇编也能达到相同性能,但与 Fortran 的默认行为相比,这被描述为脆弱且耗费大量精力。 - Fortran 被比作“高度优化的 Matlab”或类似 NumPy 的数组语言;在 C/C++ 中完成等价的数组工作被认为很笨重。
- 对现代 C++ 抽象和库(如 Eigen)是否缩小了差距存在争论;共识是 Fortran 仍然让非专家程序员更容易获得高性能。
- NumPy 大多调用 C/BLAS/LAPACK;对于小数组,Python–FFI 交互的开销可能会变得重要。
GPU、生态与未来
- 已存在 GPU 支持(例如 CUDA Fortran),但开源、可移植的方案被认为仍不完整;这推动了一些项目迁移到 Julia、C++、Python/JAX 或 shader。
- 有人认为,真正的新 Fortran 项目很少在传统领域之外启动;也有人指出,现代 AI/ML 推理框架和神经网络仍有用 Fortran 编写。
- 据称社区比十年前更活跃、更有组织;人们对将 Fortran 作为面向常见 IR(如 MLIR)的领域特定语言很感兴趣。
标准获取与 ISO 政策
- 有人抱怨必须为官方 ISO PDF 付费;标准草案可免费获取,并且通常被视为足够且在实践中具有权威性。