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