Fortran newsletter: October 2021#

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

fortran-lang.org#

This month we’ve had several updates to the website:

  • #305: September newsletter draft

  • #300: Add QCxMS to package index

  • #302: Update Silverfrost compiler description.

  • #307: Fixed typo

  • #308: remove excess “mpi” tag from fortran2018-examples

  • #246: Transferring fortran90.org « Fortran Best Practices » into a mini-book

  • #314: grammar and spelling from issue #313

  • #317: more grammar, spelling, and rewording for Fortran Best Practices

  • #324: replaced « be found be found » with « be found »

  • #320: Alternative approach to avoiding integer division

  • #328: Add incompact3d to package index

  • #333: Add fparser to package index

  • #335: Adding two more packages to the index

  • #334: Add pFlogger to package index

  • #336: One more package

Work in progress#

  • #329 (WIP): Quantum Information book, WSL GUI, and typos

  • #201 (WIP): Draft: Internationalization for fortran-lang

Let us know if you have any suggestions for the website and its content. We welcome any new contributors to the website and the tutorials page in particular - see the contributor guide for how to get started.

Fortran Standard Library#

Here’s what’s new in stdlib:

  • #509: fixed typo

  • #503: refactor documentation regarding consistency

  • #511: Correctly set CMAKE_INSTALL_MODULEDIR cache variable

  • #513: Update issue templates

  • #523: Rename config.yaml -> config.yml

  • #508: github-ci: add fpm support

  • #475: Generating sorting subroutines specific to character type with fypp

  • #525: Add files generated by tests to gitignore

  • #529: Add maintainer entry to fpm manifest

  • #530: Make it clearer how the user can control compiler optimization

  • #528: Reduce redundancy caused by optional arguments

  • #3 (stdlib-cmake-example): Add example integration with test-drive

Work in progress#

  • #543 (WIP): Fix string concat

  • #539 (WIP): Add function gcd

  • #538 (WIP): Bump stdlib version to 0.1.0

  • #537 (WIP): Add a changelog for the current features of stdlib

  • #536 (WIP): Fix conversion warnings

  • #521 (WIP): Ensure module output directory is generated in configure stage

  • #520 (WIP): [stdlib_io] add disp(display your data).

  • #517 (WIP): adding SPEC_TEMPLATE.md #504

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

  • #500 (WIP): Selection algorithms

  • #499 (WIP): [stdlib_linalg] matrix property checks

  • #498 (WIP): [stdlib_math] add arg/argd/argpi

  • #494 (WIP): Add testing module to allow better structuring of test suites

  • #491 (WIP): Stdlib linked list

  • #488 (WIP): [stdlib_math] add is_close routines.

  • #473 (WIP): Error stop improvements

  • #455 (WIP): stdlib_hash: waterhash algorithm

  • #452 (WIP): Implementation of a map data type

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

  • #353 (WIP): Initial checkin for a module for tolerant comparison of reals

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

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

  • #276 (WIP): Probability Distribution and Statistical Functions – Exponential Distribution Module

  • #273 (WIP): Probability Distribution and Statistical Functions – Normal Distribution Module

  • #272 (WIP): Probability Distribution and Statistical Functions – Uniform Distribution Module

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

Please help improve stdlib by testing and reviewing pull requests!

The candidate for file system operations to be included in stdlib is being developed by @MarDiehl and @arjenmarkus in this repository. Please try it out and let us know how it works, if there are any issues, or if the API can be improved.

Fortran Package Manager#

Here’s what’s new in fpm:

  • #521: expand tabs

  • #557: Update installer script to update subprojects first

  • #558: Add issue templates

  • #565: Default branch renaming aftermath

  • #562: Add new distributions where fpm is available to README

  • #563: Add workflow to create single source fpm version

  • #564: Separate upload stage in CI testing

  • #572: Build no tests by default

  • #549: Allow setting, archiver, C compiler flags and linker flags from commandline

  • #578: help text was truncated

  • #579: Fix dir not getting removed after testing fpm

  • #584: Actually read environment variables

Work in progress#

  • #575 (WIP): Enable multiple build output directories

  • #569 (WIP): Add workflow for continuous delivery

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

  • #498 (WIP): Compiler flags profiles

fpm is still in early development and we need as much help as we can get. Here’s how you can help today:

  • 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.

  • Browse existing fpm packages on the fortran-lang website

  • Browse the open issues and see if you can help implement any fixes or features.

  • Adapt your Fortran package for fpm and submit it to the Registry.

  • Improve the documentation.

The short-term goal of fpm is to make development and installation of Fortran packages with dependencies easier. Its long term goal is to build a rich and decentralized ecosystem of Fortran packages and create a healthy environment in which new open source Fortran projects are created and published with ease.

Compilers#

Flang#

Recent development updates:

  • New Driver and CMake integration:

    • flang-omp-report plugin - first full fledged frontend plugin has been contributed

    • CMake integration - waiting on a new PR

    • Code-generation work is ongoing - task list has been presented to the community for discussion and approval

  • FIR (Fortran IR - a dialect of MLIR):

    • Fortran 95 lowering and runtime support is nearing completion

    • Code upstreaming has begun again

  • OpenMP

    • Merged: Critical, collapse clause, Fixes for SNAP.

    • In review: Firstprivate, Ordered, MLIR definitions for a few target side constructs, semantic checks for atomic, critical, sections, simd

    • OpenMP 5.0 metadirective

  • Runtime

    • Change complex type define in runtime for clang-cl

    • Implement READ(SIZE=) and INQUIRE(IOLENGTH=) in runtime

    • GET_COMMAND_ARGUMENT runtime implementation, handling the LENGTH, VALUE, STATUS and ERRMSG parameters.

    • COMMAND_ARGUMENT_COUNT runtime implementation

    • Add POSIX implementation for SYSTEM_CLOCK

    • Fix WRITE after BACKSPACE on variable-length file

    • Implement Posix version of DATE_AND_TIME runtime

  • Ported test scripts to Python, enables testing on Windows

  • More precise checks for NULL() operands

  • Enforce array conformance in actual arguments to ELEMENTALs

  • Constant folding for COUNT, SQRT, HYPOT, CABS, CSHIFT, EOSHIFT, PACK, UNPACK, and TRANSPOSE

  • Make this_image() an intrinsic function

  • Revamp C1502 checking of END INTERFACE [generic-spec]

  • Accept SIZE(assumed-rank, DIM=n)

  • Validate SIZE(x,DIM=n) dimension for assumed-size array x

  • Catch errors with intrinsic array inquiry functions

  • Correct overflow detection in folding of real->integer conversions

  • Upgrade warning to error in case of PURE procedure

  • Enforce fixed form rules about END continuation

  • Enforce specification function rules on callee, not call

  • Catch error: base of DATA statement object can’t be a pointer

  • Represent parentheses around derived types

  • Enforce constraint: defined ass’t in WHERE must be elemental

  • Catch branching into FORALL/WHERE constructs

  • Implement semantic checks for ELEMENTAL subprograms

  • Signal EOR in non advancing IO and move to next record

  • Extension: reduced scope for some implied DO loop indices

  • Take result length into account in ApplyElementwise folding

  • Apply double precision KindCode in specific proc interface

Call notes are recorded and available upon request here. Please contact Alexis Perry-Holby at aperry@lanl.gov for document access.

LFortran#

  • 81 merged Merge Requests in September 2021

  • LFortran Minimum Viable Product (MVP) released

  • LFortran 0.13.0, 0.13.1 and 0.14.0 released in September

  • The following people have contributed code to LFortran in September:

    • Ondřej Čertík

    • Gagandeep Singh

    • Carlos Une

    • Thirumalai Shaktivel

    • Harris M. Snyder

    • Sebastian Ehlert

    • Mengjia Lyu

  • Many people have reported bugs (thank you all!)

  • Main features implemented in September:

    • Operator overloading (ASR, LLVM)

    • Goto (ASR, LLVM)

    • Runtime library improvements: iand, len, trim, len_trim

    • Interactive mode: get complex numbers, intrinsic functions working (Windows, macOS, Linux)

    • New driver options: –fast, –symtab-only, –target

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.

Events#

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

  • The second international Fortran Conference (FortranCon) 2021 was held virtually on September 23-24 Video recordings of the talks will be made available soon. For more information, visit the FortranCon website.

As usual, subscribe to the mailing list and/or join the Discourse to stay tuned with the future meetings.

Contributors#

We thank everybody who contributed to fortran-lang in the past month by commenting in any of these repositories: