In
computing
Computing is any goal-oriented activity requiring, benefiting from, or creating computing machinery. It includes the study and experimentation of algorithmic processes, and development of both hardware and software. Computing has scientific, ...
, a data descriptor is a structure containing information that describes data.
Data descriptors may be used in
compiler
In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs that ...
s, as a software structure at run time in languages like
Ada or
PL/I
PL/I (Programming Language One, pronounced and sometimes written PL/1) is a procedural, imperative computer programming language developed and published by IBM. It is designed for scientific, engineering, business and system programming. It ...
, or as a hardware structure in some computers such as
Burroughs large systems.
Data descriptors are typically used at run-time to pass argument information to called
subroutines
In computer programming, a function or subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed.
Functions may ...
. HP
OpenVMS
OpenVMS, often referred to as just VMS, is a multi-user, multiprocessing and virtual memory-based operating system. It is designed to support time-sharing, batch processing, transaction processing and workstation applications. Customers using Ope ...
and
Multics
Multics ("Multiplexed Information and Computing Service") is an influential early time-sharing operating system based on the concept of a single-level memory.Dennis M. Ritchie, "The Evolution of the Unix Time-sharing System", Communications of ...
have system-wide language-independent standards for argument descriptors. Descriptors are also used to hold information about data that is only fully known at run-time, such as a
dynamically allocated array.
Examples
The following descriptor is used by IBM ''Enterprise PL/I'' to describe a
character string
In computer programming, a string is traditionally a sequence of characters, either as a literal constant or as some kind of variable. The latter may allow its elements to be mutated and the length changed, or it may be fixed (after creation). ...
:
* 'desc type' is 2 to indicate that this is an element descriptor rather than an array or structure descriptor.
* 'string type' indicates that this is a character or a bit string, with varying or non varying length. 2 indicates a non varying (fixed-length) character string.
* '(res)' is a reserved byte not used for character strings.
* 'flags' indicate the encoding of the string,
EBCDIC
Extended Binary Coded Decimal Interchange Code (EBCDIC; ) is an eight-bit character encoding used mainly on IBM mainframe and IBM midrange computer operating systems. It descended from the code used with punched cards and the corresponding s ...
or
ASCII
ASCII ( ), abbreviated from American Standard Code for Information Interchange, is a character encoding standard for electronic communication. ASCII codes represent text in computers, telecommunications equipment, and other devices. Because ...
, and the encoding of the length of varying strings.
* 'maximum string length' is the actual length of the string for non varying strings, or the maximum length for varying strings.
Here is the source of an
array
An array is a systematic arrangement of similar objects, usually in rows and columns.
Things called an array include:
{{TOC right
Music
* In twelve-tone and serial composition, the presentation of simultaneous twelve-tone sets such that the ...
descriptor from Multics.
The definitions include a structure for the base array information and a structure for each dimension. (Multics ran on systems with 36-bit words).
dcl 1 array based aligned,
2 node_type bit(9) unaligned,
2 reserved bit(34) unaligned,
2 number_of_dimensions fixed(7) unaligned,
2 own_number_of_dimensions fixed(7) unaligned,
2 element_boundary fixed(3) unaligned,
2 size_units fixed(3) unaligned,
2 offset_units fixed(3) unaligned,
2 interleaved bit(1) unaligned,
2 c_element_size fixed(24),
2 c_element_size_bits fixed(24),
2 c_virtual_origin fixed(24),
2 element_size ptr unaligned,
2 element_size_bits ptr unaligned,
2 virtual_origin ptr unaligned,
2 symtab_virtual_origin ptr unaligned,
2 symtab_element_size ptr unaligned,
2 bounds ptr unaligned,
2 element_descriptor ptr unaligned;
dcl 1 bound based aligned,
2 node_type bit(9),
2 c_lower fixed(24),
2 c_upper fixed(24),
2 c_multiplier fixed(24),
2 c_desc_multiplier fixed(24),
2 lower ptr unaligned,
2 upper ptr unaligned,
2 multiplier ptr unaligned,
2 desc_multiplier ptr unaligned,
2 symtab_lower ptr unaligned,
2 symtab_upper ptr unaligned,
2 symtab_multiplier ptr unaligned,
2 next ptr unaligned;
See also
*
Burroughs large systems descriptors
References
Data structures by computing platform
Programming language implementation
{{compu-prog-stub