diff --git a/CHANGES.md b/CHANGES.md index 4d78f999b259..8b6b4dc1eef6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,471 @@ Release Changes List ==================== +version 1.30.0 +============== + +released March 23, 2023 + +Highlights (see subsequent sections for further details) +-------------------------------------------------------- +* significantly increased GPU performance and added support for AMD GPUs +* added a generalized attribute syntax and used it to support stability notes +* made many improvements to the capabilities and interfaces of 'IO' routines +* improved the correctness, performance, and compilation time of `bigint`s +* added a prototype `weak(C)` type for weak references to `shared` classes +* improved the behavior of passing and yielding tuples +* significantly improved compilation speeds for certain large applications +* switched to a CMake-based build of `chpl` and `chpldoc` +* added initial support for running a locale per socket / NIC on HPE Cray EX +* added a best practices document for using Chapel on Raspberry Pi +* made numerous renamings, deprecations, and improvements to standard modules +* addressed a number of user-reported bugs and documentation requests + +Configuration / Build / Packaging Changes +----------------------------------------- +* switched to using CMake behind the scenes to build `chpl` and `chpldoc` +* added new `QUIET` and `VERBOSE` build modes by setting these vars to `1` + (see https://chapel-lang.org/docs/1.30/usingchapel/building.html#controlling-build-output) +* for `./configure --chpl-home`, installs now require CMake 3.16 or later + (see https://chapel-lang.org/docs/1.30/usingchapel/prereqs.html#chapel-prerequisites) +* updated Chapel's Dockerfiles to support the C back-end in addition to LLVM + (see https://hub.docker.com/r/chapel/chapel/) + +New Language Features +--------------------- +* added support for a generalized attribute syntax + (see https://chapel-lang.org/docs/1.30/technotes/attributes.html) +* added new `@deprecated` and `@stable` attributes for indicating stability + (see https://chapel-lang.org/docs/1.30/technotes/attributes.html#stability-attributes) +* added a new 2-argument `.find()` method on arrays + (see https://chapel-lang.org/docs/1.30/language/spec/arrays.html#ChapelArray.find) +* added new `.adopt()` methods to the `owned` and `shared` classes + (see https://chapel-lang.org/docs/1.30/language/spec/classes.html#OwnedObject.owned.adopt + and https://chapel-lang.org/docs/1.30/language/spec/classes.html#SharedObject.shared.adopt) +* added a new `.release()` method for `owned` classes + (see https://chapel-lang.org/docs/1.30/language/spec/classes.html#OwnedObject.owned.release) +* added initial support for initializers that can `throw` errors + (see https://chapel-lang.org/docs/1.30/technotes/throwingInit.html) +* added a prototype `.transmute()` for bitwise `uint` <-> `real` conversions + (e.g., `r.transmute(uint)` will return a `uint` with `r`'s bit pattern) +* added support for single-statement subroutine bodies using the `do` keyword + (see https://chapel-lang.org/docs/1.30/language/spec/procedures.html#the-function-body) +* added a `.fullIdxType` query on arrays to get multidimensional index types + (see https://chapel-lang.org/docs/1.30/language/spec/arrays.html#ChapelArray.fullIdxType) + +Feature Improvements +-------------------- +* improved the behavior when slicing ranges, domains, and arrays + (see https://chapel-lang.org/docs/1.30/language/spec/ranges.html#range-slicing) +* enabled the ability to query `type`/`param` values within formal types + (e.g., `proc foo(r: range(?it, ?bd, ?sb)) { ... }` is now supported) +* improved support for loops over unbounded ranges/domains of `enum`/`bool` + (e.g., `for i in false.. by -1` will now yield `true`, `false`) +* added new optional arguments to the `@unstable` annotation + (see https://chapel-lang.org/docs/1.30/technotes/attributes.html#stability-attributes) +* enabled classes to have methods that share the class's name + (e.g., `class C { proc C() { ... } }` is now legal) + +Syntactic / Naming Changes +-------------------------- +* renamed the new `weakPointer(C)` type to `weak(C)` + (see https://chapel-lang.org/docs/1.30/builtins/WeakPointer.html#WeakPointer.weak) +* changed the syntax of `@unstable "msg"` to `@unstable("msg", ...)` +* unified `chpl`'s parsing of array types/values and square bracket loops + +Deprecated / Unstable / Removed Language Features +------------------------------------------------- +* deprecated the old `.find()` method on arrays to update its return type + (see https://chapel-lang.org/docs/1.30/language/spec/arrays.html#ChapelArray.find) +* marked arrays and slices with negatively strided dimensions as unstable +* deprecated support for single-statement `return` routines that don't use `do` +* deprecated support for `bool` types with specified widths (e.g., `bool(8)`) +* removed deprecated `isFloat*()` query routines +* removed support for the deprecated `alignedBoundsByDefault` `config param` + +Standard Library Modules +------------------------ +* added new GPU-oriented utility routines + (see 'GPU Computing' below) +* added `.read[To|Through]()` methods to read up to/through a given separator + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileReader.readTo, + https://chapel-lang.org/docs/1.30/modules/standard/Regex.html#Regex.fileReader.readTo, + https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileReader.readThrough, + and https://chapel-lang.org/docs/1.30/modules/standard/Regex.html#Regex.fileReader.readThrough) +* added `.advance[To|Through]()` methods to advance to/through a separator + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileReader.advanceTo + and https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileReader.advanceThrough) +* added `.write[String|Bytes]()` methods to write out `string`/`bytes` values + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileWriter.writeString + and https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileWriter.writeBytes) +* added new `[read|write]Codepoint()` methods to read/write UTF-8 codepoints + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileReader.readCodepoint + and https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileWriter.writeCodepoint) +* added `readByte()` and `writeByte()` routines to read/write a single byte + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileReader.readByte + and https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileWriter.writeByte) +* updated I/O errors in 'OS' to inherit from `Error` instead of `SystemError` + (see https://chapel-lang.org/docs/1.30/modules/standard/OS.html#OS.EofError, + https://chapel-lang.org/docs/1.30/modules/standard/OS.html#OS.UnexpectedEofError, and + https://chapel-lang.org/docs/1.30/modules/standard/OS.html#OS.BadFormatError) + +Changes / Feature Improvements in Libraries +------------------------------------------- +* made `bigint` initializers that halted/returned error codes `throw` instead + (see https://chapel-lang.org/docs/1.30/modules/standard/BigInteger.html#BigInteger.bigint.init, + https://chapel-lang.org/docs/1.30/modules/standard/BigInteger.html#BigInteger.bigintInitThrows) +* updated the `bigint` cast from `string` so it `throw`s for illegal values +* added a `permissions` argument to `FileSystem.copy()` + (see https://chapel-lang.org/docs/1.30/modules/standard/FileSystem.html#FileSystem.copy) +* added a `metadata` argument to `FileSystem.copyTree()` + (see https://chapel-lang.org/docs/1.30/modules/standard/FileSystem.html#FileSystem.copyTree) +* added explicit type constraints to `date`/`time`/`datetime` initializers + (see https://chapel-lang.org/docs/1.30/modules/standard/Time.html#Time.date.init, + https://chapel-lang.org/docs/1.30/modules/standard/Time.html#Time.time.init, and + https://chapel-lang.org/docs/1.30/modules/standard/Time.html#Time.datetime.init) + +Name Changes in Libraries +------------------------- +* renamed `new[Block|Cyclic][Dom|Arr]` to `[Block|Cyclic].new[Domain|Array]` + (see https://chapel-lang.org/docs/1.30/modules/dists/BlockDist.html + and https://chapel-lang.org/docs/1.30/modules/dists/CyclicDist.html) +* changed GPU-related features to use `Gpu` over `GPU` in identifier names + (e.g. `GPUDiagnostics` is now `GpuDiagnostics`) +* renamed the `.read[string|bytes]()` methods to `.read[String|Bytes]()` + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileReader.readString + and https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileReader.readBytes) +* renamed `[read|write]bits()` to `[read|write]Bits()` + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileReader.readBits + and https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileWriter.writeBits) +* renamed `open[reader|writer]()` to `open[Reader|Writer()` + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.openReader + and https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.openWriter) +* renamed `iomode` to `ioMode` + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.ioMode) +* renamed `file.check()` to `file.isOpen()` + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.file.isOpen) +* renamed `openmem()` to `openMemFile()` + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.openMemFile) +* replaced `IO.openfp()` with a file initializer taking a `c_FILE` argument + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.file.init) +* replaced `IO.openfd()` with a file initializer taking a `fileDescriptor` arg + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.file.init) +* replaced `map.set()` with `map.replace()` + (see https://chapel-lang.org/docs/1.30/modules/standard/Map.html#Map.map.replace) +* unified formatting of 'Errors' varargs procedure signatures + (see https://chapel-lang.org/docs/1.30/modules/standard/Errors.html#Errors.compilerError) +* renamed `IllegalArgumentError`'s initializer formal from `info` to `msg` + (see https://chapel-lang.org/docs/1.30/modules/standard/Errors.html#Errors.IllegalArgumentError) +* renamed `c_sizeof()`'s formal from `x` to `t` in the 'CTypes' module + (see https://chapel-lang.org/docs/1.30/modules/standard/CTypes.html#CTypes.c_sizeof) +* renamed the 'Barriers' module to 'Collectives' + (see https://chapel-lang.org/docs/1.30/modules/standard/Collectives.html) +* renamed the `Barrier` type to `barrier` + (see https://chapel-lang.org/docs/1.30/modules/standard/Collectives.html#Collectives.barrier) +* renamed `MemMove.needsDeinit()` to `MemMove.needsDestroy()` + (see https://chapel-lang.org/docs/1.30/modules/standard/MemMove.html#MemMove.needsDestroy) +* renamed `MemMove.explicitDeinit()` to `MemMove.destroy()` + (see https://chapel-lang.org/docs/1.30/modules/standard/MemMove.html#MemMove.destroy) + +Deprecated / Unstable / Removed Library Features +------------------------------------------------ +* deprecated `file.lines()` in favor of `file.reader().lines()` + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileReader.lines) +* deprecated `readBinary()` on arrays to update its return type to `int` + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.ReadBinaryArrayReturnInt) +* deprecated `advancePastByte()` in favor of the new `advanceThrough()` method + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileReader.advanceThrough) +* deprecated the `fileWriter.writeBytes()` version that took generic arguments + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.fileWriter.writeBytes) +* deprecated `ioBits` in favor of `readBits()`/`writeBits()` + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.ioBits) +* deprecated `ioChar` in favor of `readCodepoint()`/`writeCodepoint()` + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.ioChar) +* deprecated `ioHintSet.noMmap` in favor of `ioHintSet.mmap(false)` + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#IO.ioHintSet.mmap) +* deprecated `regex.compile()` in favor of `new regex()` + (see https://chapel-lang.org/docs/1.30/modules/standard/Regex.html#Regex.regex.init) +* deprecated `regex.sub[n]()` in favor of `replace[AndCount]()` methods + (see https://chapel-lang.org/docs/1.30/modules/standard/Regex.html#Regex.string.replace) +* deprecated `map.items()` and `map.these()` + (see https://chapel-lang.org/docs/1.30/modules/standard/Map.html#Map.map.items) +* marked `map.parSafe` as being unstable +* deprecated `map.getBorrowed()`, `.getReference()`, and `.getValue()` + (see https://chapel-lang.org/docs/1.30/modules/standard/Map.html#Map.map.getBorrowed) +* marked `TaskErrors.first()` unstable, expecting a potential name change + (see https://chapel-lang.org/docs/1.30/modules/standard/Errors.html#Errors.TaskErrors.first) +* deprecated the `TimeUnits` enum and routines that made use of it + (see https://chapel-lang.org/docs/1.30/modules/standard/Time.html#Time.TimeUnits) +* marked 'Time' routines that wrap C functions as unstable + (see https://chapel-lang.org/docs/1.30/modules/standard/Time.html#Time.date.ctime) +* deprecated `FileSystem.copyFile()` in favor of `FileSystem.copy()` + (see https://chapel-lang.org/docs/1.30/modules/standard/FileSystem.html#FileSystem.copyFile) +* deprecated the `FileSystem.sameFile()` overload accepting `file` arguments + (see https://chapel-lang.org/docs/1.30/modules/standard/FileSystem.html#FileSystem.sameFile) +* deprecated the option to choose between barrier types for `barrier` + (see https://chapel-lang.org/docs/1.30/modules/standard/Collectives.html#Collectives.BarrierType) +* deprecated `moveInitializeArrayElements()` for new `moveArrayElements()` + (see https://chapel-lang.org/docs/1.30/modules/standard/MemMove.html#MemMove.moveInitializeArrayElements) +* removed the deprecated `channel` type +* removed the deprecated 'Spawn' module +* removed the deprecated pipe style constants from the 'Subprocess' module +* removed deprecated POSIX signal name constants from the 'Subprocess' module +* removed the deprecated `subprocess.send_signal()` method +* removed the integer-returning version of `bigint.invert()` + +Tool Improvements +----------------- +* added `@chpldoc.nodoc` as a means of stifling `chpldoc` documentation + (see https://chapel-lang.org/docs/1.30/tools/chpldoc/chpldoc.html#stifling-documentation) +* added a filter to strip the `:enum:` tag in `chpldoc` output + +Performance Optimizations / Improvements +---------------------------------------- +* parallelized array deinitialization +* parallelized the new array `.find()` methods +* eliminated an unnecessary and non-trivial zero-initialization in `bigint` + +Compilation-Time / Generated Code Improvements +---------------------------------------------- +* accelerated compiler performance for `bigint`-heavy multi-locale codes +* improved compile times for codes with straightforward declared return types + +Memory Improvements +------------------- +* closed memory leaks in `fileReader.mark()` and `fileWriter.mark()` + +Language Specification Improvements +----------------------------------- +* merged the `sync` & `single` API docs into the language specification + (see https://chapel-lang.org/docs/1.30/language/spec/task-parallelism-and-synchronization.html#predefined-single-and-sync-methods) +* clarified the split-initialization behavior of `out` arguments + (see https://chapel-lang.org/docs/1.30/language/spec/variables.html#split-initialization) +* updated the section on re-exporting symbols to describe current behavior + (see https://chapel-lang.org/docs/1.30/language/spec/modules.html#re-exporting) +* added a new subsection defining procedure/iterator bodies + (see https://chapel-lang.org/docs/1.30/language/spec/procedures.html#the-function-body) +* improved the discussion of `yield` semantics + (see https://chapel-lang.org/docs/1.30/language/spec/iterators.html#the-yield-statement) +* improved the description of return intents' effects on `return` + (see https://chapel-lang.org/docs/1.30/language/spec/procedures.html#the-return-statement) +* clarified that records don't store array data in fields + (see https://chapel-lang.org/docs/1.30/language/spec/records.html#storage-allocation) +* clarified the behavior of non-promoted arguments in promoted expressions + (see https://chapel-lang.org/docs/1.30/language/spec/data-parallelism.html#zippered-promotion) +* added an additional example of using `param`s with generic types + (see https://chapel-lang.org/docs/1.30/language/spec/generics.html#parameters-in-generic-types) + +Other Documentation Improvements +-------------------------------- +* refreshed the GPU technical note with respect to current capabilities + (see https://chapel-lang.org/docs/1.30/technotes/gpu.html) +* added a new document with best practices for building on a Raspberry Pi + (see https://chapel-lang.org/docs/1.30/platforms/raspberrypi.html) +* moved the `weak(C)` documentation into the standard modules section + (see https://chapel-lang.org/docs/1.30/builtins/WeakPointer.html) +* removed the now-empty "Built-in Types and Functions" section from the docs +* clarified the location of CHPL_HOME in `make install` builds + (see https://chapel-lang.org/docs/1.30/usingchapel/building.html#installing-chapel) +* added a new technical note about debugging Chapel programs + (see https://chapel-lang.org/docs/1.30/technotes/debuggingChapel.html) +* updated the debugging documentation to mention the ability to use `lldb` + (see https://chapel-lang.org/docs/1.30/usingchapel/debugging.html#running-in-gdb) +* updated the `init=` technote w.r.t. compiler-generated copy initializers + (see https://chapel-lang.org/docs/1.30/technotes/initequals.html#the-init-method-for-non-generic-types) +* fixed the 'IO' example codes to work with strict or relaxed error handling + (see https://chapel-lang.org/docs/1.30/modules/standard/IO.html#i-o-overview) +* fixed other bugs, typos, and formatting issues in the documentation + +Example Codes +------------- +* updated examples to reflect language and library changes + +Syntax Highlighting +------------------- +* improved `vim` support to simplify customization of indentation levels + +Portability / Platform-specific Improvements +-------------------------------------------- +* fixed `CHPL_GMP=bundled` on recent ARM-based Macs +* improved portability for configurations using GCC 13 and clang 15 +* improved the ability to find an LLVM 14 dependency on Alpine Linux 3.17 + +GPU Computing +------------- +* added support for generating single-locale code for one or more AMD GPUs + (see https://chapel-lang.org/docs/1.30/technotes/gpu.html) +* significantly improved GPU launch times by only loading the kernel once +* improved performance by page-locking host arrays for 'array-on-device' mode +* improved performance via a loop optimization before extracting GPU kernels +* added heuristic defaults for `CHPL_GPU_CODEGEN` based on user's environment + (see https://chapel-lang.org/docs/1.30/technotes/gpu.html#gpu-related-environment-variables) +* enabled calling routines that access `nil` from within GPU kernels +* 'GPU' module improvements: + - added `createSharedArray()` to support allocating block-shared memory + (see https://chapel-lang.org/docs/1.30/modules/standard/GPU.html#GPU.createSharedArray) + - added `syncThreads()` to synchronize threads within a GPU block + (see https://chapel-lang.org/docs/1.30/modules/standard/GPU.html#GPU.syncThreads) + - added `setBlockSize()` to configure the block size of GPU kernels + (see https://chapel-lang.org/docs/1.30/modules/standard/GPU.html#GPU.setBlockSize) + +Compiler Improvements +--------------------- +* improved parsing of first-class function types that return arrays +* added a warning for `[lo..hi]` literals to reduce the potential for confusion + +Compiler Flags +-------------- +* added flags to support processing attributes belonging to different tools + (e.g., `--warn-unknown-attribute-toolname`, `--using-attribute-toolname`) + +Runtime Library Changes +----------------------- +* enabled overriding the max # of endpoints reported by the 'ofi' provider + (see https://chapel-lang.org/docs/1.30/platforms/libfabric.html#bound-endpoints) + +Launchers +--------- +* stopped using `--quiet` with `srun`/`sbatch` if `[SLURM|SBATCH]_DEBUG` is set + +Error Messages / Semantic Checks +-------------------------------- +* added a warning for partial instantiations that do not include `?` + (see https://chapel-lang.org/docs/1.30/technotes/partialInstantiations.html#creating-partial-instantiations) +* improved errors for invalid uses of `break`, `continue`, `return`, `yield` +* removed "It's us, not you" phrasing from `chpl`'s internal error messages +* improved error messages when applying multiple class memory management styles +* rephrased generic class management errors to reflect the current behavior +* added errors for iterators that yield `const`/non-lvalue expressions by `ref` +* added a compile-time error for `postinit()` routines that `throw` +* improved error messages for invalid uses of `private` +* improved an error message for indexing into a `map` of non-nilable values +* added an error when passing empty arrays to `c_ptrTo()` + +Bug Fixes +--------- +* fixed several bugs related to uses of labeled `break`/`continue` statements +* fixed a bug in which variable constraints of type `domain` were ignored +* fixed a bug in which tuple arguments were incorrectly passed by `ref` +* fixed a bug in which records in tuples were yielded by `ref` by default +* fixed a bug in which internal modules were stacking class memory managements +* fixed a compiler hang when reporting an error with split initialization +* fixed a problem where passing `--target-cpu` would cause a core dump +* fixed an internal error when initializing a list from an iterator +* fixed support for casts from `weak(C)` to non-nilable `shared` classes +* fixed a bug with `--memTrack` when using 'qthreads' +* re-enabled the ability to use `CHPL_HOST_MEM=jemalloc` on Macs +* fixed a mishandling of certain `export` procedures with optimization +* fixed missing LLVM sign/zero extension attributes for certain `export` procs + +Bug Fixes for GPU Computing +--------------------------- +* fixed a bug causing segfaults with `CHPL_GPU_MEM_STRATEGY=array_on_device` +* fixed a bug with how errors are handled in GPU codegen +* fixed a bug involving thread-block barrier syncs + +Bug Fixes for Libraries +----------------------- +* fixed a divide-by-zero error for reductions over a large list +* fixed a bug in which `**` on `bigint` would always return 0 +* fixed a bug in which `>>` on `bigint` gave incorrect results +* fixed a bug when subtracting `bigint` values from `int` +* fixed a bug in which `%` would crash for remote `bigint` values + +Third-Party Software Changes +---------------------------- +* updated the bundled version of LLVM to 14.0.6 +* updated GASNet-EX to the version 2023.2.0 snapshot + +Developer-oriented changes: Documentation +----------------------------------------- +* added a section on naming accessors to the Standard Module Style Guide + (see https://chapel-lang.org/docs/1.30/developer/bestPractices/StandardModuleStyle.html#accessors) +* updated `frontend/README` to focus on code structure and best practices + +Developer-oriented changes: Syntactic / Naming Changes +------------------------------------------------------ +* removed the `deprecated` keyword in favor of a new `@deprecated` attribute + (see https://chapel-lang.org/docs/1.30/developer/bestPractices/Deprecation.html#best-practices-deprecation) +* replaced `pragma "no doc"` with `@chpldoc.nodoc` +* renamed the 'parse' pass to 'parseAndConvertUast' +* renamed `IntentList` to `Qualifier` in 'dyno' + +Developer-oriented changes: Module changes +------------------------------------------ +* added prototype asynchronous communication capabilities to the GPU module +* made Chapel-specific `EEOF`, `ESHORT`, and `EFORMAT` private in 'IO' module +* refactored `bigint` routines w.r.t. how localization is implemented + +Developer-oriented changes: Makefile / Build-time changes +--------------------------------------------------------- +* renamed the compiler library from `liblibdyno.so` to `libChplFrontend.so` + +Developer-oriented changes: Compiler Flags +------------------------------------------ +* added `--use-io-formatters` to enable experimental IO format customization +* validated that the pass provided to the `--stop-after-pass` flag exists +* prohibited using the `--parse-only` and `--stop-after-pass` flags together +* added `--gpu-ptxas-enforce-optimization` for debugging optimized GPU builds + +Developer-oriented changes: Compiler improvements/changes +--------------------------------------------------------- +* improved the compiler's internal representation of function types + +Developer-oriented changes: 'dyno' Compiler improvements/changes +---------------------------------------------------------------- +* added support for experimental `.dyno` library files +* added 'dyno' warnings/errors for: + - `use` or `import` referring to an ambiguous module + - multiply-defined symbols stemming from `public use`/`import` + - module symbols that hide subroutine arguments via `use`/`import` + - disallowed cases of relative `use`/`import` + - attempted successive renames in `use`/`import` + - modules referenced as though they were variables + - referencing fields of outer classes from inner ones + - references to `@deprecated` and `@unstable` symbols +* made numerous improvements to the 'dyno'-based scope resolver: + - implemented shadow scopes for `use` and `private use` + - significantly improved scope resolution within methods + - added the ability for errors to describe where a symbol came from + - fixed internal failures with `if var` conditionals and `coforall` loops + - fixed detection of task-private variables + - fixed a number of other bugs revealed in testing +* improved several aspects of 'dyno's resolution of types and calls: + - added the ability to resolve reductions + - added the ability to resolve task/loop intents + - added `const` checking + - added support for `forwarding` fields + - added support for return-intent overloading + - added support for handling 'ref-if-modified' types, like arrays + - added support for default-init, copy-init, assignment, and deinit actions + - started resolving error types in `catch` statements +* improved semantic checks for conditionals within initializers +* added support for serializing and deserializing the dyno uAST +* significantly improved the quality of the uAST dumps +* fixed dyno traces writing terminal color commands when piping to a file +* added support for computing a program's module initialization order +* fixed bugs in split-initialization and copy-elision analyses +* fixed bugs in return-type inference +* fixed the `DUMP_WHEN_CONVERTING_UAST_TO_AST` macro +* refactored uAST node `Attributes` into `AttributeGroup` and added `Attribute` + +Developer-oriented changes: Runtime improvements +------------------------------------------------ +* added support for running a locale per socket on HPE Cray EX +* added support for socket-aware NIC selection on HPE Cray EX +* added the bound/unbound status of 'ofi' endpoints when using verbose output + +Developer-oriented changes: Testing System +------------------------------------------ +* improved the speed of parallel testing via the `paratest.*` scripts +* adjusted the `smokeTest` script to print out lines with trailing whitespace +* added a `--respect-notests` flag to the `start_test` script +* enabled `start_test` to infer `.good` filenames when using `COMPOPTS` files + +Developer-oriented changes: Tool Improvements +--------------------------------------------- +* fixed a bug in which using `--gdb` resulted in an infinite loop + version 1.29.0 ============== @@ -115,7 +580,7 @@ Deprecated / Unstable / Removed Library Features * removed `"version "` prefix when casting a `sourceVersion` to string (see https://chapel-lang.org/docs/1.29/modules/standard/Version.html#Version.sourceVersion) * deprecated the 'SysBasic' module including `EEOF`, `ESHORT`, `EFORMAT` -* marked 'GPU'/'GPUDiagnostics' modules as unstable (due to still being new)) +* marked 'GPU'/'GPUDiagnostics' modules as unstable (due to still being new) * marked `iostringstyle`, `iostringformat` as unstable in the 'IO' module * removed the deprecated 'SysError' module and some related deprecated symbols * removed the deprecated 'DateTime' module @@ -216,7 +681,7 @@ GPU Computing * added a `gpuClock()` procedure to time kernel codes * added a `debugGPU` config constant rather than tying behavior to `--verbose` * made calls to `extern` routines ineligible for GPU execution -* marked 'GPU'/'GPUDiagnostics' modules as unstable (due to still being new)) +* marked 'GPU'/'GPUDiagnostics' modules as unstable (due to still being new) Compiler Improvements --------------------- @@ -771,7 +1236,7 @@ New Features (e.g., `(1..10 by 2).highBound` returns `10`) (see https://chapel-lang.org/docs/1.27/language/spec/ranges.html#ChapelRange.range.lowBound) * added an `alignedBoundsByDefault` config to opt into new `.low`/`.high` defs - (see https://chapel-lang.org/docs/1.27/language/spec/ranges.html#ChapelRange.alignedBoundsByDefault)) + (see https://chapel-lang.org/docs/1.27/language/spec/ranges.html#ChapelRange.alignedBoundsByDefault) Feature Improvements -------------------- @@ -840,7 +1305,7 @@ Standard Library Modules * added a new 'GPUDiagnostics' module for tracking GPU kernel launches (see https://chapel-lang.org/docs/1.27/modules/standard/GPUDiagnostics.html) * added new `fillRandom()` routines to 'Random' that accept min/max bounds - (see https://chapel-lang.org/docs/main/modules/standard/Random.html#Random.fillRandom + (see https://chapel-lang.org/docs/1.27/modules/standard/Random.html#Random.fillRandom and https://chapel-lang.org/docs/1.27/modules/standard/Random/PCGRandom.html#PCGRandom.PCGRandomStream.fillRandom) * ensured all types have separate `isXType`, `isXValue`, and `isX` routines (see https://chapel-lang.org/docs/1.27/modules/standard/Types.html)