Logtalk 3.99.0 released

Paulo Moura <[email protected]> Thu, 9 Apr 2026 21:55:24 +0100
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <[email protected]>
Hi,

Logtalk 3.99.0 is now available for downloading at:

https://logtalk.org/

This is a major tooling- and library-focused release centered on =
stronger diagnostics/reporting/documenting/testing/packaging workflows, =
date/time and time-zone support, configuration and interchange formats, =
hashing and MIME utilities, and compiler/runtime correctness fixes for =
multi-threaded and portability-sensitive workloads.

## New and updated tools by category/area

### Diagnostics / reporting / quality

- "tool_diagnostics" for generating machine-readable diagnostics =
consumable by other developer tools =20
- "sarif" for exporting diagnostics as SARIF reports =20
- "mutation_testing" for mutation-based testing =20
- "sbom" for generating software bills of materials for loaded =
applications in CycloneDX and SPDX formats
- "linter_reporter": support for generating machine-readable linter =
diagnostics =20
- "dead_code_scanner", "lgtdoc", and "lgtunit": added support for =
emitting diagnostics for downstream tooling =20

### Metrics / diagrams / analysis

- "code_metrics": added Lines, Maintainability Index, LCOM4, WMC, RFC, =
and Cognitive Complexity metrics =20
- "code_metrics": updated coupling scores to include Distance from Main =
Sequence =20
- "diagrams": added caller diagrams, coupling-metric overlays, cycle =
highlighting, and export support for CX2 JSON and PlantUML =20
- "diagrams": "lgt2svg.sh" and "lgt2svg.ps1" can now export formats =
other than SVG =20

### Testing / packaging / automation

- "lgtunit": added Cobertura XML and LCOV coverage export, Subunit and =
CTRF test result export, and a new protected "file_url/2" predicate =20
- "logtalk_tester.sh" and "logtalk_tester.ps1": added concurrent test =
execution with "-j" and improved minimal output timing =20
- "packs": added lock files support for deterministic installs and CI/CD =
reproducibility plus a programmatic query API =20
- "tutor": updated to explain "dead_code_scanner" warnings and now =
provides a reusable "tutor_explanations" category =20

## New libraries by category/area

### Time / configuration / data interchange

- "application" for declaring application metadata (notably for SBOMs)
- "character_sets" for converting between character codes and bytes plus =
charset metadata =20
- "hashes" for commonly used hashing algorithms (MD5, SHA1, SHA3, =
SHA256, CRC32, and others)
- "toml" for parsing and generating TOML v1.0.0 files =20
- "tzif" for parsing TZif files, persisting parsed snapshots, and =
querying UTC offsets, DST, and abbreviations =20
- "dates_tz" for linking "dates" and "tzif" to support zone-aware =
date-time conversions =20
- "mime_types" for mapping file extensions, file names, and URL-like =
resources to MIME types and content encodings =20

### Data structures / collections

- "dictionaries": added a 2-3 tree implementation contributed by Michael =
T. Richter =20

## Changed libraries by category/area

### Date / time / time zones

- "dates": added more calendar and instant utilities, including =
day-of-year, relative ordering, instant comparison, formatting, and =
calendar-aware year/month arithmetic =20
- "dates": "name_of_day/3" now uses ISO 8601 numbering for consistency =20=

- "iso8601" contribution: added "time_string/3" and =
"date_time_string/3", extended "interval_string/2", and added support =
for comma as a fractional separator =20

### Coordination / networking

- "linda": reorganized around "linda_server" and "linda_client" =
categories, while keeping a backward-compatible default object =20
- "linda": clients can now connect to multiple servers and define =
aliases for server connections =20
- "linda": improved connection error reporting plus fixes for shutdown, =
tuple handling, synchronization, and matching behavior =20
- "sockets": added "server_open/4" for starting a server on a specific =
interface=20

### Validation / web / identifiers / types

- "json_schema": added support for schema references to local files =20
- "url": added "file_path_components/2", improved normalization, and =
removed spurious choice-points in public predicates =20
- "uuid": added support for UUID versions 3 and 5 =20
- "type" and "arbitrary": added a "hexadecimal" character set =20

## Non-library notable changes

- Compiler/runtime: added a new "force" target to "logtalk_make/1", =
added the "term_position(Term)" load-context key, fixed entity operator =
leakage from included files, improved handling of multifile/dynamic =
predicates on some backends, and protected key load/compile/runtime =
update operations with mutexes on multi-threaded backends =20
- Documentation: added notes on limitations when using conditional =
compilation directives in included files and fixed missing documentation =
for the "info/1" entity property =20
- IDE support: added VSCode support for checking the portability of =
loaded code and updated the Context7 MCP support file to the latest =
format =20

For details and a complete list of changes, please consult the release =
notes at:

https://github.com/LogtalkDotOrg/logtalk3/blob/master/RELEASE_NOTES.md

Happy logtalking!
Paulo

-----------------------------------------------------------------
Paulo Moura
Logtalk developer