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