File:  [Coherent Logic Development] / freem / doc / freem_conformance.1
Revision 1.9: download - view: text, annotated - select for diffs
Sat May 17 19:35:30 2025 UTC (3 weeks ago) by snw
Branches: MAIN
CVS tags: HEAD
Add remove_freem.sh script

.\"
.\"   $Id: freem_conformance.1,v 1.9 2025/05/17 19:35:30 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.9  2025/05/17 19:35:30  snw
.\"   Add remove_freem.sh script
.\"
.\"   Revision 1.8  2025/05/16 13:22:58  snw
.\"   Bump version to account for shared memory changes
.\"
.\"   Revision 1.7  2025/05/08 12:52:53  snw
.\"   Begin development on 0.65.0
.\"
.\"   Revision 1.6  2025/05/07 19:03:06  snw
.\"   Release 0.65.1-rc0, prepare to begin shared memory rewrite
.\"
.\"   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.65.1-rc0 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.
.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>