SOL(ID:210/sol001)

Simulation Oriented Language 


for Simulation Oriented Language.

Knuth & McNeley, Stanford, 1964

ALGOL extension for discrete simulation.

Version for Atlas by Paul Bryant, Atlas Computer Lab 1966 written with the Brooker CC


Related languages
ALGOL 60 => SOL   Extension of
SOL => ASPOL   Evolution of
SOL => SOL-370   Implementation

References:
  • Knuth, Donald E., and McNeley, J. L. "SOL-A symbolic language for general-purpose systems simulation" view details
  • Knuth, D. E. and J. L. McNeley. "A formal definition of SOL" view details
          in IEEE Transactions on Electronic Computers Vol EC-13 August 1964 (Special Issue on Programming Languages) view details
  • Knuth, D. E. and J. L. McNeley. "SOL - a symbolic language for general purpose system simulation" view details
          in IEEE Transactions on Electronic Computers Vol EC-13 August 1964 (Special Issue on Programming Languages) view details
  • Bryant, Paul "Simulation on Atlas: SOL" Atlas Copmuter Lab 1966 view details External link: Online copy at ACL Extract: SOL on Atlas
    THERE is a large class of real time problems which are very difficult to solve by means of numerical analysis. One section of this class concerns problems involved in studying traffic networks or the study of the flow of materials through a factory. This type of problem is, however, amenable to a simulation type of solution. In a simulation approach a computer program is written to make the computer behave like the real system, but speeded up. The flow of materials into the factory can be simulated and perhaps random number generators can be used for simulating variations in delivery times, and so on. The flow of materials can be studied at any point in the factory and at any grade of detail, limited only by the program complexity involved and the computer time available. Changes can be made to the system and these effects can easily be seen without the expense of actually making the changes on the factory floor.

    As with any computer program, it is difficult to write in a language not suited to the problem; and this is especially true when dealing with a simulation problem due to the difficulties of programming parallel activities on a computer, which is essentially a serial device. However, languages have been invented to deal with this type of problem in the use of which the user need have no knowledge of exactly how the computer deals with parallel activities and similar situations, and can concentrate his attention on the more interesting aspects of his problem and express them easily. Several simulation languages have been designed, of which one, called SOL [1] seemed particularly powerful and convenient; I have written a compiler for this language which is now running on Atlas.

    Apart from our customers, we ourselves in the Laboratory have a need for a simulation language; we want to study the operational effects of changes to the system, such as the proposed addition of a large disk file. In other words, we want to use the machine itself to predict its own response to changes in circumstances. But to see how the language is used we can take a simple problem, that of patients waiting to see a doctor. The program which simulates this is as follows:

           PROCESS PATIENT
           BEGIN
    START) NEW TRANSACTION TO QUEUE A new patient enters the surgery
                                    After a random interval between
           WAIT (20)                0 and 20 minutes, another patient enters.
           GO TO START
    QUEUE) SEIZE DOCTOR             Patient tries to see the doctor.
                                    If he is busy the patient is queue
           WAIT 4                   When doctor is free, patient
                                    'busies' him for 4 minutes during
                                    which time no other patient can
                                    see him.
           RELEASE DOCTOR           Doctor may now see next patient
           CANCEL                   Patient leaves
           END

    A further piece of code will deal with interruptions caused by telephone calls, thus:

      
           PROCESS TELEPHONE
           BEGIN
    START) WAIT 1 '17               Telephone calls are received at
                                    random integral intervals of
                                    between 1 and 17 minutes. If
                                    the telephone is engaged, the
                                    call is lost.

           IF PHONE BUSY THEN GO TO START
           SEIZE DOCTOR, 2          The doctor stops what he is doing
                                    and answers the telephone. The
           SEIZE PHONE              '2' indicates the strength with
                                    which he is seized. A higher
                                    strength seize may interrupt a
                                    lower strength one. Call lasts
           WAIT 3                   3 minutes.
           RELEASE PHONE
           RELEASE DOCTOR
           GO TO START
           END

    DOCTOR and PHONE are called facilities, and to couple these to the program the statements:

          BEGIN
          FACILITY DOCTOR, PHONE

    are needed at the heading of the program.

    The system provides facilities not shown in this example, including input/ output statements, arithmetical operations and a variety of random-number generators. While running, a program produces a continuous comment on its progress and statistical results are readily available.

    The compiler at the Atlas Laboratory is implemented in Compiler Compiler [2)] which has proved itself well suited to the task. The compiler is card-oriented and a few changes have been made to the language to allow for this. For example, certain delimiters have been introduced to avoid the necessity of underlining characters; also only one statement is allowed on each line.


          in IEEE Transactions on Electronic Computers Vol EC-13 August 1964 (Special Issue on Programming Languages) view details
  • Lubin, John Francis and Teichroew, Daniel "Computer simulation—discussion of the technique and comparison of languages" pp723-741 view details
          in [ACM] CACM 9(10) October 1966 view details
  • Sammet, Jean E., "Roster of Programming Languages 1967" view details
          in Computers & Automation 16(6) June 1967 view details
  • Sammet, Jean E. "Computer Languages - Principles and History" Englewood Cliffs, N.J. Prentice-Hall 1969. p.656. view details
          in Computers & Automation 16(6) June 1967 view details
  • Stock, Karl F. "A listing of some programming languages and their users" in RZ-Informationen. Graz: Rechenzentrum Graz 1971 239 view details Abstract: 321 Programmiersprachen mit Angabe der Computer-Hersteller, auf deren Anlagen die entsprechenden Sprachen verwendet werden kennen. Register der 74 Computer-Firmen; Reihenfolge der Programmiersprachen nach der Anzahl der Herstellerfirmen, auf deren Anlagen die Sprache implementiert ist; Reihenfolge der Herstellerfirmen nach der Anzahl der verwendeten Programmiersprachen.

    [321 programming languages with indication of the computer manufacturers, on whose machinery the appropriate languages are used to know.  Register of the 74 computer companies;  Sequence of the programming languages after the number of manufacturing firms, on whose plants the language is implemented;  Sequence of the manufacturing firms after the number of used programming languages.]
          in Computers & Automation 16(6) June 1967 view details
  • Sammet, Jean E., "Roster of Programming Languages 1972" 268 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 567 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
  • Nance, Richard E. "Simulation programming languages: an abridged history" view details
          in The 27th Winter Simulation Conference 3-6 December 1995 Hyatt Regency Crystal City, Arlington, VA view details