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