Fortran newsletter: April 2021

Welcome to the April 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:

  • #229: Correct value of pi in quickstart mini-book

  • #226: Added DelaunaySparse to package list

  • #223 #225: GSoC announcement

  • #222: Avoid unclear formulation in contributing guide

  • #221: Add information about free compiler versions

  • #216: Improve tags

  • #207: Correct subtitle of setting up your os

Ongoing work:

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

  • #220 (WIP): Include learn resources to online courses

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:

  • #320: Implement non-fancy functional string type

  • #362: Fix wording in style guide for dimension attribute

  • #352: Added TOC to README

  • #346 #356: Added to_lower, to_upper, reverse and to_title function to stdlib_string_type module

Work in progress:

  • #189 (WIP): Initial implementation of sparse matrices.

  • #272 (WIP), #273 (WIP), #276 (WIP), #278 (WIP): Implementation of the stdlib_stats_distribution modules. It provides probability distribution and statistical functions.

  • #311 (WIP): Implementation of a module for handling lists of strings

  • #313 (WIP): Legendre polynomials and Gaussian quadrature

  • #333 (WIP): Provide abstract base class for a string object

  • #336 (WIP): Add functions to convert integer/logical values to character values

  • #343 (WIP): Implement strip and chomp as supplement to trim

  • #349 (WIP): Simplify test makefile

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

  • #355 (WIP): Implement clip function

  • #359 (WIP): Add general contributing guidelines to stdlib

  • #360 (WIP): Summarize build toolchain workflow and implied rules

  • #363 (WIP): Add sort to stdlib_string_type module

  • #367 (WIP): Add Intel compiler workflow for OSX

Please help improve stdlib by testing and reviewing these 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:

  • Alpha release version 0.2.0

  • Fpm is now available on conda-forge

  • #352: Hacky fix for the help test

  • #357: Install script for Fortran fpm

  • #369: Separate build targets from model structure

  • #370: Update run subcommand

  • #377: Add explicit include-dir key to manifest

  • #378: Add ford-compatible documentation to fpm_strings.f90

  • #386: Replace deprecated flags in debug_fortran option

  • #390 #407: Implement –flag option for Fortran fpm

  • #397: Add Conda install instructions to the README

  • #398: Minor fix: for setting executable link libraries

  • #402: Add fpm description and reorganize the README intro

  • #404: Correct join for null input

  • #409: Give Programs Access to Code in Subdirectories

  • #414: Add few important links to README

  • #412: Duplicate module definitions

  • #413: Add: omp_lib to intrinsic modules list

  • #419: Split workflow for Haskell and Fortran fpm

Work in progress:

  • First beta release (WIP): First feature-complete release of the Fortran implementation.

  • #364 (WIP): Plugin alpha version

  • #420 (WIP): Phase out Haskell fpm

  • fpm-haskell (WIP): Separate repository for the Haskell fpm version

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

LLVM Flang

Recent development updates:

  • New Driver:

    • Add options for -fdefault* and -flarge-sizes

    • Refine tests for module search directories

    • Add -fdebug-dump-parsing-log

    • Add -fdebug-module-writer option

    • Add debug dump, measure-parse-tree and pre-fir-tree options

    • Add -Xflang and make -test-io a frontend-only flang

    • Add -J and -module-dir to f18 driver

    • Fix -fdefault* family bug

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

    • Add diagnostic tests for FIR ops verifier

    • Add FIR Types parser diagnostic tests

    • Upstream the pre-FIR tree changes (The PFT has been updated to support Fortran 77)

    • Update flang test tool support classes

    • Add zero_bits, array value, and other operations

    • Upstream utility function valueHasFirAttribute() to be used in subsequent merges

  • OpenMP - add semantic checks for:

    • OpenMP 4.5 - 2.7.1 Do Loop restrictions for Threadprivate

    • Occurrence of multiple list items in aligned clause for simd directive

    • Flang OpenMP 4.5 - 2.15.3.6 Reduction clause

    • 2.15.4.2 - Copyprivate clause

    • 2.15.3.4 - Firstprivate clause

    • 2.15.3.5 - Lastprivate clause

  • Update character tests to use gtest

  • Adaptations to MLIR API changes

  • Fix call to CHECK() on overriding an erroneous type-bound procedure

  • Handle type-bound procedures with alternate returns

  • Runtime: implement INDEX intrinsic function

  • Fix compilation on MinGW-w64

  • Extension: forward refs to dummy args under IMPLICIT NONE

  • Detect circularly defined interfaces of procedures

  • Implement the related character intrinsic functions SCAN and VERIFY

Call notes will be sent to the flang-dev email list and also recorded here.

LFortran

LFortran is still in pre-alpha stage, but we are making rapid progress towards getting it to compile more Fortran features. We are looking for contributors, if you are interested, please get in touch and we will help you get started. We can be contacted at Zulip Chat, mailinglist or GitLab issues (see https://lfortran.org for links to all three).

Events

  • We had our 10th Fortran Monthly call on March 24. You can watch the recording below:

  • This year Fortran-lang is a mentor organization for Google Summer of Code. If you’re a student, or know students who are eligible to participate, and you’d like to help build the Fortran ecosystem please reach out and let us know. The student application window opened on March 29 and will close on April 13 at 14:00 Eastern Time.

  • The 223rd meeting of the US Fortran Standards Committee concluded on March 2. Main topics of dicussion were the planned changes for the Fortran 202X revision of the Standard. Here’s the list of all submitted papers, and the summary of the papers discussed and voting results. The committee also welcomed a new member, Milan Curcic (@milancurcic), who is the voting alternate to Gary Klimowicz (@gklimowicz).

    If you have ideas for new improvements to the language, please propose them here.

  • Registration is open for the upcoming free webinar on Fortran for High Performance Computing. The webinar is organized by Excellerat and will be presented by Wadud Miah (@wadudmiah) from the University of Southampton.

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