DG/L
| Industry | Computer hardware and software |
|---|---|
| Founded | 1968 |
| Headquarters | United States |
| Products | DG/L programming language, Nova minicomputer, Eclipse minicomputer, Eclipse/MV minicomputer |
DG/L is a programming language created by Data General Corporation during the late 1970s and early 1980s for use on the Nova, Eclipse, and Eclipse/MV minicomputers. Introduced in 1977, its design was derived from ALGOL 60.
Description
Data General provided two variations of ALGOL:
- Data General Extended ALGOL-60 operated on the 16-bit Nova and Eclipse machines, producing code for these platforms. Its compiler offered limited optimization capabilities and was restricted to the RDOS operating system.
- DG/L originated from a heavily adapted version of the Fortran 5 optimizing compiler. It executed on Eclipse and Eclipse/MV systems but generated optimized machine code compatible with Nova, Eclipse, and Eclipse/MV hardware. DG/L supported multiple operating systems, including RDOS, AOS, and AOS/VS.
The language extended ALGOL 60 by incorporating support for integer types, single- and double-precision floating-point numbers, complex numeric types, fixed-length and arbitrary precision strings, as well as comprehensive arbitrary precision binary-coded decimal (BCD) arithmetic applied to strings. Although it introduced sophisticated control flow constructs uncommon at the time, DG/L did not provide facilities for user-defined data structures.
Initially named ALGOL/5, the language was rebranded as DG/L prior to its commercial release around August 1977. Before becoming publicly available, Data General utilized DG/L internally in the development of critical software products. The company marketed it as the pioneering high-level structured programming language tailored for minicomputer environments.
DG/L included an extensive runtime library and found application in systems programming tasks both within Data General and among external users. A notable feature was its ability to compile a single source code base across various Data General operating systems (RDOS, AOS, AOS/VS) and hardware models (Nova, Eclipse, Eclipse/MV). This portability was facilitated through conditional compilation directives and compiler options, supporting organizations managing legacy DG systems while adopting newer AOS/VS development tools.
Although "DG/L" stood for "Data General Language," this designation eventually impeded market acceptance by implying exclusivity to Data General hardware despite its strong ALGOL lineage. Following its initial launch focused on 16-bit architectures, the language underwent multiple yearly revisions. By 1987, DG/L had mostly fallen out of favor with customers but continued to receive maintenance updates. By 1989, it had nearly vanished from commercial use and was no longer featured in company documentation.
Comparison with ALGOL 60
Appendix A of Data General's 1982 edition of the DG/L Language Reference Manual characterizes DG/L as an extension of ALGOL 60 augmented with additional "data types, operations and statements absent from ALGOL 60." Principal distinctions include:
ALGOL 60 features unsupported in DG/L
| ALGOL 60 feature | ALGOL 60 report paragraph | DG/L remarks |
|---|---|---|
| Call by name | para. 4.7.3.2 | DG/L permits procedure parameters typed as <syntaxhighlight lang="text" class="" style="" inline="1">PROCEDURE</syntaxhighlight>, allowing procedures to be passed by name. |
| Nested quotation marks in literals | 2.6.1 and 2.4.1 | Not implemented |
| Unlimited identifier length | DG/L requires identifiers to be unique within their first 32 characters | |
| Dual division operators | 3.3.4.2 | DG/L employs <syntaxhighlight lang="text" class="" style="" inline="1">/</syntaxhighlight> for both integer and real division; integer division is default unless a global <syntaxhighlight lang="text" class="" style="" inline="1">/R</syntaxhighlight> flag is set |
| Scientific notation using <syntaxhighlight lang="text" class="" style="" inline="1">10 <integer></syntaxhighlight> | 2.5.1 | DG/L uses <syntaxhighlight lang="text" class="" style="" inline="1">E <integer></syntaxhighlight> or <syntaxhighlight lang="text" class="" style="" inline="1">D <integer></syntaxhighlight> formats for scientific notation |
| Programs consisting solely of a <compound statement> | 4.1.1 | Not supported |
| Non-ASCII boolean operators (e.g., <syntaxhighlight lang="text" class="" style="" inline="1">⋀</syntaxhighlight>, <syntaxhighlight lang="text" class="" style="" inline="1">¬</syntaxhighlight>) | 3.4.6.1 | DG/L substitutes keywords such as <syntaxhighlight lang="text" class="" style="" inline="1">AND</syntaxhighlight>, <syntaxhighlight lang="text" class="" style="" inline="1">OR</syntaxhighlight>, <syntaxhighlight lang="text" class="" style="" inline="1">NOT</syntaxhighlight>, along with operators like <syntaxhighlight lang="text" class="" style="" inline="1"><></syntaxhighlight> and <syntaxhighlight lang="text" class="" style="" inline="1">XOR</syntaxhighlight> |
| Embedding non-Algol code within Algol procedures | 4.7.8 | External routines are presumed to be DG/L only, except for FORTRAN 5 mathematical library calls |
Extensions
DG/L incorporated numerous enhancements beyond the standard ALGOL 60 features, many of which were carried over from Data General's previous ALGOL versions:
String operations
- – extracting substrings
- – locating substring positions
- – determining string length
- – setting the current string length (e.g., )
- – operator for string concatenation
- Arithmetic operations on strings representing numbers (e.g., adding numeric strings)
- Conversion functions between boolean, integer, real, pointer, and bit types
- Handling of octal numeral system and ASCII character symbols enclosed in brackets
Input and output
- Capability for fully formatted output and unformatted input across all data types
- Access to system calls from Data General's RDOS, AOS, and AOS/VS operating systems
- Cache memory management with optional virtual memory support
- Compatibility with CLRE and INFOS II database management systems
Additional extensions
- Code section conditional compilation using
- Support for end-of-line comments via and block comments through
- Improved syntax for control structures such as do, for, and if (e.g., )
- Expanded data types including , , 16- and 32-bit integers, 32- and 64-bit floating-point numbers, alongside arbitrary precision arithmetic
- Inclusion of literals like
- Provision for global data variables
- Facilities for Error trapping
- Integration of external procedures and data elements
- Cluster declarations akin to Pascal units, allowing separately compiled clusters of procedures and data
- Usage of pointers with and variables across different types
- Implementation of an exclusive OR operator ()
- Support for multitasking environments
References
- Works referenced
- DG/L Reference Manual, Data General Corporation, October 1977. Part no. 093-000229-01.
- DG/L Runtime Library User's Manual, Data General Corporation, October 1977. Part no. 093-000159-00.