Conformance Clause
Contents
Conformance Policy
FreeM attempts to comply with ANSI X11.1-1995 and the unpublished Millennium Draft Standard (MDS) from the MUMPS Development Committee, in routine buffers where the dialect setting is set to a particular version of the standard.
Routine buffers in FREEM
dialect enable all nonstandard extensions.
This article attempts to track missing and/or nonstandard features in the current main
branch of FreeM. It is a work-in-progress.
Aliases
FreeM supports aliases for local variables that can reference either the root node or a subtree:
USER> S X(3)="harps" USER> S J=.X(3) USER> S J(8)=17 USER> ZWR X X(3)=harps X(3,8)=17
Aliases used in pass-by-reference can also reference entire subtrees instead of just the root node:
USER> ZL TEST USER> ZP TEST ; S X(3)=4 D SUBR(.X(3)) ZWR X QUIT ; SUBR(A) ; S A(4)="thwack!" QUIT USER> D ^TEST X(3)=4 X(3,4)=thwack!
Environments
In FreeM, the namespace is roughly equivalent to what the standard refers to as an environment. However, FreeM uses the term environment to refer to a collection of namespaces and processes.
Indirection
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:
FOR
loops in FreeM support argument indirection- FreeM supports list indirection, such as
S X="1,2,3",ARGS="X,"","",2" W $P(@ARGS)
, which will output2
MERGE
MERGE
should be implemented asM[ERGE] postcond SP L mergeargument
, but is currently implemented asM[ERGE] postcond SP mergeargument
KVALUE/KSUBSCRIPTS
- Only the inclusive forms of these commands are currently implemented
Transaction Processing
- Restartable transactions are not complete
Event Processing
ETRIGGER
is not yet implemented- Of the event classes defined in the MDS, only the
INTERRUPT
evclass is implemented - The
TRIGGER
'evclass' is nonstandard - The
^$EVENT
SSVN is incomplete - Environment-wide events defined in
^$SYSTEM
are nonstandard
Globals
Routines
- Dotted routine names are nonstandard
Locking
- The first subscript of ^$LOCK collates according to the rules for global and local subscripts, not as an nref, as FreeM uses globals as backing store for SSVNs. If someone wants to write the code to make this conformant, the maintainer will accept it.
The reason is that FreeM treats the ^$LOCK
subscript as a single, normal ASCII string, and has no concept of subscripts existing within it, so canonical numbers don't really sort correctly. - Serena
Miscellaneous Language Features
ASSERT
is nonstandardWITH
andUSING
are nonstandardCONST
is nonstandardMAP
is nonstandardWATCH
is nonstandardTHROW
is nonstandard$DIALECT
is nonstandard