File:  [Coherent Logic Development] / freem / doc / freem_conformance.1
Revision 1.5: download - view: text, annotated - select for diffs
Mon May 5 23:18:29 2025 UTC (4 weeks, 5 days ago) by snw
Branches: MAIN
CVS tags: HEAD
Update conformance document to cover the idiotic numeric coercion rules around E notation

.\"
.\"   $Id: freem_conformance.1,v 1.5 2025/05/05 23:18:29 snw Exp $
.\"
.\"   Author: Serena Willis <snw@coherent-logic.com>
.\"    Copyright (C) 2025 Coherent Logic Development LLC
.\"
.\"   This file is part of FreeM.
.\"
.\"   FreeM is free software: you can redistribute it and/or modify
.\"   it under the terms of the GNU Affero Public License as published by
.\"   the Free Software Foundation, either version 3 of the License, or
.\"   (at your option) any later version.
.\"
.\"   FreeM is distributed in the hope that it will be useful,
.\"   but WITHOUT ANY WARRANTY; without even the implied warranty of
.\"   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
.\"   GNU Affero Public License for more details.
.\"
.\"   You should have received a copy of the GNU Affero Public License
.\"   along with FreeM.  If not, see <https://www.gnu.org/licenses/>.
.\"
.\"   $Log: freem_conformance.1,v $
.\"   Revision 1.5  2025/05/05 23:18:29  snw
.\"   Update conformance document to cover the idiotic numeric coercion rules around E notation
.\"
.\"   Revision 1.4  2025/05/05 04:48:17  snw
.\"   Update conformance document
.\"
.\"   Revision 1.3  2025/05/03 03:07:55  snw
.\"   Documentation updates
.\"
.\"   Revision 1.2  2025/05/02 16:25:46  snw
.\"   -m
.\"
.\"   Revision 1.1  2025/05/02 15:19:32  snw
.\"   Add conformance clause man page
.\"
.\"
.TH freem_conformance 1 "2 May 2025" FreeM "FreeM User Manual"
.SH NAME

freem_conformance - FreeM MDC Conformance Document

.SH SYNOPSIS

FreeM version 0.64.0-rc1 conforms to X11.1-1995, as modified by the following MDC documents:

.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
X11/1998-28 Event Processing (MDC status A)
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
X11/1998-31 IF THEN & ELSE (MDC status A)
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
X11/95-118 Undefined ssvns (MDC status A)
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
X11/96-13 Portable length limit of names (MDC status A)
.RE

with the following exceptions:
.SH EXCEPTIONS

.TP
Aliases
.RS 4
FreeM supports aliases for local variables that can reference either the root node or a subtree:

.EX
USER> S X(3)="harps"

USER> S J=.X(3)

USER> S J(8)=17

USER> ZWR X
X(3)=harps
X(3,8)=17
.EE

Aliases used in pass-by-reference can also reference entire subtrees instead of just the root node:

.EX
USER> ZL TEST

USER> ZP

TEST ;
 S X(3)=4
 D SUBR(.X(3))
 ZWR X
 QUIT
 ;
SUBR(A) ;
 S A(4)="thwack!"
 QUIT

USER> D ^TEST
X(3)=4
X(3,4)=thwack!
.EE
.RE

.TP
Environments
.RS 4
In FreeM, the \fInamespace\fR is roughly equivalent to what the \fIStandard\fR refers to as an \fIenvironment\fR. However, FreeM uses the term \fIenvironment\fR to refer to a collection of namespaces, processes, and an after-image journal.
.RE
.TP
Indirection
.RS 4
FreeM supports several forms of indirection that are nonstandard, as well as allowing indirection in several constructs where the standard prohibits it. Below is a list of some known instances of idiosyncratic indirection; please note that this list is by no means comprehensive:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
FOR loops in FreeM support argument indirection
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
FreeM supports list indirection, such as \fBS X="1,2,3",ARGS="X,"","",2" W $P(@ARGS)\fR, which will output \fB2\fR
.RE
.RE
.TP
\fBMERGE\fR
.RS 4
\fBMERGE\fR should be implemented as \fB[MERGE] postcond SP L mergeargument\fR, but is currently implemented as \fBM[ERGE] postcond SP mergeargument\fR.
.RE
.TP
\fBKVALUE\fR and \fBKSUBSCRIPTS\fR
.RS 4
Only the inclusive forms of these commands are currently implemented.
.RE
.TP
Transaction Processing
.RS 4
Restartable transactions are not implemented.
.RE
.TP
Event Processing
.RS 4
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBETRIGGER\fR is not implemented
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Of the event classes defined in \fIX11/1998-28\fR, only the \fBINTERRUPT\fR \fIevclass\fR is implemented
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
The \fBTRIGGER\fR \fIevclass\fR is nonstandard
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
The \fB^$EVENT\fR \fIssvn\fR is incomplete
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Environment-wide events defined in \fB^$SYSTEM\fR are nonstandard
.RE
.RE
.TP
\fBDO\fR and \fBGOTO\fR
.RS 4
FreeM's implementation of these commands allows the \fIentryref\fR to consist only of the \fI+ intexpr\fR component, in which \fIintexpr\fR is interpreted as a number of lines from the beginning of the currently-executing routine. This behavior is in addition to--and not instead of--the \fIentryref\fR syntax specified in the \fIStandard\fR.
.RE
.TP
\fBIF\fR and \fBELSE\fR
.RS 4
Both of these commands allow a \fIpostcondition\fR in FreeM.
.RE

\fBLOCK\fR
.RS 4
The first subscript of \fB^$LOCK\fR collates according to the rules for global and local subscripts, not as an \fInref\fR, as FreeM uses globals (both persistent and memory-backed) as backing store for SSVNs.
.RE
.TP
Miscellaneous Language Features
.RS 4
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fB$DIALECT\fR intrinsic special variable
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Multiple consecutive pluses or minuses after the E in E notation are allowed. The fact that they are illegal in numlits but string coercion is expected to ignore the signs makes it impossible to fix, because the MDC couldn't find a sensible set of numeric coercion rules with two hands and a flashlight.
.RE

.RE

.SH SUPPORTED CHARACTER SET PROFILES
.RS 4
Supported character set profiles are:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBM\fR
.RE
.RE

.SH $SYSTEM
Uniqueness of \fB$SYSTEM\fR is guaranteed by combining the FreeM vendor ID (49) with the short form of the system hostname and a \fIUUIDv4\fR identifier, generated for each FreeM environment when it is initially configured.

\fB$SYSTEM\fR looks like this:

.EX
49,"hesperos:931fac9d-b2b3-4e86-adb5-6c248b87d6ae"
.EE
.SH DISABLING NONSTANDARD FEATURES
Standards conformance may be imrpoved somewhat in certain contexts by setting the \fB$DIALECT\fR intrinsic special variable to \fBM77\fR, \fBM84\fR, \fBM90\fR, \fBM95\fR, \fBMDS\fR, or \fBM5\fR.

See \fIThe FreeM Manual\fR (\fBinfo freem\fR) for further information.
.SH AUTHOR
Written by Serena Willis (snw@coherent-logic.com)

.SH COPYRIGHT
Copyright (C) 2025 Coherent Logic Development LLC

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover texts, and with no Back-Cover Texts.

.SH "SEE ALSO"
.PP
\fBfreem\fR(1),
\fBfmadm\fR(8),
\fBfreem.conf\fR(5),
\fBenv.conf\fR(5)


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>