WISP(ID:214/wis004)Macro-based list processing languageMacro-based list processing language M.V. Wilkes A very simple list processing language based on LISP. (Sammett 1966) Structures: Related languages
References: in [ACM] CACM 7(08) August 1964 view details in Proceedings of the 19th ACM national conference January 1964 view details in Goodman, Richard (ed) "Annual Review in Automatic Programming" (4) 1964 Pergamon Press, Oxford view details The author undertook this exploration to acquaint himself with the three subjects given above; the paper is, therefore, written as the case history of an experiment, rather than as the description of a technique. This paper is worth the reading both as an introduction to the three subjects listed in the first paragraph, and also as an excellent example of the art of exposition. in ACM Computing Reviews 6(04) July-August 1965 view details in ACM Computing Reviews 6(04) July-August 1965 view details in The Computer Journal 7(4) January 1965 view details in Bobrow, D. G. (ed) "Symbol Manipulation Languages and Techniques", Proceedings of the IFIP Working Conference on Symbol Manipulation Languages. North-Holland Publishing Co., Amsterdam, 1968 view details in Halpern, Mark I and Shaw Christopher J (eds) "Annual Review in Automatic Programming" (6) 1969 Pergamon Press, Oxford view details Introduction The mobility of a program is a measure of the ease with which it can be implemented on a new machine. A user of a highly mobile program suffers minimum disruption of his work when his computer is upgraded or he moves to a new installation. Because his program is mobile, only a small amount of effort is required to get it running on the new machine before he can continue using it. Applications programs written in high level languages such as FORTRAN, ALGOL or COBOL have reasonable mobility, provided that the author has taken some pains to avoid local idiosyncrasies. For systems software, however, the picture is much grimmer. There have been many attempts to devise high level languages for compiler writing (Feldman and Gries, 1968) and a few to use such languages for the production of operating systems (Glaser, Couleur and Oliver, 1965). Unfortunately, none of these attempts has yet met with widespread success. A FORTRAN user requires a large programming system, consisting of the compiler and associated runtime routines. The mobility of his programs is determined by the number of installations which support this system. One can therefore argue that the mobility of a program is completely dependent upon the mobility of the programming system on which it rests. In this paper, I shall discuss a technique which I believe is fundamental to the improvement of programming system mobility. The background and general concepts from which the technique was derived are presented in Section 2, while the remainder of the paper is concerned with a specific system which has been designed and built using this technique. Section 3 describes the basic bootstrap on which the system rests, and Section 4 discusses the implementation of the common macro processor. The advantages and disadvantages of the approach are presented in the Section 5. Extract: General approach General approach The technique rests on the fact that it is possible to identify two components of any program: the basic operations and the algorithm which coordinates these operations. Given a particular task, it is possible to define a set of basic operations and data types needed to perform the task. These operations and data types define an abstract machine-a hypothetical computer which is ideally suited to this particular task. The program to perform the task is then written for this abstract machine. To run the program on a real machine, it is necessary to realise the abstract machine in some way. The abstract machine is an embodiment of the basic operations required to perform a particular task. Theoretically, it has no connection with any real machine, but practically we must always keep a wary eye on reality when designing an abstract machine. Many abstract machines can be formulated for a given task. The trick is to choose one of the right ones. ., Three considerations must be kept in mind- 1) The ease and efficiency with which the algorithm for accomplishing the task can be programmed in the language of the abstract machine. 2) The ease and efficiency with which the simulation of the abstract machine can be carried out on machines available currently and in the forseeable future. 3) The tools at hand for the realisation of the abstract machine. Balancing these three considerations is very much an engineering task. If one is stressed at the expense of the others, there will be trouble. An early attempt to use the abstract machine concept was the UNCOL proposal (SHARE, 1958). UNCOL was to be a UNiversal Computer Oriented Language which would reduce the number of translators for n languages and m machines from n x m to n + m. Effectively, the UNCOL proposal created a single abstract machine. In view of the three considerations mentioned above, it is easy to see why this attempt was unsuccessful-try to design an abstract machine which comes close to satisfying condition 1 above for FORTRAN, LISP (McCarthy, 1960) and SNOBOL (Griswold, Poage and Polonsky, 1969) simultaneously! The mobile programming system circumvents this difficulty by allowing a multiplicity of abstract machines. It does not attempt to solve the n x rn translator problem. The advantage of the mobile programming system lies in the fact that it reduces the specification of an algorithm to the specification of its basic operations, thus drastically reducing the amount of effort needed to implement it. One way to carry out the realisation of an abstract machine is to devise for it an assembly language whose statements can be expressed as macros acceptable to the real machine's assembler. This approach was suggested by McIlroy (1960) and used in the implementation of L6 (Knowlton, 1966) and SNOBOL (Griswold, et al., 1969). Unfortunately, the assemblers for different machines may reauire auite different invut formats. and their macro processors often vary widely in power. The ease of transferring a program written in this way thus depends critically on the existence of a suitable assembly language for the target machine. Recent developments in language-independent macro processing (Strachey, 1965, Waite, 1967, Brown, 1967) suggest that it is possible to make available a common macro processor. If the assembly language statements for the abstract machine are acceptable to this macro processor, then the realisation does-not depend upon the macro capabilities of the target machine, but rather on the availability of the common macro processor. An example of this approach is the implementation of WISP (Wilkes, 1964). There the WISP compiler is the common macro processor, and is itself built up by bootstrapping from simpler macro processors. in The Computer Journal 13(1) January 1970 view details in Computers & Automation 21(6B), 30 Aug 1972 view details 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 in The Computer Journal 28(1) January 1985 view details in The Computer Journal 28(1) January 1985 view details Resources
|