Fortran 通讯:2020 年 8 月#

欢迎阅读 2020 年 8 月版的每月 Fortran 通讯。时事通讯在每个月的第一个日历日发布,详细介绍上个月的 Fortran 新闻。

fortran-lang.org#

我们继续在 Fortran-lang 网站上开展工作,包括:

正在进行的工作:

  • #117:添加一个 Benchmarks 部分,在 https://github.com/fortran-lang/benchmarks 创建了一个新的专用存储库和许多细节已在 issues 中讨论

让我们知道 如果你对网站及其内容有任何建议。我们欢迎任何新的贡献者加入网站,尤其是教程页面 —— 请参阅 贡献者指南 了解如何开始。

Fortran 标准库#

Fortran 标准库中的新增功能:

  • #223:Fortran 标准库的结构已经过修改,以提高清晰度和易用性。通过这些更改,实验程序和稳定程序将一起驻留在相同的模块中。程序的状态(实验与稳定)记录在代码、规范和 API 文档

正在进行的主要讨论:

  • #225: stdlib 中派生类型的命名约定

  • #224:在stdlib中处理和传播错误

  • #221: 用于 bitset 数据类型的 API

  • #201:用于文件系统操作的 API

Fortran 包管理器#

fpm 的新功能:

  • 我们创建了 fpm-registry 存储库,用作启用 fpm 的 Fortran 包的注册表。请参阅那里的 README 以了解如何贡献一个包。目前,注册表只是一个启用 fpm 的 Fortran 包的列表,你可以在 fpm.toml 文件中将其用作依赖项。很快,此注册表将用于生成 fpm 将使用的详细元数据,以允许你从命令行搜索包,例如fpm search <package> 或类似的。

  • #146:我们在视频通话中讨论了 fpm 的新 Fortran 实现的设计。我们同意需要一个中间包模型,该模型将允许 fpm 前端(用户界面、解析和语义)和 fpm 后端(fpm 本身、CMake、Make 等)的清晰分离。

  • #131#132# 139#140#142, #145#147#148#151:我们将几个拉取请求合并到 Fortran fpm 实现。 Haskell 实现已移至 fpm/bootstrap 目录,Fortran 实现在fpm/fpm 中开发。当然,Fortran fpm 本身就是一个 fpm 包,因此它可以由 Haskell fpm 构建。很快,它将能够自行构建。

fpm 仍处于早期开发阶段,我们需要尽可能多的帮助。以下是你今天可以提供的帮助:

  • 尝试使用它。它是否正常工作?没有吗?请让我们知道!阅读 fpm 打包指南 了解如何使用 fpm 构建你的包。

  • 浏览 开启的 issues,看看你是否可以帮助实施任何修复或功能。

  • 为 fpm 调整你的 Fortran 包。

  • 改进文档。

fpm 的短期目标是使具有依赖关系的 Fortran 包的开发和安装更容易。其长期目标是构建一个丰富且分散的 Fortran 包生态系统,并创建一个健康的环境,在该环境中轻松创建和发布新的开源 Fortran 项目。

Fortran 基准测试#

我们创建了 基准存储库,旨在设计和实施一套全面的基准。基准测试旨在比较各种 Fortran 编译器的性能,以及用 Fortran 和不同语言实现的规范算法的性能。如果您想以任何方式做出贡献,无论是基准测试的设计、实现还是测试,请加入正在进行的讨论 此处

经典 Flang#

我们已经开始评估拉取请求并将它们再次合并到原始的 Flang 编译器中。现在每两周召开一次电话会议,讨论 Classic Flang 的问题和计划。下一个电话将是太平洋时间 8 月 12 日星期三上午 8:30。可以在 此处 找到以前电话会议的笔记、即将举行的议程和加入电话会议的链接。

在上一次电话会议中,AMD 审查了他们对 Fortran 调试元数据增强的出色拉取请求。

LLVM Flang#

LLVM Flang 的工作仍在继续,专注于语义、降低和运行时足以编译和运行 Fortran 77 程序。我们正在修复在运行 FCVS 和其他使用 F77 的测试套件时发现的错误。

我们将 fir-dev fork(基于 MLIR 的 Fortran IR)中的降低代码上游化到 llvm-project 存储库中。 Arm 正在努力进行更改以支持驱动程序以替换我们目前拥有的一次性驱动程序。

AMD 一直在为 OpenMP 结构(如任务等待、屏障和并行结构)提供解析器和语义处理。

已将默认解析/解解析/编译处理更改为默认为 gfortran(不是 NVIDIA Fortran)。

Valentin Clement 一直在对 OpenACC 支持进行初步更改。

LFortran#

LFortran 的新功能:

  • 初始原型 C++ 后端可以将 Fortran 的 do concurrent 转换为 C++ 的 Kokkos::parallel_forhttps://twitter.com/lfortranorg/status/1280764915242811393

  • LFortran 有一个 Twitter 帐户以获取最新更新:@lfortranorg

  • 用 C++ 编写的 LFortran 生产版本的工作正在进行中

  • 2020 年 7 月合并了 22 个合并请求,修复了 4 个问题。一些值得注意的问题:

    • #163:实现基本的 Fortran 到 C++ 翻译后端

    • !410:通过 LLVM 在交互模式下进行简单计算

    • !402:为子例程和函数正确构建 ASR(抽象语义表示)

短期目标是让基于 C++ 的 LFortran 生产版本与 Python 原型版本的大部分功能相匹配,并公开发布。长期目标是构建一个现代的 Fortran 编译器,它可以与任何生产代码一起工作,并允许它在现代硬件(CPU 和 GPU)上高效运行,以交互方式和编译为二进制文件,并为 Fortran 等其他工具提供基础到 C++ 翻译、编辑器支持、自动文档生成(和 Python 中的文档测试)、自动格式化等。

活动#

  • FortranCon 2020 于 7 月 2 日至 4 日举行。有许多有趣的演讲。请参阅谈话时间表 此处。 FortranCon 组织者已录制了所有演示文稿,并将很快在网上提供。

  • 我们在 7 月 16 日举行了第三次 Fortran 月度电话会议。你可以阅读以下录音:

像往常一样,订阅 邮件列表 和/或加入 Discourse 继续关注未来的会议。

贡献者#

我们通过在四个存储库中的任何一个中发表评论来感谢过去一个月为 fortran-lang 做出贡献的所有人: