File:  [Coherent Logic Development] / freem / doc / freem_conformance.1
Revision 1.10: download - view: text, annotated - select for diffs
Mon May 19 13:14:35 2025 UTC (2 months, 2 weeks ago) by snw
Branches: MAIN
CVS tags: HEAD
Bump version

    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>