Hello everyone,
I have pushed out a patch release (V1.75.1) of RSM to fix the issues that were
reported in V1.75.0. Because of a small bug in the bytecode format in V1.75.0,
you might need to recompile your routines, once you upgrade to V1.75.1. You
can do so easily with `do ^%RECOMP`.
One thing I haven't really mentioned is that I maintain a branch in RSM where I
have implemented a number of the MDC Type A extensions that were finished
and set to be part of the Millennium Draft Standard in 1999. Since that standard
was never ratified, these features never made their way in to many of the M
implementations. So I've been adding the extensions that I think are worth trying
out, for a new M Standard, should we ever get there. These extensions, being Type
A, will be the first inclusions in a new standard.
So if you are interested in playing around with them, you can checkout the
`m-2021-standard` branch in the RSM repo. A few of the features that have been
added and are available in RSM V1.75.1 T1 (the T1 marks this as a test version)
are as follows:
1) MDC type A extension X11/95-31 Kill Indirection
This implements argument indirection for the exclusive kill command:
RSM [Dwarfman]> set a="@b",b="x",x=1
RSM [Dwarfman]> write $&%zwrite
a=@b
b=x
x=1
RSM [Dwarfman]> kill (@a)
RSM [Dwarfman]> write $&%zwrite
x=1
RSM [Dwarfman]>
2) MDC type A extension X11/94-47 New SVN Addition: $Test
This implements new $test:
RSM [Dwarfman]> if 1 xecute "if 0" write $test
0
RSM [Dwarfman]> if 1 xecute "new $test if 0" write $test
1
RSM [Dwarfman]>
3) MDC type A extension X11/94-4 Two Character Operators
This implements new operators (>=, <=, ]=, and ]]=):
RSM [Dwarfman]> write 5>=4
1
RSM [Dwarfman]> write 5>=5
1
RSM [Dwarfman]> write 5>=6
0
RSM [Dwarfman]> write 5<=4
0
RSM [Dwarfman]> write 5<=5
1
RSM [Dwarfman]> write 5<=6
1
RSM [Dwarfman]> write 5]=5
1
RSM [Dwarfman]> write 5]=10
1
RSM [Dwarfman]> write 5]=50
0
RSM [Dwarfman]> write 5]]=5
1
RSM [Dwarfman]> write 5]]=10
0
RSM [Dwarfman]> write 5]]=50
0
4) MDC type A extension X11/97-22 Set $Qsubscript Pseudo Function
This implements the ability to use set $qsubscript, to build up name references:
RSM [Dwarfman]> set name=$name(^name(1,2,3))
RSM [Dwarfman]> write name
^name(1,2,3)
RSM [Dwarfman]> set $qsubscript(name,0)="^global"
RSM [Dwarfman]> write name
^global(1,2,3)
RSM [Dwarfman]> set $qsubscript(name,2)="two"
RSM [Dwarfman]> write name
^global(1,"two",3)
5) MDC type A extension X11/93-39 $Reference
This implements the ability to set $reference:
RSM [Dwarfman]> write $reference
RSM [Dwarfman]> write $data(^global)
0
RSM [Dwarfman]> write $reference
^global
RSM [Dwarfman]> set $reference="^name(1)"
RSM [Dwarfman]> write $reference
^name(1)
RSM [Dwarfman]> kill ^garbage(1,"two",3)
RSM [Dwarfman]> write $reference
^garbage(1,"two",3)
RSM [Dwarfman]> set $reference=""
RSM [Dwarfman]> write $reference
RSM [Dwarfman]>
6) MDC type A extension X11/96-27 Xor Operator
This implements the exclusive or operator:
RSM [Dwarfman]> write 0!!0
0
RSM [Dwarfman]> write 0!!1
1
RSM [Dwarfman]> write 1!!0
1
RSM [Dwarfman]> write 1!!1
0
RSM [Dwarfman]> write 0'!!0
1
RSM [Dwarfman]> write 0'!!1
0
RSM [Dwarfman]> write 1'!!0
0
RSM [Dwarfman]> write 1'!!1
1
There are a few other minor corrections to some functions and error codes and
such, and more Type A extensions will be added over time. This might not matter
to most people, but one of the goals of a reference implementation, which is what
RSM is, is to provide a playground to play around with new ideas in the language, to
see how folks like them. I will also be adding the Open M Interconnect (OMI) and M
Windowing Application Programming Interface (MWAPI) standards, as well as much
more, over time. Thank you.