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.