Mary (programming language)
Mary is a programming language designed and implemented by Mark Rain at RUNIT in Trondheim, Norway during the 1970s. It borrowed many features from ALGOL 68 but was designed for systems programming, with a subset of operations being reserved for higher-level usage.
An unusual feature of its syntax was that expressions were constructed using the conventional infix operators, but all of them had the same precedence and evaluation went from left to right unless there were brackets. Assignment had the destination on the right and assignment was considered just another operator.
Similar to C, several language features appear to have existed to allow producing reasonably well optimised code, despite a quite primitive code generator in the compiler. These included operators similar to the
+= et alter in C and explicit register declarations for variables.Notable features:
- Dataflow syntax – values flow from left to right, including assignment
- Expression-based; most constructs could be used in expressions: blocks, IF, CASE, etc.
- Text-based recursive macros
- Overloaded user-defined operators, not constrained to predefined identifiers as in C++
- Automatic building and dereferencing of pointers from type context
- Scalar range types
- Array and set enumeration in loop iterators
- Dynamic array descriptors
Mary is no longer maintained.
Example
BEGININT i := 10; %% Variable with initial value.
REF INT ri := i; %% Pointer initialized to point to i.
INT j := 11;
j :- REF INT =: ri; %% Type conversion and assignment
%% ri now points to j.
i =: ;
%% Assignment and type conversion
%% ri points to j so j is changed.
IF j > 10 %% Conditional statement with result
THEN %% used inside an arithmetic expression.
1
ELSE
2
FI + j =: j;
END