Annotation of freem/doc/freem_conformance.1, revision 1.8
1.1 snw 1: .\"
1.8 ! snw 2: .\" $Id: freem_conformance.1,v 1.7 2025/05/08 12:52:53 snw Exp $
1.1 snw 3: .\"
4: .\" Author: Serena Willis <snw@coherent-logic.com>
5: .\" Copyright (C) 2025 Coherent Logic Development LLC
6: .\"
7: .\" This file is part of FreeM.
8: .\"
9: .\" FreeM is free software: you can redistribute it and/or modify
10: .\" it under the terms of the GNU Affero Public License as published by
11: .\" the Free Software Foundation, either version 3 of the License, or
12: .\" (at your option) any later version.
13: .\"
14: .\" FreeM is distributed in the hope that it will be useful,
15: .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
16: .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17: .\" GNU Affero Public License for more details.
18: .\"
19: .\" You should have received a copy of the GNU Affero Public License
20: .\" along with FreeM. If not, see <https://www.gnu.org/licenses/>.
21: .\"
1.2 snw 22: .\" $Log: freem_conformance.1,v $
1.8 ! snw 23: .\" Revision 1.7 2025/05/08 12:52:53 snw
! 24: .\" Begin development on 0.65.0
! 25: .\"
1.7 snw 26: .\" Revision 1.6 2025/05/07 19:03:06 snw
1.8 ! snw 27: .\" Release 0.65.1-rc0, prepare to begin shared memory rewrite
1.7 snw 28: .\"
1.6 snw 29: .\" Revision 1.5 2025/05/05 23:18:29 snw
30: .\" Update conformance document to cover the idiotic numeric coercion rules around E notation
31: .\"
1.5 snw 32: .\" Revision 1.4 2025/05/05 04:48:17 snw
33: .\" Update conformance document
34: .\"
1.4 snw 35: .\" Revision 1.3 2025/05/03 03:07:55 snw
36: .\" Documentation updates
37: .\"
1.3 snw 38: .\" Revision 1.2 2025/05/02 16:25:46 snw
39: .\" -m
40: .\"
1.2 snw 41: .\" Revision 1.1 2025/05/02 15:19:32 snw
42: .\" Add conformance clause man page
1.1 snw 43: .\"
1.2 snw 44: .\"
45: .TH freem_conformance 1 "2 May 2025" FreeM "FreeM User Manual"
46: .SH NAME
47:
48: freem_conformance - FreeM MDC Conformance Document
49:
50: .SH SYNOPSIS
51:
1.8 ! snw 52: FreeM version 0.65.1-rc0 conforms to X11.1-1995, as modified by the following MDC documents:
1.2 snw 53:
54: .sp
55: .RS 4
56: .ie n \{\
57: \h'-04'\(bu\h'+03'\c
58: .\}
59: .el \{\
60: .sp -1
61: .IP \(bu 2.3
62: .\}
63: X11/1998-28 Event Processing (MDC status A)
64: .RE
65: .sp
66: .RS 4
67: .ie n \{\
68: \h'-04'\(bu\h'+03'\c
69: .\}
70: .el \{\
71: .sp -1
72: .IP \(bu 2.3
73: .\}
74: X11/1998-31 IF THEN & ELSE (MDC status A)
75: .RE
76: .sp
77: .RS 4
78: .ie n \{\
79: \h'-04'\(bu\h'+03'\c
80: .\}
81: .el \{\
82: .sp -1
83: .IP \(bu 2.3
84: .\}
85: X11/95-118 Undefined ssvns (MDC status A)
86: .RE
87: .sp
88: .RS 4
89: .ie n \{\
90: \h'-04'\(bu\h'+03'\c
91: .\}
92: .el \{\
93: .sp -1
94: .IP \(bu 2.3
95: .\}
96: X11/96-13 Portable length limit of names (MDC status A)
97: .RE
98:
99: with the following exceptions:
100: .SH EXCEPTIONS
101:
102: .TP
103: Aliases
104: .RS 4
105: FreeM supports aliases for local variables that can reference either the root node or a subtree:
106:
107: .EX
108: USER> S X(3)="harps"
109:
110: USER> S J=.X(3)
111:
112: USER> S J(8)=17
113:
114: USER> ZWR X
115: X(3)=harps
116: X(3,8)=17
117: .EE
118:
119: Aliases used in pass-by-reference can also reference entire subtrees instead of just the root node:
120:
121: .EX
122: USER> ZL TEST
123:
124: USER> ZP
125:
126: TEST ;
127: S X(3)=4
128: D SUBR(.X(3))
129: ZWR X
130: QUIT
131: ;
132: SUBR(A) ;
133: S A(4)="thwack!"
134: QUIT
135:
136: USER> D ^TEST
137: X(3)=4
138: X(3,4)=thwack!
139: .EE
140: .RE
141:
142: .TP
143: Environments
144: .RS 4
145: 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.
146: .RE
147: .TP
148: Indirection
149: .RS 4
150: 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:
151: .sp
152: .RS 4
153: .ie n \{\
154: \h'-04'\(bu\h'+03'\c
155: .\}
156: .el \{\
157: .sp -1
158: .IP \(bu 2.3
159: .\}
160: FOR loops in FreeM support argument indirection
161: .RE
162: .sp
163: .RS 4
164: .ie n \{\
165: \h'-04'\(bu\h'+03'\c
166: .\}
167: .el \{\
168: .sp -1
169: .IP \(bu 2.3
170: .\}
171: FreeM supports list indirection, such as \fBS X="1,2,3",ARGS="X,"","",2" W $P(@ARGS)\fR, which will output \fB2\fR
172: .RE
173: .RE
174: .TP
175: \fBMERGE\fR
176: .RS 4
177: \fBMERGE\fR should be implemented as \fB[MERGE] postcond SP L mergeargument\fR, but is currently implemented as \fBM[ERGE] postcond SP mergeargument\fR.
178: .RE
179: .TP
180: \fBKVALUE\fR and \fBKSUBSCRIPTS\fR
181: .RS 4
182: Only the inclusive forms of these commands are currently implemented.
183: .RE
184: .TP
185: Transaction Processing
186: .RS 4
187: Restartable transactions are not implemented.
188: .RE
189: .TP
190: Event Processing
191: .RS 4
192: .sp
193: .RS 4
194: .ie n \{\
195: \h'-04'\(bu\h'+03'\c
196: .\}
197: .el \{\
198: .sp -1
199: .IP \(bu 2.3
200: .\}
201: \fBETRIGGER\fR is not implemented
202: .RE
203: .sp
204: .RS 4
205: .ie n \{\
206: \h'-04'\(bu\h'+03'\c
207: .\}
208: .el \{\
209: .sp -1
210: .IP \(bu 2.3
211: .\}
212: Of the event classes defined in \fIX11/1998-28\fR, only the \fBINTERRUPT\fR \fIevclass\fR is implemented
213: .RE
214: .sp
215: .RS 4
216: .ie n \{\
217: \h'-04'\(bu\h'+03'\c
218: .\}
219: .el \{\
220: .sp -1
221: .IP \(bu 2.3
222: .\}
223: The \fBTRIGGER\fR \fIevclass\fR is nonstandard
224: .RE
225: .sp
226: .RS 4
227: .ie n \{\
228: \h'-04'\(bu\h'+03'\c
229: .\}
230: .el \{\
231: .sp -1
232: .IP \(bu 2.3
233: .\}
234: The \fB^$EVENT\fR \fIssvn\fR is incomplete
235: .RE
236: .sp
237: .RS 4
238: .ie n \{\
239: \h'-04'\(bu\h'+03'\c
240: .\}
241: .el \{\
242: .sp -1
243: .IP \(bu 2.3
244: .\}
245: Environment-wide events defined in \fB^$SYSTEM\fR are nonstandard
246: .RE
247: .RE
248: .TP
249: \fBDO\fR and \fBGOTO\fR
250: .RS 4
1.3 snw 251: 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.
1.2 snw 252: .RE
253: .TP
254: \fBIF\fR and \fBELSE\fR
255: .RS 4
256: Both of these commands allow a \fIpostcondition\fR in FreeM.
257: .RE
258:
259: \fBLOCK\fR
260: .RS 4
261: 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.
262: .RE
263: .TP
264: Miscellaneous Language Features
265: .RS 4
266: .sp
267: .RS 4
268: .ie n \{\
269: \h'-04'\(bu\h'+03'\c
270: .\}
271: .el \{\
272: .sp -1
273: .IP \(bu 2.3
274: .\}
275: \fB$DIALECT\fR intrinsic special variable
276: .RE
1.5 snw 277: .sp
278: .RS 4
279: .ie n \{\
280: \h'-04'\(bu\h'+03'\c
281: .\}
282: .el \{\
283: .sp -1
284: .IP \(bu 2.3
285: .\}
286: 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.
287: .RE
288:
1.2 snw 289: .RE
290:
291: .SH SUPPORTED CHARACTER SET PROFILES
292: .RS 4
293: Supported character set profiles are:
294: .sp
295: .RS 4
296: .ie n \{\
297: \h'-04'\(bu\h'+03'\c
298: .\}
299: .el \{\
300: .sp -1
301: .IP \(bu 2.3
302: .\}
303: \fBM\fR
304: .RE
305: .RE
306:
307: .SH $SYSTEM
308: 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.
309:
310: \fB$SYSTEM\fR looks like this:
311:
312: .EX
313: 49,"hesperos:931fac9d-b2b3-4e86-adb5-6c248b87d6ae"
314: .EE
315: .SH DISABLING NONSTANDARD FEATURES
316: 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.
317:
318: See \fIThe FreeM Manual\fR (\fBinfo freem\fR) for further information.
319: .SH AUTHOR
320: Written by Serena Willis (snw@coherent-logic.com)
321:
322: .SH COPYRIGHT
323: Copyright (C) 2025 Coherent Logic Development LLC
324:
325: 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.
326:
327: .SH "SEE ALSO"
328: .PP
329: \fBfreem\fR(1),
330: \fBfmadm\fR(8),
331: \fBfreem.conf\fR(5),
332: \fBenv.conf\fR(5)
333:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>