LFortran 文档

LFortran 是建立在 LLVM 之上的现代开源(BSD 许可)交互式 Fortran 编译器。它可以交互地执行用户代码以允许探索性工作(很像 Python、MATLAB 或 Julia),也可以编译为二进制文件,目标是在多核 CPU 和 GPU 等现代架构上运行用户代码。

Website: https://lfortran.org/

Main repository: https://github.com/lfortran/lfortran

Try online using Binder: Binder

功能亮点

LFortran 正在开发中,有些功能现在可以使用,有些功能正在实现中。你还可以查看 Development Status 部分,了解有关被支持和正在开发的功能的更多信息。

现有功能

  • 交互式,Jupyter 支持:LFortran 可以在 Jupyter 中用作 Fortran 内核,允许 Python/Julia 风格的快速原型设计和探索性工作流程(参见示例笔记: 静态交互)。或者,它可以在交互式提示 (REPL) 中的命令行中使用。

  • 简洁、模块化设计,可用作库:LFortran 围绕两个独立模块 AST 和 ASR 构建,这两个模块都是独立的(完全独立于 LFortran 的其余部分),鼓励用户将它们独立用于其他应用程序并在上面构建工具。有关详细信息,请参阅 DesignDeveloper Tutorial 文档。

  • 与 GFortran 的互操作:LFortran 可以将 GFortran 模块文件解析为 ASR 并生成一个 Fortran 包装器,该包装器可以用任何 Fortran 编译器编译并与原 GFortran 编译模块链接。

  • 创建可执行文件:它可以像其他 Fortran 编译器一样创建可执行文件。

  • 在 Linux、Mac 和 Windows 上运行:所有三个平台都由我们的 CI 定期测试。

计划

已计划这些功能正在开发中,有对应议题的链接,方便大家关注跟踪进度。

  • 与其他语言(以及其他 Fortran 编译器)的原生互操作:只需使用 use 语句即可自动调用其他语言(如 C 或 Python)编写的代码,参见 #44。它理解其他 Fortran 编译器模块文件(可以use它们)及其 ABI 以正确链接(支持 GFortran,计划使用其它编译器,请参阅 #56),它允许将 LFortran 与如今的生产代码一起使用。

  • 现代硬件支持:得益于 LLVM,LFortran 的目标是在现代硬件上运行,并利用原生 Fortran 语言结构(例如 do concurrent)在多核 CPU 和 GPU 上运行,请参阅 # 57

  • 完整的 Fortran 2018 支持:目前只实现了 Fortran 的一个子集,但目标是完整实现最新的 Fortran 2018 标准,请参阅 #58

请在我们的 议题跟踪器 中对你希望我们优先考虑的问题进行投票(如果我们遗漏任何内容,请随时创建新问题)。

路线图

以下是我们如何实现上述所有计划功能的路线图:

  1. 端口代码生成以使用 ASR 并通过所有当前测试 (#74)。删除用于注释 AST 树的旧代码生成和旧语义,这很混乱。

  2. 获取使用 use 模块的 GFortran 模块文件,包括假定大小和假定形状数组 (#52)。这将允许立即将生产代码与 LFortran 一起使用。

  3. 同时做这些:

    a) 实现更多 Fortran 功能,直到最终支持完整的 Fortran 2018 (#58)。

    b) 逐渐转向 C++ 以获得稳健性和速度(#70)。 Python API 不会改变(或只有很小的改变),因此 Python 的用户体验不会改变。

    c) 实现所有其他很酷的功能:用于 C 和 Python 的 use 模块和自动包装器(#44)、现代硬件支持(# 57)、生成较旧的 Fortran 标准(#72)、Fortran doctest 功能(#73), SymPy 集成(#71)、IDE 的语言服务(#12)和其他想法(#29)。

第 1 步是内部重构,不会花费很长时间。

第 2 步将允许 LFortran 立即与生产代码交互使用(生产代码将使用 GFortran 编译,然后“使用” LFortran 中的任何模块,并且可以交互调用函数/子例程,模块本身可以使用任何 GFortran 支持的功能,但 API 必须适合 LFortran 理解的子集 —— 对于大量应用程序,带有数组参数的简单函数/子例程就足够了)。这将使 LFortran 可供第一批用户使用,并且在 LFortran 支持给定功能之前,始终可以临时使用 GFortran。我们预计在 2019 年夏末完成第 2 步,希望能更快。

最后,第 3 步将整体改进 LFortran,允许第一批用户回馈,发展社区并使 LFortran 逐渐对越来越多的人有用。