Fortran newsletter: March 2022#
Welcome to the March 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#
Here’s what’s new in the fortran-lang.org repo:
Work in progress#
#347 (WIP): Fortran Intrinsics
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:
#624: [stdlib_math] Minor update to
stdlib_math
module and document
Work in progress#
#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 SPEC_TEMPLATE.md #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!
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:
#652: get user name and email using git config if available else use defaults
#654: Ignore hidden source files
#622: Cleanup the backend output
#648: Add note about relocation of manifest reference
fpm-docs#42: Dutch translation
fpm-docs#48: Chinese translation improvements
fpm-docs#52: Update plugin tutorial
Work in progress#
#665 (WIP): add clean command
#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-docs#51 (WIP): Add page about fpm logo
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:
FIR
Initial lowering for empty program
Upstream partial lowering of COMMAND_ARGUMENT_COUNT intrinsic
Add lowering placeholders
Add lowering for basic empty SUBROUTINE
Upstream partial lowering of EXIT intrinsic
Lower basic STOP statement
Lower PAUSE statement
Add lowering for integer constant
Lower integer constant code for STOP stmt
Add fir.array_access op
Add fir.array_amend operation definition
Handle logical constant value for quiet in STOP stmt
Upstream partial lowering of GET_COMMAND_ARGUMENT intrinsic
Basic local variable lowering
Add lowering for ASCII character constant
Handle character constant for error code in STOP stmt
Upstream partial lowering of GET_ENVIRONMENT_VARIABLE intrinsic
Add missing CFI case for REAL and COMPLEX
Add support for lowering the goto statement
Add type conversion for !fir.box
Add FIRInlinerInterface
Lower simple RETURN statement
Upstream fix to allocmem codegen to deal with missing dimensions for sequence of character types
Lower basic function with scalar integer/logical return value
Enable scalar real type in lowering
Enable complex type in function lowering
Handle lowering of ranked array
Lower simple scalar assignment
Lower scalar negation
Lower basic binary operation for scalars
Initial patch to lower a Fortran intrinsic
Lower real constant
Lower complex constant
Lower function and subroutine calls
Handle allocatable dummy arguments
Lower allocatable assignment for scalar
Simple array assignment lowering
Lower simple character return
Lower Fortran intrinsic to a runtime call/llvm intrinsic
Lower integer comparison operation
Lower real comparison operations
Lower logical comparison and logical operations
Lower power operations
Add complex operations lowering tests
Lower basic IO statement
Handle dynamic array lowering
Driver
Add support for
-emit-mlir
Add support for
-emit-llvm
Make
flang-new
always generate run-time type infoAdd support for
--target
/--triple
OpenMP
Added OpenMP 5.0 specification based semantic checks for atomic update construct
The device expression must evaluate to a non-negative integer value
Remove clauses from OpenMP Dialect that are handled by the flang frontend instead:
private, firstprivate, lastprivate, shared, default, copyin, copyprivate
Runtime
Implement a runtime routine to report fatal errors with source position
Rename the runtime routine that reports a fatal user error
runtime perf: larger I/O buffer growth increments
Add runtime interface for GET_COMMAND
Upstream runtime changes for inquiry intrinsics
Improve error message (initialized variable in pure subprogram)
Accept BOZ literals for some actual arguments
Accept sparse argument keyword names for MAX/MIN
Accept INDEX(…, BACK=array)
Fix OPEN/WRITE(SIGN=”SUPPRESS”)
Handle FLUSH(unknown unit)
Allow explicit “+” in NAMELIST input subscripts
Extension: skip over NAMELIST groups
Add array operations documentation
Fix crash from USE-associated defined I/O subprograms
Allow INQUIRE() on a child unit in user-defined I/O procedure
Don’t drop format string for external child I/O
Support DECIMAL=”COMMA” mode in namelist I/O
Update tco tool pipline and add translation to LLVM IR
Add MemoryAllocation pass to the pipeline
Add ieee_is_normal/ieee_is_negative to ieee_arithmetic module.
Add a custom target for the « flang » wrapper script.
split character procedure arguments in target-rewrite pass
Expand the semantics test for co_sum
Correct interpretation of RECL=
Distinguish intrinsic from non-intrinsic modules
Make NEWUNIT= use a range suitable for INTEGER(KIND=1) and recycle unit numbers
Modify right modes for READ/WRITE vs OPEN
Add a semantics test for co_broadcast
catch implicit interface incompatibility with global scope symbol
Add an assert to guard against nullptr dereferencing
Fix FlangOptimizerTests link on Solaris
Handle « type(foo) function f » when foo is defined in f
Refine pointer/target test for ASSOCIATED intrinsic
Allow mixed association of procedure pointers and targets
Fix edge case in USE-associated generics
Fail at link time if derived type descriptors were not generated
Allow for deferred-length character in EstablishDescriptor
Allow DATA initialization of derived types w/ allocatable components
Accept NULL(mold=x) as constant component value in constant structure constructor
Ensure a characterized ENTRY in a PURE subprogram is also marked PURE
Accept structure constructor value for polymorphic component
Remove deprecated parser/printer/verifier utilities
Accept pointer assignment w/ remapping to function result
Allow extension cases of EQUIVALENCE with optional warnings
Handle CALL C_F_POINTER(without SHAPE=)
Make source location more accurate for actual arguments
Add Win32 to the list of supported triples
Allow tabs as white space in formats
Do not print format tabs
Catch I/O of bad derived type at compile time
Allow more concurrently open NEWUNIT= values, with recycling
Call notes are recorded and available upon request here. Please contact Alexis Perry-Holby at aperry@lanl.gov for document access.
LFortran#
LFortran is participating in GSoC, please see GSoC 2022 Student Instructions for LFortran for instructions how to apply
19 Merge Requests merged
New ASR optimizations
Addes support for fma (fused-multiply add) in LLVM
Semantic improves to compile more of stdlib
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#
Fortran-lang has been selected as a mentoring organization for Google Summer of Code 2022! Thanks to everybody who helped prepare the application. GSoC is Google’s global, online program that allows newcomers to open-source to work on a project and get paid for it. See the Fortran-lang GSoC 2022 page for information about the projects and how to apply. Applications for contributors open April 4 and close April 19. To learn more about GSoC and what has changed since last year, please see the GSoC 2022 announcement. If you’d like to participate as a contributor or a mentor, please let us know in this thread and we’ll help you get started.
Fortran-lang community now maintains a modernized fork of the classic library minpack. Give it a try!
We had our 23rd Fortran Monthly call on February 15. You can watch the recording below:
US Fortran Standards Committee meeting #226 started on February 28. See the draft agenda here and the submitted papers here.
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: