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.