FazBrowse Wikipedia Viewer | Main Page |
Search Wikipedia:
|
Viewing: https://en.wikipedia.org/wiki/Systems_Programming_Language

Systems Programming Language

Systems Programming Language
Paradigmsprocedural, imperative, structured
FamilyALGOL
First appeared1972;54 years ago (1972)
Influenced by
ALGOL 60, ESPOL
Influenced
ZSPL, Micro-SPL, Action!

Systems Programming Language, often shortened to SPL but sometimes known as SPL/3000, was a procedurally-oriented programming language written by Hewlett-Packard for the HP 3000 minicomputer line and first introduced in 1972. SPL was used to write the HP 3000's primary operating system, Multi-Programming Executive (MPE). Similar languages on other platforms were generically referred to as system programming languages, confusing matters.

Originally known as Alpha Systems Programming Language, named for the development project that produced the 3000-series, SPL was designed to take advantage of the Alpha's stack-based processor design. It is patterned on ESPOL, a similar ALGOL-derived language used by the Burroughs B5000 mainframe systems, which also influenced a number of 1960s languages like PL360 and JOVIAL.

Through the mid-1970s, the success of the HP systems produced a number of SPL offshoots. Examples include ZSPL for the Zilog Z80 processor, and Micro-SPL for the Xerox Alto. The latter inspired Action! for Atari 8-bit computers, which was fairly successful. The latter more closely followed Pascal syntax, losing some of SPL's idiosyncrasies.

SPL was widely used during the lifetime of the original 16-bit version of the HP 3000 platform. In the 1980s, the HP 3000 and MPE were reimplemented in an emulator running on the PA-RISC-based HP 9000 platforms. HP promoted Pascal as the favored system language on PA-RISC and did not provide an SPL compiler. This caused code maintenance concerns, and 3rd party SPL compilers were introduced to fill this need.

$CONTROL SUBPROGRAM compiler directive at the top of the file.

The language provided the PROCEDURE and VALUE indicates that this variable is "pass-by-value" and therefore changes to it inside the procedure will not be seen by the caller. The procedure sets its return value by an assignment statement to its name:

FACT := expression;

Although frowned upon, ALGOL and Pascal allowed code to be labeled using a leading name ending with a colon, which could then be used for the target of loops and ENTRY statement which allowed these labels to be further defined as "entry points" that could be accessed from the command line. Labels named in the entry statement(s) were exposed to the operating system and could be called from the RUN command. For instance, one could write a program containing string functions to convert to uppercase or lowercase, and then provide ENTRY points for these two. This could be called from the command line as DOUBLE is a 32-bit integer, not a floating-point type. BYTE is used for character processing, consisting of a 16-bit machine word holding a single 8-bit character in the least-significant bits. Arrays of type BYTE pack two 8-bit characters per 16-bit machine word. LOGICAL is somewhat wasteful of memory when used only to store a single binary digit, although SPL offers bit string manipulation as an alternative.

Like C, data is weakly typed, memory locations and variable storage are intermixed concepts, and one can access values directly through their locations. For instance, the code:

INTEGER A,B,C LOGICAL D=A+2

defines three 16-bit integer variables, A, B and C, and then a LOGICAL, also a 16-bit value. The POINTER modifier to any variable declaration, and the memory location of a variable dereferenced with the @ can be used on either side of the assignment; P:=A puts the value of A into the location currently pointed to by P.

In a similar fashion, SPL includes C-like array support in which the index variable is a number-of-words offset from the memory location set for the initial variable. Unlike C, SPL only provided one-dimensional arrays, and used parentheses as opposed to brackets. Variables could also be declared INTEGER. For instance, 1234D was a REAL and INTEGER A:=10. Note the use of the assign-to rather than is-a. Additionally, SPL had a $CONTROL SEGMENT=asegmentname compiler directive which defined which segment the following code should be placed in. The default was A.(8:15) returned the lower byte of the word storing A. This format could be used to split and merge bits as needed. Additionally, additional operations were provided for shifts and rotates, and could be applied to any variable with the BEGIN and INTEGER X,Y,Z is not considered part of the code itself, it is indicating the type of the three parameters being passed in on the line above and is considered part of that line.

BEGIN INTEGER A:=0, B, C:=1; PROCEDURE N(X,Y,Z); INTEGER X,Y,Z; X:=X*(Y+Z); FOR B:=1 UNTIL 20 DO N(A,B,C); END.

References

edit

Citations

edit
Baker, Henry; Parker, Clinton (September 1979). "Micro-SPL" (PDF).
  • ↑ Edler, Christopher (November 1995). "The Strongest Castle: The Rise, Fall and Rise of the HP 3000". The Analytical Engine. 3 (1). ISSN 1071-6351. Archived from the original on 3 February 2002.
  • Systems Programming Language reference manual (PDF). Hewlett-Packard. February 1984.
  • Hewlett-Packard software
    Applications
    and utilities
    Database
    File systems
    and formats
    Operating systems
    and environments
    Protocols
    and languages
    • Asterisk (*) denotes software continued by HP Inc.
    • Double asterisk (**) denotes software continued by Hewlett Packard Enterprise
    • Dagger (†) denotes software divested and sold off
    • Double dagger (‡) denotes third-party software

    View original on Wikipedia | Back | FazBrowse Home