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>