FreeM 0.62.2
Contents
Overview
FreeM 0.62.2 was released on March 23, 2025
Changes
Comply with MDC Type A extension X11/96-13 - Portable length of names
This MDC Type A extension requires implementations that exceed the proposed 31-character length limit for identifiers (variable names, function and subroutine names, etc) treat all characters beyond the 31st as syntactically significant, and also requires that identifiers beyond the implementation's length limit generate error M56
, instead of being silently truncated.
This behavior applies only when $DIALECT
for the routine buffer in question is M5
, MDS
, or FREEM
(the default).
Fix reverse $QUERY polyfill
In previous releases of FreeM, routine names containing dots were allowed (ex. %SYS.INIT
). Reverse $QUERY
(implemented in M code) originally used such a routine name.
With the release of FreeM 0.62.1, support for routine names containing dots was removed, as the new object-oriented programming features re-purposed the dot as an indicator that the portion of the identifier preceding the dot represents a class instance, while the portion following the dot represents a method belonging to that class. However, the routine implementing reverse $QUERY
did not get renamed in accordance with this change.
While this oversight did not consistently and obviously break functionality of code using reverse $QUERY
, such cases were possible, and its use could lead to intermittent segmentation violations, or worse, stack-smashing.
FreeM 0.62.2 renames the M routine such that it no longer contains a dot, thus mitigating the prior regression.
It should be noted that the regression was in M glue code that connects FreeM's C code to David Wicksell's actual polyfill, and David's code did not contain any bugs. This problem was in no way due to anything David or his code did.
Silently truncate long NAME exprs in obsolete MDC dialects
This somewhat relates to the work updating FreeM to comply with MDC Type A extension X11/96-13. Previously, code running with a $DIALECT
value of M77
, M84
, M90
, or M95
had no length limit on identifiers, and treated all characters in such identifiers as syntactically significant.
With this change, FreeM will treat any character beyond the standard 8-character limit as syntactically insignificant when $DIALECT
is set to M77
, M84
, M90
, or M95
. This should bring these legacy dialects closer to compliance with the MDC standards they attempt to emulate.
Note that the default value of $DIALECT
is FREEM
, which enables all features from the Millennium Draft Standard, as well as all FreeM vendor extensions, and as such, most code will not be affected by this change.
Packaging
FreeM 0.62.2 is natively packaged for:
- Solaris 5.8 on 64-bit SPARC
- Solaris 5.10 on 64-bit Intel
- OpenIndiana Hipster 5.11 on 64-bit Intel
- Debian Bookworm, Bullseye, and Trixie on amd64, i386, armhf, and arm64
- Ubuntu Noble and Oracular on amd64, armhf, and arm64
- NetBSD
pkgsrc-wip
Links
- Downloads: https://freem.coherent-logic.com/downloads.cfm
- Documentation: https://freem.coherent-logic.com/docs/0.62.2/freem.html