File:  [Coherent Logic Development] / freem / doc / freem_conformance.1
Revision 1.6: download - view: text, annotated - select for diffs
Wed May 7 19:03:06 2025 UTC (10 months, 3 weeks ago) by snw
Branches: MAIN
CVS tags: HEAD
Release 0.64.0, prepare to begin shared memory rewrite

    1: .\"
    2: .\"   $Id: freem_conformance.1,v 1.6 2025/05/07 19:03:06 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.6  2025/05/07 19:03:06  snw
   24: .\"   Release 0.64.0, prepare to begin shared memory rewrite
   25: .\"
   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: .\"
   29: .\"   Revision 1.4  2025/05/05 04:48:17  snw
   30: .\"   Update conformance document
   31: .\"
   32: .\"   Revision 1.3  2025/05/03 03:07:55  snw
   33: .\"   Documentation updates
   34: .\"
   35: .\"   Revision 1.2  2025/05/02 16:25:46  snw
   36: .\"   -m
   37: .\"
   38: .\"   Revision 1.1  2025/05/02 15:19:32  snw
   39: .\"   Add conformance clause man page
   40: .\"
   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: 
   49: FreeM version 0.64.0 conforms to X11.1-1995, as modified by the following MDC documents:
   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
  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.
  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
  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: 
  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>