RTL/2
{{Short description|Programming language}}
{{Use dmy dates|date=November 2020}}
{{Use British English|date=November 2020}}
{{Infobox programming language
| name = RTL/2
| paradigms = Multi-paradigm: imperative, structured, real-time
| family = ALGOL
| designer = J.G.P. Barnes
| developer = Imperial Chemical Industries
| released = {{Start date and age|1972}}
| latest release version =
| latest release date =
| typing = static, strong, safe, structural
| scope = Lexical
| programming language =
| discontinued = Yes
| operating system = Cross- (multi-) platformRSX-11M, VMS
| license =
| dialects = none
| influenced by = ALGOL 68
| influenced =
}}
RTL/2 (Real-Time Language) is a discontinued high-level programming language for use in real-time computing, developed at Imperial Chemical Industries, Ltd. (ICI), by J.G.P. Barnes. It was originally used internally in ICI but was distributed by SPL International in 1974.{{cite journal |last=Barnes |first=J.G.P. |date=September 1980 |title=The Standardisation of RTL/2 |journal=Software: Practice and Experience |volume=10 |issue=9 |pages=707–719 |publisher=Wyley|doi=10.1002/spe.4380100904 |s2cid=5050804 }}
It was based on concepts from ALGOL 68, and intended to be small and simple.RTL/2 Language Specification{{cite web |url=http://hopl.murdoch.edu.au/showlanguage2.prx?exp=596#_jmp0_ |url-status=dead |archive-url=https://web.archive.org/web/20110310112048/http://hopl.murdoch.edu.au/showlanguage2.prx?exp=596 |archive-date=10 March 2011 |title=The Encyclopedia of Computer Languages}}{{cite book |last=Barnes |first=J.G.P. |date=1 January 1976 |title=RTL/2 design and philosophy |publisher=Heyden |isbn=978-0855012243}} RTL/2 was standardised in 1980 by the British Standards Institution.{{cite book |author= |date=30 September 1980 |url=https://shop.bsigroup.com/ProductDetail/?pid=000000000000133906 |title=BS 5904:1980: Specification for computer programming language RTL/2 |website=British Standards Institution |isbn=978-0580114410}}
Language overview
The data types in RTL/2 were strongly typed, with separate compiling. The compilation units contained one or more items named bricks, i.e.:
- Procedure bricks
- Data bricks
- Stack bricks
A procedure brick was a procedure, which may or may not return a (scalar) value, have (scalar) parameters, or have local (scalar) variables. The entry mechanism and implementation of local variables was reentrant. Non-scalar data could only be accessed via reference (so-called REF variables were considered scalar).
A data brick was a named static collection of scalars, arrays and records. There was no heap or garbage collection, so programmers had to implement memory management manually.
A stack brick was an area of storage reserved for running all the procedures of a single process and contained the call stack, local variables and other housekeeping items. The extent to which stack bricks were used varied depending on the host environment in which RTL/2 programs ran.
Access to the host environment of an RTL/2 program was provided via special procedure and data bricks called SVC procedures and SVC data. These were accessible in RTL/2 but implemented in some other language in the host environment.
Hello World
TITLE Hello World;
LET NL=10;
EXT PROC(REF ARRAY BYTE) TWRT;
ENT PROC RRJOB() INT;
TWRT("Hello World#NL#");
RETURN(1);
ENDPROC;
Embedded assembly
RTL/2 compiles to assembly language and provides the CODE
statement to allow including assembly language in RTL/2 source code. This is only available when compiled with a systems programming option (CN:F)
The CODE
statement takes two operands: the number of bytes used by the code insert and the number of bytes of stack used.
Within code statements two trip characters are used to access RTL/2 variables. These vary between different operating systems. On a Digital Equipment Corporation (DEC) PDP-11 running RSX-11M, and a VAX running VMS, the trip characters are *
and /
.
While the specifics varied by operating system the following is an example of a code insert on VAX/VMS:
CODE 6,0;
JMP CODE_ENT ; This code insert can be set to a fixed length as it jumps to a new psect.
; this method is especially useful on systems such as VMS where the length of
; instructions is variable
.SAVE_PSECT ; Save current program section
.PSECT ASMB_CODE,EXE,NOWRT,LONG
CODE_ENT:
MOVL *PARAM1(AP),*COUNTER/MYDATA
JMP CODE_EX
.RESTORE_PSECT
CODE_EX:
- RTL
This code insert moves the value of a variable passed into the RTL/2 procedure into a variable named COUNTER
in a data brick named MYDATA
.
Reserved words
{{Columns-list|colwidth=10em|
{{Plainlist|
- ABS
- AND
- ARRAY
- BIN
- BLOCK
- BY
- BYTE
- CODE
- DATA
- DO
- ELSE
- ELSEIF
- END
- ENDBLOCK
- ENDDATA
- ENDPROC
- ENT
- EXT
- FOR
- FRAC
- GOTO
- HEX
- IF
- INT
- LABEL
- LAND
- LENGTH
- LET
- LOR
- MOD
- NEV
- NOT
- OCT
- OF
- OPTION
- OR
- PROC
- REAL
- REF
- REP
- RETURN
- RTL
- SHA
- SHL
- SLA
- SLL
- SRA
- SRL
- STACK
- SVC
- SWITCH
- THEN
- TITLE
- TO
- VAL
- WHILE
}}
}}
References
{{Reflist}}
= SPL documentation =
SPL published a range of documentation for RTL/2. Each such document was assigned a reference number. The following is an incomplete list.
RTL/2 Ref 1 – RTL/2 Language Specification
RTL/2 Ref 2 – Introduction to RTL/2
RTL/2 Ref 3 – RTL/2 Training Manual
RTL/2 Ref 4 – System Standards
RTL/2 Ref 5 – Stream I/O
RTL/2 Ref 18 – Hints on writing RTL/2 Programs
RTL/2 Ref 26 – Language Reference Card
RTL/2 Ref 39 – Run time environment on the PDP-11
RTL/2 Ref 63 – User Manual for the PDP-11 under RSX-11M
RTL/2 Ref 107 – VAX/VMS RTL/2 User Manual
RTL/2 REF 130 – The RTL/2 32-bit run time environment on the VAX
{{ALGOL programming}}
{{Authority control}}
{{DEFAULTSORT:RTL 2}}