Fortran newsletter: May 2022#

Welcome to the May edition of the monthly Fortran newsletter. The newsletter comes out at the beginning of every month and details Fortran news from the previous month.

Here’s what’s new in the repo:

  • #359: Fix time calculation in the PRs script

  • #387: Newsletter for April 2022

  • #389: Add librsb to package index

  • #390: Add Elk to package index

  • #391: Add pencil-code to package index

  • #392: Add PROPACK to package index

  • #398: Add feed link to HTML head element

  • #369: Resolves Issue #217

  • #400: fix dependency of include files under learn/building_programs mini-book


  • #397 (WIP): Add NUFFT to package index

  • #396 (WIP): Add OpenFFT to package index

  • #395 (WIP): Add 2DECOMP&FFT to package index

  • #394 (WIP): Add SLICOT to package index

  • #393 (WIP): Add FATODE to package index

  • #347 (WIP): Fortran Intrinsics

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

Fortran 标准库#

Here’s what’s new in stdlib:

  • #646: Export symbols on Windows and set PIC flag for Unix

  • #651: Bugfix release version 0.2.1


  • #656 (WIP): Add hint for building error with make

  • #655 (WIP): fixed 32-bit integer overflow in stdlib_io_npy

  • #652 (WIP): Feature: loadtxt skiprows and max_rows

  • #625 (WIP): Gamma special function

  • #611 (WIP): Hash maps

  • #604 (WIP): Add get_argument, get_variable and set_variable

  • #580 (WIP): Add terminal and color escape sequences

  • #552 (WIP): fixed bug in stringlist

  • #536 (WIP): Fix conversion warnings

  • #520 (WIP): [stdlib_io] add disp(display variable values formatted).

  • #517 (WIP): adding #504

  • #514 (WIP): pop, drop & get with basic range feature for stringlist

  • #491 (WIP): Stdlib linked list

  • #473 (WIP): Error stop improvements

  • #363 (WIP): Sorting string’s characters according to their ASCII values

  • #286 (WIP): Probability Distribution and Statistical Functions – Beta Distribution Module

  • #278 (WIP): Probability Distribution and Statistical Functions – Gamma Distribution Module

  • #189 (WIP): Initial implementation of COO / CSR sparse format

Please help improve stdlib by testing and reviewing pull requests!

@MarDiehl@arjenmarkus该仓库。请尝试一下,如果有任何问题,或者 API 是否可以改进,请告诉我们它是如何工作的。

Fortran 包管理器#

Here’s what’s new in fpm:

  • #688: Small fix for fpm_model

  • #665: add clean command


  • #693 (WIP): Fix show-model option

  • #692 (WIP): Fix for non-portable GFortran -J flag in install script

  • #686 (WIP): fix: remove extra space from help-test cmd

  • #685 (WIP): fix: function for getting executable path

  • #676 (WIP): Tree shaking for modules

  • #671 (WIP): Add library-dir to support -Lpath

  • #653 (WIP): Enable profiles in toml

  • #608 (WIP): –env switch lets you specify the prefix of the compiler-related environment variables

  • #539 (WIP): Add parent packages into dependency tree

  • #498 (WIP): Compiler flags profiles

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

  • Use it and let us know what you think! Read the fpm packaging guide to learn how to build your package with fpm, and the manifest reference to learn what are all the things that you can specify in the fpm.toml file.

  • fortran-lang 网站 上浏览现有的 fpm

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

  • 为 fpm 调整 Fortran 包并将其提交到 Registry

  • 改进文档。

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




  • FIR

    • Lower various intrinsics:

      • character related intrinsics, array related intrinsics, index intrinsics, present, exit, btest, ceiling, nearest, scale, matmul, trim, transpose, command, environment, repeat, aint, anint, cmplx, conjg, dble, dprod, sign, spacing, rrspacing, merge intrinsics, lbound, ubound, ior, exp, log, log10, sqrt, atan, sinh, cosh, sin, cos, mvbits, achar

    • Add IO lowering test

    • Add more lowering tests for dummy arguments

    • Add equivalence lowering tests

    • Add array constructor lowering tests

    • Lower more array expressions

    • Lower statement function

    • Lower length on character storage

    • Lower select case statement

    • Add OpenMP Conversion patterns

    • Lower procedure designator

    • Lower boxed procedure

    • Flush and master constructs

    • Add lowering C interoperability test

    • Add misc lowering tests

    • Handle zero extent case in LBOUND

    • Lower some coarray statements to their runtime function

    • Options to lower math intrinsics to relaxed, precise variants


    • Added lowering support for atomic read and write constructs

    • fix LBOUND lowering with KIND and no DIM arguments

    • Keep fully qualified !fir.heap type for fir.freemem op

    • Update the conversion code for fir.coordinate_of

    • Set lower bounds of array section fir.embox to one

    • Fix fir.embox codegen with constant interior shape

    • Do not fold fir.box_addr when it has a slice

  • Driver

    • Make –version and -version consistent with clang

    • Add support for -mmlir

    • Make the plugin API independent of the driver internals

    • Add support for generating executables

  • OpenMP

    • Lowering critical construct

    • Added assembly format for omp.wsloop and remove parseClauses

    • Added lowering support for sections construct

    • Added ReductionClauseInterface

    • Added parallel sections translation

    • Revert “[Flang][openmp] Add semantic check for OpenMP Private, Firstprivate and Lastprivate clauses.”

    • Added allocate clause translation for OpenMP block constructs

    • Support export/import OpenMP Threadprivate Flag

    • Add implementation of privatisation

    • Add checks and tests for hint clause and fix empty hint

  • OpenACC

    • Lower enter data directive

    • Lower exit data directive

    • Lower init/shutdown directive

    • Lower update directive

    • Lower data directive

    • Lower wait directive

  • Runtime

    • Error recovery improvement in runtime (IOMSG=)

    • Initial UTF-8 support in runtime I/O

    • Ensure PointerDeallocate actually deallocate pointers

    • Add runtime API to catch unit number out of range

    • Prefer process time over thread time in CPU_TIME

    • Raise FP exceptions from runtime conversion to binary

    • Preserve effect of positioning in record in non-advancing output

    • Don’t skip input spaces when they are significant

    • Fix ENDFILE for formatted stream output

    • Don’t emit empty lines for bad writes

    • Ignore leading spaces even in BZ mode

    • Fix edge-case FP input bugs

    • Enforce some limits on kP scale factors

    • Signal record read overrun when PAD=’NO’

    • Fix KIND=16 real/complex component I/O

    • Fix total MAXLOC/MINLOC for non-integer data

  • Handle allocatable components when creating array temps

  • [Parser] Add a node for individual sections in sections construct

  • Add explanatory messages to grammar for language extensions

  • Convert RUNTIME_CHECK to better error for user errors in transformational.cpp

  • Accept legacy aliases for intrinsic function names

  • Expose error recovery cases in external I/O

  • Fix crash: ENTRY with generic interface of the same name

  • Fold DBLE

  • Single construct translation from PFT to FIR

  • UBOUND() edge case: empty dimension

  • Make not yet implemented messages more consistent

  • Fix LBOUND rewrite on descriptor components

  • Ensure descriptor lower bounds are LBOUND compliant

  • Fix cycle-catcher in procedure characterization

  • Fix bogus error from assignment to CLASS(*)

  • Mark C_ASSOCIATED specific procedures as PURE

  • Catch bad OPEN(STATUS=) cases

  • Fold NEAREST() and its relatives

  • Prevent undefined behavior in character MAXLOC folding

  • Fix invalid overflow check

  • Skip D when including D debug line

  • Allow user to recover from bad edit descriptor with INTEGER

  • Fold instantiated PDT character component length when needed

  • Add one semantic check for allocatable/pointer argument association

  • [cmake] Make CMake copy “omp_lib.h” into the build directory

  • Handle dynamically optional argument in EXIT

  • Fix semantic analysis for “forall” targeted by “label”

  • Emit a portability warning for padding in COMMON

  • Expand the num_images test coverage

  • Fold IBITS() intrinsic function

  • Error handling for out-of-range CASE values

  • Respect left tab limit with Tn editing after ADVANCE=’NO’

  • Allow IMPLICIT NONE(EXTERNAL) with GenericDetails

  • Do not ICE on out-of-range data statement designator

  • Fix ICE for sqrt(0.0) evaluation

  • Fix float-number representation bug

  • Fix intrinsic interface for DIMAG/DCONJG

  • Improve appearance of message attachments

  • Fix combining cases of USE association & generic interfaces

  • Defer all function result type processing

  • Always encode multi-byte output in UTF-8

  • Fix shape analysis of RESHAPE result

  • Use full result range for clock_gettime implementation of SYSTEM_CLOCK

  • Correct interaction between generics and intrinsics

  • Make F0.1 output editing of zero edge case consistent

  • Inner INTRINSIC must not shadow host generic

  • Local generics must not shadow host-associated generics


  • Allow modification of construct entities

  • Defer NAMELIST group item name resolution

  • Accept TYPE(intrinsic type) in declarations only for non-extension type

  • Finer control over error recovery with GetExpr()

  • Handle parameter-dependent types in PDT initializers

  • Upgrade short actual character arguments to errors

  • Allow POINTER attribute statement on procedure interfaces

  • Accept KIND type parameter inquiries on RE, IM, etc.

  • Add & use a better visit()

  • Fix regression with recent work on intrinsic/generic interactions

  • Do not pass derived type by descriptor when not needed

  • Fix LBOUND() folding for constant arrays

  • Set LBOUND() folding for (x) expression as ones

  • Semantics limits on kP scale factors

  • Do not ICE on recursive function definition in function result

  • Fold transformational bessels when host runtime has bessels

  • Do not create arith.extui with same from/to type

  • Disambiguate F(X)=Y case where F is a function returning a pointer

  • Avoid global name conflict when BIND(C,NAME=) is used

  • Accept “INFINITY” as real input

  • Add semantic checks for intrinsic function REDUCE()

  • Fix crash from PDT component init in module file

Call notes are recorded and publicly available here.


Compiling stdlib with lfortran

Addition of ASR Optimization Passes





We are looking for new contributors. Please do not hesitate to contact us if you are interested. We will help you get up to speed.


  • We had our 25th Fortran Monthly call on April 22. You can watch the recording below:

  • Visual Studio Code’s popular Modern Fortran extension joined the fortran-lang GitHub organization.

Join and follow the Fortran Discourse to stay tuned with the future meetings.


我们感谢过去一个月为 fortran-lang 做出贡献的每个人,他们在以下任何存储库中发表评论: