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