What is new in stable version 8.8.0
This release of the Dinamica EGO software introduces some improvements and addresses bugs (compared to stable version 8.7.0):
Core Enhancements
- System, Memory, and File Management:
- Updated version to 8.8.0.
- Added functionality to force `mimalloc` to deallocate unused memory.
- Changed pure allocations to use smart pointers.
- Implemented fallback to system default temporary directory when the user-defined directory is unavailable.
- Refactored code by moving the functionality for determining the effective storage mode when opening an image into `MapUtils::determineStorageMode()`.
- Fixed regression caused by validating a file for writing: the software will not create a new file if a file does not exist during validation.
- Data Structures (Tables, Tuples, and Variants):
- Used a standard comparison method for `Tuple`/`TupleView` and `Variant`, fixing the incorrect ordering of Tuples with different sizes.
- Reduced variant memory footprint.
- Methods were added to recover all table indices at once but behind a lock.
- Sequence generation for lookup table constants was refined: the new default behavior allows a single sequence only if it represents more than 20,000,000 entries per table; otherwise, the table is written in expanded (non-sequence) form.
- Fixed a problem where different ordering of keys/values on a Table could result in writing a table with a header without the `str` type.
- Fixed bug that was causing an infinite loop when converting a table into weights.
- Scripting and Concurrency:
- Added a flag to `ScriptReader` to ignore undefined variables, which prevents errors on missing variables and allows partial script fragments to be parsed; this flag was also exported to Java.
- Added parameters to `calculateProgress()` to specify the lower and upper progress limits that should be reported. An additional entity was defined to report progress during execution.
- Fixed potential race condition that might occur if a worker is selecting a task while the GUI is querying the worker's task information.
- The copy of `TaskMutex` and `TaskLock` was removed to prevent Undefined Behavior (UB), and memory ordering on `TaskLock` was fixed.
- Image and Spatial Data Handling:
- Cropping functionality was implemented using the `CropMapToExtents` functor.
- Optional cropping extents were added to `LoadMap` and `LoadCategoricalMap`, allowing only a specified portion of a map to be loaded.
- Fixed implementation of `Bounds` to correctly deal with constructing its limits using consecutive calls to `combine()`.
- `Bounds` now keeps its type, allowing it to represent a point or a region.
- Improvements to `BaseRasterImageWindow`: allow a categorization to be assigned that might be different from the peer image, and ensure this modified categorization is passed along when copied.
- Fixed bug related to retrieving the bottom-right coordinate of a region by `GetRegionInfo` and `GetAllRegionsInfo`.
Graphical Interface Enhancements
- Performance and Responsiveness:
- Improved responsiveness of tables and lookup tables by showing a loading icon and executing the load operation in the background.
- Speed up lookup table visualization by using a cache of the table keys.
- Fixed a bug where the resolution of the lookup table chart is completely off when using a hi dpi display.
- Script Editor and Memory:
- The GUI was updated to allow pasting incomplete script fragments from the system clipboard by utilizing the core's ignore-undefined-variables flag.
- Script modified properties are written explicitly on save instead of on every write operation.
- Functionality was added to force freeing reserved memory after script runs or when a script editor is closed.
- Utility Updates:
- Updated CRAN mirror list, refreshing URLs/names and removing outdated entries.
- Fixed bug that caused an error when trying to copy the log text to the clipboard without selecting text first.
Listing created using Google NotebookLM.