Dear Chapel community –
We’re proud to announce the release of Chapel version 1.23!
Perhaps the most exciting news about this release is that it does not significantly redefine core language features as the last several releases have. We’ve improved the language in several ways such as:
- addressing some long-term point-of-instantiation issues
- making improvements to accessing modules via
use
andimport
- improving support for split initialization and array initialization
- making
in
,out
, andinout
intents work better
But for the most part these changes address cases that weren’t working as intended, and most existing programs should continue to work as they have (but please let us know if that’s not the case!).
This release continues our recent efforts to clamp down on standard module symbols that were incorrectly made available without a use
or import
of that module. As a result, programs which make use of interoperability features like c_ptr
, c_int
, or c_float
may not compile until the appropriate module is added to its use
/import
list.
In terms of libraries:
- new Heap and OrderedSet modules add support for those data types
- a new Version module permits users to reason about the version of
chpl
used to compile their code, or to store and compare version numbers within module code - the LinearAlgebra module received several improvements in this release
- the main collection types
list
,set
, andmap
) improved in terms of their orthogonality and interfaces
The mason
package manager received significant improvements in this release, including:
- interactive modes for
mason new
andmason init
- improved ergonomics for
mason search
,test
,build
, andpublish
-
bash
completion support.
Chapel 1.23 contains several performance enhancements such as:
- a new optimization that automatically reduces the cost of array accesses within loops when the compiler can determine that the loop iterations and indices are aligned in their distributions.
- parallelization improvements for large array assignments and initializations
- reductions in bookkeeping overhead for declaring arrays, particularly for those over
const
domains - speed improvements for sets, maps, and associative arrays/domains
In addition, compilation times have improved significantly for programs using certain patterns, such as formatted I/O.
Chapel 1.23 also contains:
- initial support for using Chapel with Google Protocol Buffers
- significant portability and performance improvements when using
ofi
-based communication - improvements to the LLVM-based back-end
- improvements in terms of memory fragmentation and leaks
For a more complete list of changes, including pointers to supporting documentation, please refer to CHANGES.md.
To download and install the release, see: https://chapel-lang.org/download.html (note that, at the time of this writing, we’re still waiting for the Mac homebrew formula to be updated).
And for a list of everyone who contributed to Chapel 1.23, please refer to CONTRIBUTORS.md. We’d particularly like to acknowledge our Google Summer of Code 2020 students, who contributed several of the notable improvements above, including those to the libraries and mason
, as well as the newly added protobuf
support. Thanks Ankush, Rahul, Aniket (@Aniket21mathur), and Yujia! And thanks also to our external GSoC mentors, Garvit and Krishna, and to the Google Summer of Code program itself for supporting these efforts.
As always, we’re interested in feedback on how we can make the Chapel language, implementation, libraries, and tools more useful to you and your work.
On behalf of the Chapel project,
-Brad Chamberlain