L(ID:2676/l::006)


Descriptive language as MACRO language, used as a basic for Abstract machine LOWL


Related languages
ML/I => L   Augmentation of
L => LOWL   Written using

Samples:
References:
  • Brown, P.J. and Eager, R.D. "Implementing software using the L language" University of Kent 1968 view details External link: Online copy
  • Brown, P. J. "Using a macro processor to aid software implementation" view details Abstract: A method of software implementation is described whereby the logic of the software is described as a series of machine-independent macro calls. When it is desired to implement the software on a given machine these macro calls are mapped into the assembly language of that machine. The advantages and limitations of these techniques are discussed and some practical results are presented. Extract: Introduction
    There are at least three internationally accepted machineindependent high-level languages in which algorithms involving purely numerical manipulations can be encoded. Efficient compilers for these languages are widely available and it is rare that one is forced to resort to machine code for encoding numerical algorithms. The situation in this field, though not perfect, is therefore reasonably satisfactory.
    However, for algorithms involving a good deal of non-numerical manipulations and in particular for software, the situation is much less satisfactory. (The term 'software' is used here to mean compilers, assemblers, etc.-not the languages they compile.) It is possible to use some existing high-level languages for software writing or to use other tools, such as syntax directed compilers, but the resultant object code is normally large and inefficient. Non-numeric features are often treated interpretively. Hence these methods, though very suitable if one wants to get something working quickly, are not suitable for production software. There do exist some honourable exceptions to this, i.e. machineindependent high-level languages with non-numerical facilities and efficient compilers. These are sometimes extensions of well-known languages, such as Burroughs' extended ALGOL. However, these languages are not widely accepted and compilers often only exist for one machine or range of machines. Hence the advantages of machine-independence are largely lost.
    There is, in fact, a much more fundamental disadvantage in using predefined high-level languages for software writing over and above the fact that compilers tend to be inefficient. However general a language might be, it will never contain quite the right facilities needed for describing a particular piece of software. For example very few high-level languages provide an efficient way of implementing a dynamic stack in which data of varying types is freely intermixed. The basic problem is that for numeric working there is a fairly standard set of possible operations, data types and aggregates, whereas for non-numeric working there is a huge range of possible operations, data types and aggregates and it is not possible to represent these efficiently in terms of a few primitives. Hence when writing software in a predefined high-level language one is forced to adapt the design of the software to fit the facilities that happen to be available in the language, i.e., one tailors the software to the software-writing language.
    Because of the disadvantages described above, production software is still largely written in assembly language or in other machine-dependent languages suitable for software writing, such as PL360 (Wirth, 1968). If it becomes necessary to implement the software on a new machine, it needs to be re-coded, which is a most undesirable task. Extract: A DLIMP
    A DLIMP
    The purpose of this discussion is to describe a method
    of software implementation which uses a machineindependent
    high-level language but surmounts the
    problems described above. The method uses the ML/I
    macro processor (Brown, 1966, 1967) and is called a
    DLIMP, which stands for Descriptive Language Implemented
    by Macro Processor.
    Assume, therefore, that it is required to implement
    some software S on several different machines or.
    alternatively, some software S is to be implemented on
    one machine and it is thought it may be necessary to
    implement it on other machines, as yet undefined, at
    some time in the future.
    The first step of the implementation process is to
    separate the logic of S into its machine-independent part
    and its machine-dependent part. Typically the latter
    might include 110, hashing algorithms, data type conversion,
    routines dependent on individual character
    representations, etc., i.e., routines where the very logic
    is dependent on the object machine.
    Of course, the word 'machine-independent' is a rather
    loosely used (and much abused) term, and the above
    division must be made in a somewhat ad hoe manner.
    Moreover a distinction must be made between theory
    and practice. In theory if some software is expressed as
    a ~ u r i mna~ch ine it is machine-independent. However,
    this is not much use in practice. This paper is concerned
    with software that is machine-independent in practice
    and hence there is an added requirement of efficiency in
    the use of machines.
    The technique to be described below is only applicable if
    S is reasonably machine-independent. It is inapplicable
    if the machine-dependent part of S is as large as or larger
    than its machine-independent part, in which case S, by
    its very nature, needs to be largely rewritten for each
    object machine. Extract: The descriptive language
    The descriptive language
    After the logic of S has been separated out into its two parts, the next step of the implementation process is to design a descriptive language for the machineindependent part of S. This will be represented as DL(S). DL(S) is a machine-independent language with semantics designed especially for describing S and with syntax designed to be translatable by ML/I into the assembly language of any machine and preferably also into any suitable high-level language. Loosely speaking, DL(S) is a collection of machine-independent ML/I macros corresponding to all the primitive operations used in S.
    Note that both the operations and the data types in DL(S) are specially tailored to S. Thus if S involved a dictionary facility, DL(S) would contain operations for manipulating the exact type of dictionary used in S. Alternatively if S involved list processing, DL(S) might contain list data together with suitable operations for manipulating it.
    The designing of DL(S) would probably be concurrent with the last stages of the designing of S and would proceed incrementally, until a comprehensive and wellrounded set of macros for the description of S was accumulated. DL(S) would be an aid to the documentation of S and, in isolating the primitives needed, should be a help in the design of S. If one uses flowcharts, the macros in DL(S) would probably mirror the operations one writes in the boxes of a fairly detailed flow-chart. Extract: Reasons for using ML/I
    Reasons for using ML/I
    Almost any general-purpose macro processor can be used to perform a DLIMP but it is claimed that ML/I has considerable advantages because :
    (a) it allows freedom of notation in writing macro calls and sophisticated macros can be built up relatively easily (e.g. arithmetic expressions, ALGOL-like IF statements);
    (b) it allows macro calls within macro calls (e.g. a constant macro within an arithmetic expression macro within an IF macro);
    (c) it does not require any trip character to precede a macro call.
    Of these (c) is probably the most important. It means that ML/I is capable of performing systematic editing and it is unnecessary to specify in the descriptive language what is a macro and what is not. This is decided only when a mapping is made. The following example illustrates the advantages of this.
    In DL(ML/I) identifiers of up to six characters are used for program labels. In most mappings these were copied without alteration into the object program, i.e. they were not treated as macros. However, the PLAN assembler used on the ICL 1900 Series mapping only allowed five character labels, and so it was necessary to change all six character labels to five. It was possible to do this by including, within the mapping macros for PLAN, macros to scan for all six character labels and generate macros to replace them by five character labels, checking each for uniqueness. No messy hand editing was needed.
    Examples like this arose on nearly every mapping. In the PL/I mapping, for instance, it was necessary to map a series of data declarations into an array with an initial value and to replace references to the data accordingly.
    This facility in ML/I for systematic editing (i.e. editing involving commands to replace systematically one piece of text by another throughout a document) is the main reason why mappings have avoided most of the unforeseen difficulties that normally plague exercises in machine-independence because of the arbitrary differences between machines and between various compilers and assemblers.
          in The Computer Journal 12(4) 1969 view details
  • Brown, P. J. "Levels of language for portable software" pp1059-1062 view details
          in [ACM] CACM 15(12) 1972 view details
  • Sammet, Jean E., "Roster of Programming Languages 1972" 143 view details
          in Computers & Automation 21(6B), 30 Aug 1972 view details
  • Stock, Marylene and Stock, Karl F. "Bibliography of Programming Languages: Books, User Manuals and Articles from PLANKALKUL to PL/I" Verlag Dokumentation, Pullach/Munchen 1973 314 view details Abstract: PREFACE  AND  INTRODUCTION
    The exact number of all the programming languages still in use, and those which are no longer used, is unknown. Zemanek calls the abundance of programming languages and their many dialects a "language Babel". When a new programming language is developed, only its name is known at first and it takes a while before publications about it appear. For some languages, the only relevant literature stays inside the individual companies; some are reported on in papers and magazines; and only a few, such as ALGOL, BASIC, COBOL, FORTRAN, and PL/1, become known to a wider public through various text- and handbooks. The situation surrounding the application of these languages in many computer centers is a similar one.

    There are differing opinions on the concept "programming languages". What is called a programming language by some may be termed a program, a processor, or a generator by others. Since there are no sharp borderlines in the field of programming languages, works were considered here which deal with machine languages, assemblers, autocoders, syntax and compilers, processors and generators, as well as with general higher programming languages.

    The bibliography contains some 2,700 titles of books, magazines and essays for around 300 programming languages. However, as shown by the "Overview of Existing Programming Languages", there are more than 300 such languages. The "Overview" lists a total of 676 programming languages, but this is certainly incomplete. One author ' has already announced the "next 700 programming languages"; it is to be hoped the many users may be spared such a great variety for reasons of compatibility. The graphic representations (illustrations 1 & 2) show the development and proportion of the most widely-used programming languages, as measured by the number of publications listed here and by the number of computer manufacturers and software firms who have implemented the language in question. The illustrations show FORTRAN to be in the lead at the present time. PL/1 is advancing rapidly, although PL/1 compilers are not yet seen very often outside of IBM.

    Some experts believe PL/1 will replace even the widely-used languages such as FORTRAN, COBOL, and ALGOL.4) If this does occur, it will surely take some time - as shown by the chronological diagram (illustration 2) .

    It would be desirable from the user's point of view to reduce this language confusion down to the most advantageous languages. Those languages still maintained should incorporate the special facets and advantages of the otherwise superfluous languages. Obviously such demands are not in the interests of computer production firms, especially when one considers that a FORTRAN program can be executed on nearly all third-generation computers.

    The titles in this bibliography are organized alphabetically according to programming language, and within a language chronologically and again alphabetically within a given year. Preceding the first programming language in the alphabet, literature is listed on several languages, as are general papers on programming languages and on the theory of formal languages (AAA).
    As far as possible, the most of titles are based on autopsy. However, the bibliographical description of sone titles will not satisfy bibliography-documentation demands, since they are based on inaccurate information in various sources. Translation titles whose original titles could not be found through bibliographical research were not included. ' In view of the fact that nany libraries do not have the quoted papers, all magazine essays should have been listed with the volume, the year, issue number and the complete number of pages (e.g. pp. 721-783), so that interlibrary loans could take place with fast reader service. Unfortunately, these data were not always found.

    It is hoped that this bibliography will help the electronic data processing expert, and those who wish to select the appropriate programming language from the many available, to find a way through the language Babel.

    We wish to offer special thanks to Mr. Klaus G. Saur and the staff of Verlag Dokumentation for their publishing work.

    Graz / Austria, May, 1973
          in Computers & Automation 21(6B), 30 Aug 1972 view details
  • van der Poel, W., "Machine Oriented Higher Level Languages" view details
          in Machine Oriented Higher Level Languages (van der Poel, Maarsen, editors) North Holland 1974 view details