Data descriptor explained

In computing, a data descriptor is a structure containing information that describes data.

Data descriptors may be used in compilers,[1] as a software structure at run time in languages like Ada[2] or PL/I, 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. OpenVMS[3] and Multics[4] 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:[5]

byte offset +0 +1 +2 +3
0descriptor type string type (res) flags
4maximum string length

Here is the source of an array descriptor from Multics.[6] 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

Notes and References

  1. Holt . Richard C. . July 1987 . Data descriptors: a compile-time model of data and addressing . ACM Transactions on Programming Languages and Systems . 10.1145/24039.24051 . 9 . 3 . 367–389. free .
  2. Web site: Schonberg . Ed . Ada Compared with C++ . The Advantages of Ada 95 . January 15, 2013.
  3. Web site: Hewlett-Packard . Chapter 7 OpenVMS Argument Descriptors . HP OpenVMS Systems Documentation . July 11, 2020.
  4. Book: Honeywell, Inc. . 1979 . Multics Programmers' Manual – Subsystem Writers' Guide . 2 - 13-2 - 18 . PDF.
  5. Book: IBM Corporation . 2006. Enterprise PL/I for z/OSProgramming Guide . 385 . PDF.
  6. Web site: MIT/Honeywell . array.incl.pl1 . Multics/ldd/include . January 20, 2012.