Difference between revisions of "Conformance Clause"

From FreeM Wiki
Jump to navigation Jump to search
 
(8 intermediate revisions by the same user not shown)
Line 6: Line 6:
  
 
This article attempts to track missing and/or nonstandard features in the current <code>main</code> branch of FreeM. It is a work-in-progress.
 
This article attempts to track missing and/or nonstandard features in the current <code>main</code> 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:
 +
 +
<pre>
 +
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
 +
</pre>
 +
 +
Aliases used in pass-by-reference can also reference entire subtrees instead of just the root node:
 +
 +
<pre>
 +
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!
 +
</pre>
 +
 +
== 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:
 +
 +
* <code>FOR</code> loops in FreeM support argument indirection
 +
* FreeM supports list indirection, such as <code>S X="1,2,3",ARGS="X,"","",2" W $P(@ARGS)</code>, which will output <code>2</code>
  
 
== MERGE ==
 
== MERGE ==
Line 31: Line 76:
 
== Routines ==
 
== Routines ==
 
* Dotted routine names are nonstandard
 
* 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 <code>^$LOCK</code> 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 ==
 
== Miscellaneous Language Features ==
Line 37: Line 87:
 
* <code>CONST</code> is nonstandard
 
* <code>CONST</code> is nonstandard
 
* <code>MAP</code> is nonstandard
 
* <code>MAP</code> is nonstandard
 +
* <code>WATCH</code> is nonstandard
 +
* <code>THROW</code> is nonstandard
 +
* <code>$DIALECT</code> is nonstandard

Latest revision as of 20:40, 3 December 2024

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!

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 output 2

MERGE

  • MERGE should be implemented as M[ERGE] postcond SP L mergeargument, but is currently implemented as M[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 nonstandard
  • WITH and USING are nonstandard
  • CONST is nonstandard
  • MAP is nonstandard
  • WATCH is nonstandard
  • THROW is nonstandard
  • $DIALECT is nonstandard