Skip to content

Commit 81ed449

Browse files
authored
CHANGES.md updates for Chapel 2.4 (#26834)
[reviewed by @arezaii] These are the major changes made for Chapel 2.4. Thanks to everyone who contributed!
2 parents 4c99d9e + 088ab40 commit 81ed449

File tree

1 file changed

+349
-7
lines changed

1 file changed

+349
-7
lines changed

CHANGES.md

+349-7
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,356 @@
11
Release Changes List
22
====================
33

4-
version 2.3.1
5-
=============
4+
version 2.4
5+
===========
6+
7+
released March 20, 2025
8+
9+
Highlights (see subsequent sections for further details)
10+
--------------------------------------------------------
11+
* significantly improved the features and ergonomics of the `Python` module
12+
* improved parallel iteration and zippering over standard `set` and `map` types
13+
* added support for multi-dimensional array literals like `[11, 12; 21, 22]`
14+
* added the ability to query the number of co-locales running on a node
15+
* added support for building Chapel projects with CMake
16+
* added custom settings, location-based rules, and docs to the linter
17+
* improved the 'dyno' compiler front-end's ability to resolve types and values
18+
* significantly revamped the Chapel website at https://chapel-lang.org/
19+
* made many other improvements in terms of bug fixes, errors, docs, etc.
20+
21+
Updates to Chapel Prerequisites
22+
-------------------------------
23+
* raised the minimum version of Clang required to build Chapel to 11.0
24+
(see https://chapel-lang.org/docs/2.4/usingchapel/prereqs.html)
25+
26+
New Language Features
27+
---------------------
28+
* added support for multi-dimensional array literals
29+
(e.g., `[1.2, 3.4; 5.6, 7.8]` creates a 2x2 array value
30+
see https://chapel-lang.org/docs/2.4/language/spec/arrays.html#rectangular-array-literals)
31+
* added the ability to cast arrays to array types of the same size / shape
32+
(e.g., `[1.2, 3.4, 5.6]: [1..6 by 2] real(32)` is now supported)
33+
* added `locale.numColocales` to query the number of co-locales on a node
34+
(see https://chapel-lang.org/docs/2.4/language/spec/locales.html#ChapelLocale.locale.numColocales)
635

7-
released February 7, 2025
36+
Language Feature Improvements
37+
-----------------------------
38+
* added initial support for throwing `postinit()` procedures
39+
(see https://chapel-lang.org/docs/2.4/technotes/throwingInit.html#declaring-throwing-initializers)
40+
41+
Deprecated / Unstable / Removed Language Features
42+
-------------------------------------------------
43+
* removed support for the deprecated `lambda` keyword
44+
* removed support for the deprecated `object` and `c_string` types
45+
* removed the deprecated `chpl_task_yield()` procedure
46+
* removed the deprecated `newSliceRule` config param
47+
48+
New Standard Library Features
49+
-----------------------------
50+
* added an optional `sep` argument to `[fileWriter.]write[ln]()` in `IO`
51+
(see https://chapel-lang.org/docs/2.4/modules/standard/IO.html#IO.fileWriter.write
52+
and https://chapel-lang.org/docs/2.4/modules/standard/IO.html#IO.write)
53+
* added `timeDelta.total[Milli|Micro]seconds()` to the `Time` module
54+
(see https://chapel-lang.org/docs/2.4/modules/standard/Time.html#Time.timeDelta.totalMilliseconds)
55+
* added `heap.clear()` to the `Heap` module
56+
(see https://chapel-lang.org/docs/2.4/modules/standard/Heap.html#Heap.heap.clear)
57+
* added support for C's `wchar_t` type in `CTypes`, named `c_wchar_t`
58+
(see https://chapel-lang.org/docs/2.4/modules/standard/CTypes.html#CTypes.c_wchar_t)
59+
60+
Changes / Feature Improvements in Standard Libraries
61+
----------------------------------------------------
62+
* improved iterators on `set`s to support zippering with other sets and types
63+
(see https://chapel-lang.org/docs/2.4/modules/standard/Set.html#Set.set.these)
64+
* added support for `forall` loops over `map.keys()` and `map.values()`
65+
(see https://chapel-lang.org/docs/2.4/modules/standard/Map.html#Map.map.keys
66+
and https://chapel-lang.org/docs/2.4/modules/standard/Map.html#Map.map.values)
67+
* added a `fileReader.extractMatch()` overload that returns a value to `IO`
68+
(see https://chapel-lang.org/docs/2.4/modules/standard/IO/FormattedIO.html#FormattedIO.fileReader.extractMatch)
69+
* extended `CTypes.c_addrOf[Const]()` to accept domains and distributed arrays
70+
71+
New Package Module Features
72+
---------------------------
73+
* added support for importing Python code declared as a string
74+
(see https://chapel-lang.org/docs/2.4/modules/packages/Python.html#Python.Interpreter.importModule)
75+
* added support for loading Python code from a Python pickle
76+
(see https://chapel-lang.org/docs/2.4/modules/packages/Python.html#Python.Interpreter.load)
77+
* added the ability to pass Chapel arrays to Python without copying
78+
(see https://chapel-lang.org/docs/2.4/modules/packages/Python.html#Python.Array)
79+
* added the ability to use Python arrays from within Chapel without copying
80+
(see https://chapel-lang.org/docs/2.4/modules/packages/Python.html#Python.PyArray)
81+
* added support for using Python `list`, `dict`, and `set` types in Chapel
82+
(see https://chapel-lang.org/docs/2.4/modules/packages/Python.html#Python.PyList,
83+
https://chapel-lang.org/docs/2.4/modules/packages/Python.html#Python.PyDict,
84+
and https://chapel-lang.org/docs/2.4/modules/packages/Python.html#Python.PySet)
85+
* added an option to turn off `Python` module error handling for performance
86+
(see https://chapel-lang.org/docs/2.4/modules/packages/Python.html#Python.checkExceptions)
87+
* added a `victimPolicy` enum to `DistributedBag` and its `.remove()` method
88+
(see https://chapel-lang.org/docs/2.4/modules/packages/DistributedBag.html#DistributedBag.victimPolicy
89+
and https://chapel-lang.org/docs/2.4/modules/packages/DistributedBag.html#DistributedBag.DistributedBagImpl.remove)
90+
91+
Changes / Feature Improvements in Package Modules
92+
-------------------------------------------------
93+
* improved the `Python` module's API in several ways:
94+
- added a new `Value` superclass from which many other classes derive
95+
(see https://chapel-lang.org/docs/2.4/modules/packages/Python.html#Python.Value)
96+
- used the new `Value` class to simplify other Python objects' interfaces
97+
- removed the `ClassObject` class in favor of `Value`
98+
- added new method-based replacements for the previous object-based API
99+
(e.g., `new Function(mod, 'foo')` can now be written `mod.get('foo')`)
100+
- allowed omitting the return type on certain Python operations
101+
(e.g., `val.get(owned Value, "xyz")` can now be written `val.get("xyz")`)
102+
* added a Python `Interpreter.flush()` method to flush standard streams
103+
(see https://chapel-lang.org/docs/2.4/modules/packages/Python.html#Python.Interpreter.flush)
104+
* improved the `Python` module's integration with Chapel's threading model
105+
* improved the `Python` module's reference counting
106+
* adjusted `CopyAggregation`'s flush methods to optionally free the buffers
107+
(see https://chapel-lang.org/docs/2.4/modules/packages/CopyAggregation.html#CopyAggregation.DstAggregator.flush)
108+
* added `ref` intents to `.flush()` in `CopyAggregation` to avoid warnings
109+
(see https://chapel-lang.org/docs/2.4/modules/packages/CopyAggregation.html#CopyAggregation.DstAggregator.flush)
110+
111+
Deprecated / Unstable / Removed Library Features
112+
------------------------------------------------
113+
* deprecated the `HDFS` module
114+
(see https://chapel-lang.org/docs/2.4/modules/packages/HDFS.html)
115+
* removed deprecated `imag`->`complex` trig routines in the `Math` module
116+
* removed methods on `map` that had previously been deprecated in `Map`
117+
* removed deprecated features from the `Version` module
118+
* removed deprecated `CTypes` capabilities, like `c_void_ptr`
119+
* removed deprecated `CodepointSplittingError` from the `Errors` module
120+
* removed deprecated routines from the `MemMove` module
121+
122+
Tool Improvements
123+
-----------------
124+
* added support for building Chapel projects with CMake
125+
(see https://chapel-lang.org/docs/2.4/usingchapel/compiling.html#cmake)
126+
* added support for creating linter rules with custom settings
127+
(see https://chapel-lang.org/docs/2.4/tools/chplcheck/chplcheck.html#rule-specific-settings)
128+
* added support for text-location-only-based linter rules
129+
(see https://chapel-lang.org/docs/2.4/tools/chplcheck/chplcheck.html#location-rules)
130+
* added a new 'LineLength' linter rule
131+
(see https://chapel-lang.org/docs/2.4/tools/chplcheck/chplcheck.html#linelength)
132+
* allowed a single `chapel-py` build to be used with many Python versions
133+
* `chplvis` now relies on a system install of `fltk` rather than bundling it
134+
(see https://chapel-lang.org/docs/2.4/tools/chplvis/chplvis.html#setup)
135+
136+
Documentation Improvements
137+
--------------------------
138+
* updated URLs in the documentation to reflect the new website's organization
139+
* refreshed the list of actively tested GPU configurations
140+
(see https://chapel-lang.org/docs/2.4/technotes/gpu.html#tested-configurations)
141+
* added a section to the GPU tech note about halting from GPU kernels
142+
(see https://chapel-lang.org/docs/2.4/technotes/gpu.html#gpu-based-halting)
143+
* added missing documentation for Slurm launcher flags and environment vars
144+
(see https://chapel-lang.org/docs/2.4/usingchapel/launcher.html#using-slurm)
145+
* added documentation clarifying uses of GASNet with InfiniBand and Omni-Path
146+
(see https://chapel-lang.org/docs/2.4/platforms/infiniband.html#selecting-a-spawner
147+
and https://chapel-lang.org/docs/2.4/platforms/omnipath.html#selecting-a-spawner)
148+
* updated the UDP docs to mention a case where `CHPL_RT_MASTERIP` can help
149+
(see https://chapel-lang.org/docs/2.4/platforms/udp.html#i-get-worker-failed-dnslookup-on-master-host-name-error-messages)
150+
* fixed a bug in which `ChapelSysCTypes` was documented twice
151+
* made numerous other minor changes, fixes, and improvements to documentation
152+
153+
Language Specification Improvements
154+
-----------------------------------
155+
* rewrote some examples in the spec to avoid an undesirable busy-wait loop
156+
(see https://chapel-lang.org/docs/2.4/language/spec/memory-consistency-model.html#examples)
157+
* updated sample code in the 'Types' chapter to be more inclusive
158+
* removed documentation for no-longer-supported type comparisons like `<=`
159+
160+
Documentation Improvements for Libraries
161+
----------------------------------------
162+
* clarified documentation for `IO.file.init()`
163+
(see https://chapel-lang.org/docs/2.4/modules/standard/IO.html#IO.file.init)
164+
165+
Documentation Improvements for Tools
166+
------------------------------------
167+
* added documentation for `chplcheck` linter rules
168+
(see https://chapel-lang.org/docs/2.4/tools/chplcheck/chplcheck.html#current-rules)
169+
* clarified build requirements for `chapel-py`
170+
(see https://chapel-lang.org/docs/2.4/tools/chapel-py/chapel-py.html#installation)
171+
172+
Platform-Specific Documentation Improvements
173+
--------------------------------------------
174+
* updated documentation on binary packages for WSL
175+
(see https://chapel-lang.org/docs/2.4/platforms/windows.html)
176+
177+
Example Codes
178+
-------------
179+
* updated the HPCC benchmarks to compute good problem sizes for co-locales
180+
(see `$CHPL_HOME/examples/benchmarks/hpcc/HPCCProblemSize.chpl`)
181+
182+
Performance Optimizations / Improvements
183+
----------------------------------------
184+
* extended the array view elision optimization to arrays of distinct types
185+
(e.g. `LocalArr[x..y] = DistArr[z..t]` is now optimized)
186+
* removed unnecessary checks in `Math.log2()` when `--no-checks` is used
187+
188+
Updates to Chapel's Release Formats
189+
-----------------------------------
190+
* updated our Dockerfile to use default dependency versions/the latest base OS
191+
192+
Configuration / Build Changes
193+
-----------------------------
194+
* moved warnings from `printchplenv` to the end of its output for clarity
195+
* renamed `CHPL_MEM` to `CHPL_TARGET_MEM`
196+
(see https://chapel-lang.org/docs/2.4/usingchapel/chplenv.html#chpl-mem)
197+
* added checking that `CHPL_UNWIND` is set to a valid value
198+
* added the ability to infer `CHPL_LLVM_GCC_INSTALL_DIR` when needed
199+
(see https://chapel-lang.org/docs/2.4/usingchapel/chplenv.html#chpl-llvm-gcc-install-dir)
8200

9-
This version is an update to the 2.3 release to address a build issue
10-
that can sometimes arise when a system has multiple versions of LLVM
11-
installed.
201+
GPU Computing
202+
-------------
203+
* removed support for CUDA versions older than 11.7
204+
205+
Portability / Platform-specific Improvements
206+
--------------------------------------------
207+
* fixed a compilation error about missing `inet_aton()` on FreeBSD 13 and 14
208+
* improved the `Python` module's handling of the system Python environment
209+
210+
Compiler Flags
211+
--------------
212+
* changed the `--mem` flag to `--target-mem` to match `CHPL_TARGET_MEM`
213+
214+
Error Messages / Semantic Checks
215+
--------------------------------
216+
* improved error messages for out-of-bounds accesses to tuple elements
217+
* improved and added detailed error messages for use-before-definition errors
218+
* added specialized error messages for defining a variable in terms of itself
219+
* improved error messages reported by the `Sort` module for unsupported types
220+
221+
Runtime Library Improvements
222+
----------------------------
223+
* updated the runtime for `CHPL_COMM=ofi` to support libfabric 2.x
224+
* increased the default/max number of threads supported by `CHPL_COMM=gasnet`
225+
* added a warning when `CHPL_COMM` reduces the # of threads below `maxTaskPar`
226+
227+
Third-Party Software Changes
228+
----------------------------
229+
* updated the bundled version of GASNet to GASNet-2025.2.0-snapshot
230+
* applied a performance fix to the bundled version of Qthreads
231+
* removed the bundled copy of `fltk` due to portability/maintenance challenges
232+
233+
Bug Fixes
234+
---------
235+
* fixed an issue where variables of `extern` types were not default initialized
236+
* fixed an internal error for `extern` return types in multilocale programs
237+
* fixed an internal error when erroneously writing `super.init` twice
238+
* fixed an internal error when assigning a type to a value
239+
* fixed a bug permitting `range` type args to be used before they were defined
240+
* fixed a bug in which `nothing` tuples were not properly cleaned up
241+
* fixed arbitrary-length args and dependency paths in the compiler and runtime
242+
* removed an extraneous error when using `--no-ieee-float` with the C backend
243+
244+
Bug Fixes for Libraries
245+
-----------------------
246+
* fixed various issues with `BigInteger` on 32-bit platforms
247+
* fixed an ABI incompatibility bug between the `GMP` module and LLVM
248+
* fixed a bug preventing `map`s to be passed into `const ref` formals
249+
* fixed a bug with `distBag.addBulk()` when the input was not 0-based
250+
* fixed a free of a non-allocated address in the `CopyAggregation` module
251+
* fixed a bug with `MemDiagnostics.allocations()` on 32-bit systems
252+
* partially fixed a bug with catching errors thrown from `fromJson`
253+
* fixed the handling of comments inside arrays for the `TOML` package
254+
* fixed a bug causing hangs in some `Socket` module functions
255+
* fixed a bug to be able to pass `real`s as timeouts in `Socket` subroutines
256+
257+
Bug Fixes for GPU Computing
258+
---------------------------
259+
* fixed the use of `make check` with the GPU locale model
260+
* fixed an assertion failure when using `CHPL_GPU=amd`
261+
262+
Bug Fixes for Tools
263+
-------------------
264+
* fixed the wrong linter sometimes being used when run with the language server
265+
* fixed name-based linting for `extern` symbols
266+
* fixed incorrect linter warnings for unused tuple unpacks
267+
* fixed the linter's textual locations for various statement types and rules
268+
* fixed a bug where a bad `RPATH` could be embedded in the `chapel-py` library
269+
* fixed an issue with extra arguments passed to `c2chapel` on MacOS
270+
* fixed `mason test` for prefix-based installs
271+
272+
Bug Fixes for Build Issues
273+
--------------------------
274+
* fixed LLVM path deduction logic when multiple LLVM versions are installed
275+
* avoided overriding the default sysroot when using a system version of Clang
276+
* fixed `CHPL_DEVELOPER` not being respected when set to a falsy value
277+
* squashed `pathchk` error output from `./configure` commands
278+
279+
Bug Fixes for the Runtime
280+
-------------------------
281+
* fixed a seg fault when using `CHPL_TASKS=fifo` with `CHPL_COMM=gasnet`
282+
* fixed a bug with the `CHPL_LAUNCHER_USE_SBATCH` implementation
283+
* fixed a bug where Slurm-based launchers didn't preserve quoted string args
284+
* fixed a bug with temporary filenames in PBS-based launchers
285+
* fixed a bug in message buffer management for `CHPL_COMM=ofi`
286+
287+
Developer-oriented changes: Documentation
288+
-----------------------------------------
289+
* updated the instructions for building the Chapel CI Docker image
290+
291+
Developer-oriented changes: Module changes
292+
------------------------------------------
293+
* used the new `Value` class to clean up the `Python` module's implementation
294+
* added a `CTypes` module when using minimal modules, enabling C interop
295+
296+
Developer-oriented changes: Makefile / Build-time changes
297+
---------------------------------------------------------
298+
* added scripts to update the Chapel version numbers in files that store them
299+
* fixed a developer build issue with GCC 14 with C++ template arguments
300+
* avoided spurious build warnings with MPICH 4 and GCC 12 when `WARNINGS=1`
301+
* fixed documentation builds in dirty source trees for `chapel-py`
302+
* added support for building a subset of LLVM targets
303+
* added support for setting `CHPL_PYTHON` to switch Python versions
304+
305+
Developer-oriented changes: Compiler improvements / changes
306+
-----------------------------------------------------------
307+
* updated compiler paths from using fixed buffers to arbitrary-length strings
308+
* removed warnings for 1.32 behavior changes in `chpl_comm_{get,put}()` prims
309+
310+
Developer-oriented changes: 'dyno' Compiler improvements / changes
311+
------------------------------------------------------------------
312+
* added support for bad split-initialization detection and errors
313+
* added detailed errors for failed implicit `super` calls
314+
* made numerous improvements to the 'dyno' resolver for types and calls:
315+
- enabled `for param` loops over more range types
316+
- added support for associative domain types and literals via modules
317+
- added initial support for `subdomain` and `sparse subdomain`
318+
- added support for rectangular/associative array type exprs via modules
319+
- enabled converting iterable expressions into arrays
320+
- added support for `.locale` queries
321+
- added support for `manage` statements and context managers
322+
- added support for `let` expressions
323+
- enabled iteration over heterogeneous tuples
324+
- enabled unpacking tuples yielded from `zip` expressions
325+
- added support for checking interface constraints
326+
- enabled importing tertiary methods via `use`/`import` limitations
327+
- added basic support for resolution of nested types
328+
- enabled resolving enums nested in procedures
329+
- added support for `compilerError()` and `compilerWarning()` routines
330+
- added support for file-related reflection routines (e.g., `getLineNumber`)
331+
- added support for several primitives
332+
- fixed a bug accessing fields within a module with the same name
333+
- improved disambiguation process between callable objects and functions
334+
- fixed ambiguities between forwarded methods and non-forwarded routines
335+
- fixed handling of `if var` declarations and its generated `=` call
336+
- implemented numerous bug fixes and stability improvements
337+
* added support for several language features to the typed dyno->prod converter
338+
339+
Developer-oriented changes: Runtime improvements
340+
------------------------------------------------
341+
* added logic to avoid calls to `memalign()` with `size=0`
342+
* updated runtime paths from using fixed buffers to arbitrary-length strings
343+
344+
Developer-oriented changes: Testing System
345+
------------------------------------------
346+
* improved logging for `.skipif` and `.suppressif` files in the test output
347+
* fixed `sub_clean`, which was not properly cleaning up symlinks
348+
* fixed `prediff-for-slurm` to handle output that is not UTF-8
349+
* enabled timing 'dyno' queries across revisions in `testInteractive`
350+
351+
Developer-oriented changes: Utilities
352+
-------------------------------------
353+
* fixed a copyright update script bug that caused end-years to be repeated
12354

13355

14356
version 2.3
@@ -1219,7 +1561,7 @@ Developer-oriented changes: 'dyno' Compiler improvements / changes
12191561
- fixed a bug disambiguating between `unmanaged` and `borrowed` formals
12201562
- fixed a resolver crash due to circular forwarding statements
12211563
* improved performance when using `--dyno-scope-bundled`
1222-
* fixed how Dyno prints booleans to match the production compiler
1564+
* fixed how 'dyno' prints booleans to match the production compiler
12231565

12241566
Developer-oriented changes: Testing System
12251567
------------------------------------------

0 commit comments

Comments
 (0)