5.10.2017 Doc of the Day

1. Vannevar Bush, 1945.
2. Edsger Dijkstra, 1962.
3. Jerrilyn Jacobs, 2002.
Numero UnoNew Responsibilities for GovernmentOne lesson is clear from the reports of the several committees attached as appendices.  The Federal Government should accept new responsibilities for promoting the creation of new scientific knowledge and the development of scientific talent in our youth.

The extent and nature of these new responsibilities are set forth in detail in the reports of the committees whose recommendations in this regard are fully endorsed.

In discharging these responsibilities Federal funds should be made available.  We have given much thought to the question of how plans for the use of Federal funds may be arranged so that such funds will not drive out of the picture funds from local governments, foundations, and private donors.  We believe that our proposals will minimize that effect, but we do not think that it can be completely avoided.  We submit, however, that the nation’s need for more and better scientific research is such that the risk must be accepted.

It is also clear that the effective discharge of these responsibilities will require the full attention of some over-all agency devoted to that purpose. There should be a focal point within the Government for a concerted program of assisting scientific research conducted outside of Government. Such an agency should furnish the funds needed to support basic research in the colleges and universities, should coordinate where possible research programs on matters of utmost importance to the national welfare, should formulate a national policy for the Government toward science, should sponsor the interchange of scientific information among scientists and laboratories both in this country and abroad, and should ensure that the incentives to research in industry and the universities are maintained. All of the committees advising on these matters agree on the necessity for such an agency.

The Mechanism

There are within Government departments many groups whose interests are primarily those of scientific research. Notable examples are found within the Departments of Agriculture, Commerce, Interior, and the Federal Security Agency. These groups are concerned with science as collateral and peripheral to the major problems of those Departments. These groups should remain where they are, and continue to perform their present functions, including the support of agricultural research by grants to the Land Grant Colleges and Experiment Stations, since their largest contribution lies in applying fundamental knowledge to the special problems of the Departments within which they are established.

By the same token these groups cannot be made the repository of the new and large responsibilities in science which belong to the Government and which the Government should accept. The recommendations in this report which relate to research within the Government, to the release of scientific information, to clarification of the tax laws, and to the recovery and development of our scientific talent now in uniform can be implemented by action within the existing structure of the Government. But nowhere in the Governmental structure receiving its funds from Congress is there an agency adapted to supplementing the support of basic research in the universities, both in medicine and the natural sciences; adapted to supporting research on new weapons for both Services; or adapted to administering a program of science scholarships and fellowships.

A new agency should be established, therefore, by the Congress for the purpose. Such an agency, moreover, should be an independent agency devoted to the support of scientific research and advanced scientific education alone. Industry learned many years ago that basic research cannot often be fruitfully conducted as an adjunct to or a subdivision of an operating agency or department. Operating agencies have immediate operating goals and are under constant pressure to produce in a tangible way, for that is the test of their value. None of these conditions is favorable to basic research. research is the exploration of the unknown and is necessarily speculative. It is inhibited by conventional approaches, traditions, and standards. It cannot be satisfactorily conducted in an atmosphere where it is gauged and tested by operating or production standards. Basic scientific research should not, therefore, be placed under an operating agency whose paramount concern is anything other than research. Research will always suffer when put in competition with operations. The decision that there should be a new and independent agency was reached by each of the committees advising in these matters.

I am convinced that these new functions should be centered in one agency. Science is fundamentally a unitary thing. The number of independent agencies should be kept to a minimum. Much medical progress, for example, will come from fundamental advances in chemistry. Separation of the sciences in tight compartments, as would occur if more than one agency were involved, would retard and not advance scientific knowledge as a whole.

Five Fundamentals

There are certain basic principles which must underlie the program of Government support for scientific research and education if such support is to be effective and if it is to avoid impairing the very things we seek to foster. These principles are as follows:

(1) Whatever the extent of support may be, there must be stability of funds over a period of years so that long-range programs may be undertaken. (2) The agency to administer such funds should be composed of citizens selected only on the basis of their interest in and capacity to promote the work of the agency. They should be persons of broad interest in and understanding of the peculiarities of scientific research and education. (3) The agency should promote research through contracts or grants to organizations outside the Federal Government. It should not operate any laboratories of its own. (4) Support of basic research in the public and private colleges, universities, and research institutes must leave the internal control of policy, personnel, and the method and scope of the research to the institutions themselves. This is of the utmost importance. (5) While assuring complete independence and freedom for the nature, scope, and methodology of research carried on in the institutions receiving public funds, and while retaining discretion in the allocation of funds among such institutions, the Foundation proposed herein must be responsible to the President and the Congress. Only through such responsibility can we maintain the proper relationship between science and other aspects of a democratic system. The usual controls of audits, reports, budgeting, and the like, should, of course, apply to the administrative and fiscal operations of the Foundation, subject, however, to such adjustments in procedure as are necessary to meet the special requirements of research.

Basic research is a long-term process – it ceases to be basic if immediate results are expected on short-term support. Methods should therefore be found which will permit the agency to make commitments of funds from current appropriations for programs of five years duration or longer. Continuity and stability of the program and its support may be expected (a) from the growing realization by the Congress of the benefits to the public from scientific research, and (b) from the conviction which will grow among those who conduct research under the auspices of the agency that good quality work will be followed by continuing support.

Military Research

As stated earlier in this report, military preparedness requires a permanent, independent, civilian-controlled organization, having close liaison with the Army and Navy, but with funds direct from Congress and the clear power to initiate military research which will supplement and strengthen that carried on directly under the control of the Army and Navy. As a temporary measure the National Academy of Sciences has established the Research Board for National Security at the request of the Secretary of War and the Secretary of the Navy. This is highly desirable in order that there may be no interruption in the relations between scientists and military men after the emergency wartime Office of Scientific Research and Development goes out of existence. The Congress is now considering legislation to provide funds for this Board by direct appropriation.

I believe that, as a permanent measure, it would be appropriate to add to the agency needed to perform the other functions recommended in this report the responsibilities for civilian-initiated and civilian-controlled military research. The function of such a civilian group would be primarily to conduct long-range scientific research on military problems – leaving to the Services research on the improvement of existing weapons.

Some research on military problems should be conducted, in time of peace as well as in war, by civilians independently of the military establishment. It is the primary responsibility of the Army and Navy to train the men, make available the weapons, and employ the strategy that will bring victory in combat. The Armed Services cannot be expected to be experts in all of the complicated fields which make it possible for a great nation to fight successfully in total war. There are certain kinds of research – such as research on the improvement of existing weapons – which can best be done within the military establishment. However, the job of long-range research involving application of the newest scientific discoveries to military needs should be the responsibility of those civilian scientists in the universities and in industry who are best trained to discharge it thoroughly and successfully. It is essential that both kinds of research go forward and that there be the closest liaison between the two groups.

Placing the civilian military research function in the proposed agency would bring it into close relationship with a broad program of basic research in both the natural sciences and medicine. A balance between military and other research could thus readily be maintained.

The establishment of the new agency, including a civilian military research group, should not be delayed by the existence of the Research Board for National Security, which is a temporary measure. Nor should the creation of the new agency be delayed by uncertainties in regard to the postwar organization of our military departments themselves. Clearly, the new agency, including a civilian military research group within it, can remain sufficiently flexible to adapt its operations to whatever may be the final organization of the military departments.

National Research Foundation

It is my judgment that the national interest in scientific research and scientific education can best be promoted by the creation of a National Research Foundation.

I. Purposes. – The National Research Foundation should develop and promote a national policy for scientific research and scientific education, should support basic research in nonprofit organizations, should develop scientific talent in American youth by means of scholarships and fellowships, and should by contract and otherwise support long-range research on military matters.

II. Members. – 1. Responsibility to the people, through the President and Congress, should be placed in the hands of, say nine Members, who should be persons not otherwise connected with the Government and not representative of any special interest, who should be known as National Research Foundation Members, selected by the President on the basis of their interest in and capacity to promote the purposes of the Foundation.

2. The terms of the Members should be, say, 4 years, and no Member should be eligible for immediate reappointment provided he has served a full 4-year term. It should be arranged that the Members first appointed serve terms of such length that at least two Members are appointed each succeeding year.

3. The Members should serve without compensation but should be entitled to their expenses incurred in the performance of their duties.

4. The Members should elect their own chairman annually.

5. The chief executive officer of the Foundation should be a director appointed by the Members. Subject to the direction and supervision of the Foundation Members (acting as a board), the director should discharge all the fiscal, legal, and administrative functions of the Foundation. The director should receive a salary that is fully adequate to attract an outstanding man to the post.

6. There should be an administrative office responsible to the director to handle in one place the fiscal, legal, personnel, and other similar administrative functions necessary to the accomplishment of the purposes of the Foundation.

7. With the exception of the director, the division members, and one executive officer appointed by the director to administer the affairs of each division, all employees of the Foundation should be appointed under Civil Service regulations.

III. Organization. – 1. In order to accomplish the purposes of the Foundation the Members should establish several professional Divisions to be responsible to the Members. At the outset these Divisions should be:

a. Division of Medical Research. – The function of this Division should be to support medical research.

b. Division of Natural Sciences. – The function of this Division should be to support research in the physical and natural sciences.

c. Division of National Defense. – It should be the function of this Division to support long-range scientific research on military matters.

d. Division of Scientific Personnel and Education. – It should be the function of this Division to support and to supervise the grant of scholarships and fellowships in science.

e. Division of Publications and Scientific Collaboration. – This Division should be charged with encouraging the publication of scientific knowledge and promoting international exchange of scientific information.

2. Each Division of the Foundation should be made up of at least five members, appointed by the Members of the Foundation. In making such appointments the Members should request and consider recommendations from the National Academy of Sciences which should be asked to establish a new National Research Foundation nominating committee in order to bring together the recommendations of scientists in all organizations. The chairman of each Division should be appointed by the Members of the Foundation.

3. The division Members should be appointed for such terms as the Members of the Foundation may determine, and may be reappointed at the discretion of the Members. They should receive their expenses and compensation for their services at a per diem rate of, say, $50 while engaged on business of the Foundation, but no division member should receive more than, say, $10,000 compensation per year.

4. Membership of the Division of National Defense should include, in addition to, say, five civilian members, one representative designated by the Secretary of War, and one representative of the Secretary of the Navy, who should serve without additional compensation for this duty.

----------------------------------------------------------------------
        Proposed Organization of National Research Foundation


                ================================
                | National Research Foundation |
                |------------------------------|
                |          Members             |
                ================================
                             |
                    -----------------------
                    |     Director        |
                    -----------------------
                             |
                             |---------------------
                             |                    |
                             |             ---------------------------
                             |             |  Staff offices          |
                             |             | General Counsel         |
                             |             | Finance Officer         |
                             |             | Administrative planning |
                             |             | Personnel               |
                             |             ---------------------------
                             |
      ----------------------------------------------------------------
      |                      |           |          |              |
 ------------------ --------------- ------------- ------------- ----------------
 |  Division of   | |Division of  | |Division of| |Division of| |Division of   |
 |Medical Research| |Scientific   | |Natural    | | National  | |Publications &|
 |----------------| |Personnel and| | Sciences  | | Defense   | |Scientific    |
 |   Members      | |Education    | |-----------| |-----------| |Collaboration |
 ------------------ |-------------| | Members   | |  Members  | |--------------|
        |           |  Members    | ------------- ------------- |  Members     |
        |           ---------------       |            |        ----------------
        |                 |               |            |               |
------------------- --------------- ------------- ------------- ----------------
|Executive officer| |Exec. officer| |Exec. off. | |Exec. off. | |Exec. officer |
------------------- --------------- ------------- ------------- ----------------

=============================================================================

IV. Functions. – 1. The Members of the Foundation should have the following functions, powers, and duties:

a. To formulate over-all policies of the Foundation.

b. To establish and maintain such offices within the United States, its territories and possessions, as they may deem necessary.

c. To meet and function at any place within the United States, its territories and possessions.

d. To obtain and utilize the services of other Government agencies to the extent that such agencies are prepared to render such services.

e. To adopt, promulgate, amend, and rescind rules and regulations to carry out the provisions of the legislation and the policies and practices of the Foundation.

f. To review and balance the financial requirements of the several Divisions and to propose to the President the annual estimate for the funds required by each Division. Appropriations should be earmarked for the purposes of specific Divisions, but the Foundation should be left discretion with respect to the expenditure of each Division’s funds.

g. To make contracts or grants for the conduct of research by negotiation without advertising for bids.

And with the advice of the National Research Foundation Divisions concerned –

h. To create such advisory and cooperating agencies and councils, state, regional, or national, as in their judgment will aid in effectuating the purposes of the legislation, and to pay the expenses thereof.

i. To enter into contracts with or make grants to educational and nonprofit research institutions for support of scientific research.

j. To initiate and finance in appropriate agencies, institutions, or organizations, research on problems related to the national defense.

k. To initiate and finance in appropriate organizations research projects for which existing facilities are unavailable or inadequate.

l. To establish scholarships and fellowships in the natural sciences including biology and medicine.

m. To promote the dissemination of scientific and technical information and to further its international exchange.

n. To support international cooperation in science by providing financial aid for international meetings, associations of scientific societies, and scientific research programs organized on an international basis.

o. To devise and promote the use of methods of improving the transition between research and its practical application in industry.

2. The Divisions should be responsible to the Members of the Foundation for –

a. Formulation of programs and policy within the scope of the particular Divisions.

b. Recommendations regarding the allocation of research programs among research organizations.

c. Recommendation of appropriate arrangements between the Foundation and the organizations selected to carry on the program.

d. Recommendation of arrangements with State and local authorities in regard to cooperation in a program of science scholarships and fellowships.

e. Periodic review of the quality of research being conducted under the auspices of the particular Division and revision of the program of support of research.

f. Presentation of budgets of financial needs for the work of the Division.

g. Maintaining liaison with other scientific research agencies, both governmental and private, concerned with the work of the Division.

V. Patent Policy. – The success of the National Research Foundation in promoting scientific research in this country will depend to a very large degree upon the cooperation of organizations outside the Government. In making contracts with or grants to such organizations the Foundation should protect the public interest adequately and at the same time leave the cooperating organization with adequate freedom and incentive to conduct scientific research. The public interest will normally be adequately protected if the Government receives a royalty-free license for governmental purposes under any patents resulting from work financed by the Foundation. There should be no obligation on the research institution to patent discoveries made as a result of support from the Foundation. There should certainly not be any absolute requirement that all rights in such discoveries be assigned to the Government, but it should be left to the discretion of the director and the interested Division whether in special cases the public interest requires such an assignment. Legislation on this point should leave to the Members of the Foundation discretion as to its patent policy in order that patent arrangements may be adjusted as circumstances and the public interest require.

VI. Special Authority. – In order to insure that men of great competence and experience may be designated as Members of the Foundation and as members of the several professional Divisions, the legislation creating the Foundation should contain specific authorization so that the Members of the Foundation and the Members of the Divisions may also engage in private and gainful employment, notwithstanding the provisions of any other laws: provided, however, that no compensation for such employment is received in any form from any profit-making institution which receives funds under contract, or otherwise, from the Division or Divisions of the Foundation with which the individual is concerned. In normal times, in view of the restrictive statutory prohibitions against dual interests on the part of Government officials, it would be virtually impossible to persuade persons having private employment of any kind to serve the Government in an official capacity. In order, however, to secure the part-time services of the most competent men as Members of the Foundation and the Divisions, these stringent prohibitions should be relaxed to the extent indicated.

Since research is unlike the procurement of standardized items, which are susceptible to competitive bidding on fixed specifications, the legislation creating the National Research Foundation should free the Foundation from the obligation to place its contracts for research through advertising for bids. This is particularly so since the measure of a successful research contract lies not in the dollar cost but in the qualitative and quantitative contribution which is made to our knowledge. The extent of this contribution in turn depends on the creative spirit and talent which can be brought to bear within a research laboratory. The National Research Foundation must, therefore, be free to place its research contracts or grants not only with those institutions which have a demonstrated research capacity but also with other institutions whose latent talent or creative atmosphere affords promise of research success.

As in the case of the research sponsored during the war by the Office of Scientific Research and Development, the research sponsored by the National Research Foundation should be conducted, in general, on an actual cost basis without profit to the institution receiving the research contract or grant.

There is one other matter which requires special mention. Since research does not fall within the category of normal commercial or procurement operations which are easily covered by the usual contractual relations, it is essential that certain statutory and regulatory fiscal requirements be waived in the case of research contractors. For example, the National Research Foundation should be authorized by legislation to make, modify, or amend contracts of all kinds with or without legal consideration, and without performance bonds. Similarly, advance payments should be allowed in the discretion of the Director of the Foundation when required. Finally, the normal vouchering requirements of the General Accounting Office with respect to detailed itemization or substantiation of vouchers submitted under cost contracts should be relaxed for research contractors. Adherence to the usual procedures in the case of research contracts will impair the efficiency of research operations and will needlessly increase the cost of the work of the Government. Without the broad authority along these lines which was contained in the First War Powers Act and its implementing Executive Orders, together with the special relaxation of vouchering requirements granted by the General Accounting Office, the Office of Scientific Research and Development would have been gravely handicapped in carrying on research on military matters during this war. Colleges and universities in which research will be conducted principally under contract with the Foundation are, unlike commercial institutions, not equipped to handle the detailed vouchering procedures and auditing technicalities which are required of the usual Government contractors.

VII. Budget. – Studies by the several committees provide a partial basis for making an estimate of the order of magnitude of the funds required to implement the proposed program. Clearly the program should grow in a healthy manner from modest beginnings. The following very rough estimates are given for the first year of operation after the Foundation is organized and operating, and for the fifth year of operation when it is expected that the operations would have reached a fairly stable level:

---------------------------------------------------------------------------
                  Activity                           | Millions of dollars
                                                     ----------------------
                                                     | First year | 5th yr
---------------------------------------------------------------------------
 Division of Medical Research                        |      5.0   |   20.0
 Division of Natural Sciences                        |     10.0   |   50.0
 Division of National Defense                        |     10.0   |   20.0
 Division of Scientific Personnel and Education      |      7.0   |   29.0
 Division of Publications & Scientific Collaboration |       .5   |    1.0
 Administration                                      |      1.0   |    2.5
---------------------------------------------------------------------------

Action by Congress

The National Research Foundation herein proposed meets the urgent need of the days ahead.  The form of the organization suggested is the result of considerable deliberation.  The form is important.  The very successful pattern of organization of the National Advisory Committee for Aeronautics, which has promoted basic research on problems of flight during the past thirty years, has been carefully considered in proposing the method of appointment of Members of the Foundation and in defining their responsibilities.  Moreover, whatever program is established it is vitally important that it satisfy the Five Fundamentals.

The Foundation here proposed has been described only in outline.  The excellent reports of the committees which studied these matters are attached as appendices.  They will be of aid in furnishing detailed suggestions.

Legislation is necessary.  It should be drafted with great care.  Early action is imperative, however, if this nation is to meet the challenge of science and fully utilize the potentialities of science.  On the wisdom with which we bring science to bear against the problems of the coming years depends in large measure our future as a nation.”     Vannevar Bush, Science: the Endless Frontier; Chapter Six, “The Means to the End,” 1945

code binary computer geek horizontal

Numero Dos

A machine defines (by its very structure) a language, viz. its input language: conversely, the semantic definition of a language specifies a machine that understands it.  In other words: machine and language are two faces of one and the same coin.  I am going to describe such a coin.  I leave it entirely to you to decide which of these two aspects of the subject matter of my talk you think the most important as it is rather ridiculous in both aspects.  The language I am going to sketch is prohibitively difficult for a human user and the machine I am going to describe is of a perverse inefficiency.

Therefore, if my mental construction, nevertheless, has a right to exist it should derive this from other qualities.  My machine derives this, to my taste and judgement at least, from its extreme simplicity and elegance, from the uniform way in which it performs its (at first glance) rather different operations; the justification for my language are its clearness and the unusually high degree of ambiguity, derived from a strict sequential interpretation and an explicit indication in the program to perform operations, which are usually implicitly understood (and therefore apt to misunderstanding).  If one wishes to do so one may regard my machine and my language as being conceived for the purpose of clarification.

Before I really start with my description I should like to warn you for two intentional omissions. The system I am going to present is the result of a careful choice between a great number of “neighbouring possibilities”. I shall not give my motivations for these choices, I shall even leave the consciously rejected alternatives unmentioned. In other words, I refrain from introducing my system at least in some respects as, say, a “local optimum”. As this diminishes the convincing power of my presentation, I personally regret this omission. I have to omit these motivations, however, for the sake of brevity.

The other question I shall not touch is the question how to implement this system with the aid of a conventional machine. One might even raise the question —as I did myself to check that I was not thinking nonsense— whether it can be implemented at all, no matter how crudely. You have to take my word for it that it can be done. I have worked out a method of implementation to a degree that could convince, I think, the most suspicious auditor of the possibility. But it is my intention not to show you the particulars of this implementation, because I had to incorporate too many arbitrary decisions in which, when mentioned, would only divert the attention from the essentials. In particular, the question of storage allocation will remain untouched.

My Machine operates on (and under control of) units of information which I call “words”. Without loss of generality I can restrict myself to a finite number of different words, each represented by the same number of bits.

The machine distinguishes between different kinds of words, say numbers, operators, variables and separators. For the time being we shall confine our attention to the first of these, “number words” and “operator words”.

A normal arithmetical operation, say the addition or multiplication of two numbers, has two number words as input and one word, also representing a number, as output. The rules according to which a numerical value should be attached to (i.e. derived from the bits of) a number word are embodied in the workings of the arithmetic unit, which has the usual property that these same rules apply to both input and output: the output of the arithmetic unit can be fed into it again at some later stage of the process. As we assume that the properties of the arithmetic unit are constant in time, we may say that the number words have “a fixed meaning”. As the fixed interpretation of number words is coupled to the constant properties of the arithmetic unit it is not so surprising that we shall denote the basic arithmetic operations by operator words (“+”, “-“, “*”, “/”, etc.) the meaning of which can also be regarded as fixed.

The machine works under control of a program which primarily consists of a string of words. For the time being I shall confine myself to pieces of program prescribing the evaluation of arithmetic expressions.

Let us consider the expression that would normally be written down as

5   +   39   /   ( 7   +   2   *   3 )   –   6      ;

in the usual postfix notation (also known under the name “Reversed Polish Notation”) this would give rise to the following sequence of numbers and operators (successive items in this sequence for the sake of representation on paper being separated by spaces)

      5   39   7   2   3   *   +   /   +   6   –        .

The well known mechanism especially devised for the sequence evaluation of such an expression is what I prefer to call a “stack”. (This device has been invented and generalized independently by so many people that it is known now under a great variety of names, such as “push down list”, “nesting store”, “cellar”, “last-in-first-out-memory” etc.) If we regard the above sequence of numbers and operators as the string of words representing a piece of program, the machine reads this string word by word from left to right. If it reads a number word, this number (i.e. a copy of this number word) is added to the top of the stack, if it reads an operator word, the operation in question is performed at the top of the stack. In illustration I give on successive lines the successive pictures of the top of the stack is at the right hand side of the line.

 …..   5
…..   5   39
…..   5   39   7
…..   5   39   7   2
…..   5   39   7   2   3
…..   5   39   7   6
…..   5   39   13
…..   5   3
…..   8
…..   8   6
…..   2

and the net result of the execution of this little piece of program is that the value of the expression has been added to the stack.

As clearly shown in the above example the machine starts by copying the program text word by word into the top of the stack. Sooner or later this has to be interrupted, otherwise our machine would just be a copying machine. In the above system the process of copying is interrupted by the occurrence of an arbitrary operator in the program text. The function of an operator, therefore, is a double one: firstly it indicates that the copying has to be interrupted for a while, because now an operation has to be performed, secondly it specifies this operation. I propose to separate these two completely different functions: from now on arithmetic operators are primarily treated in exactly the same way as numbers are treated, i.e. the operator word is copied into the stack as well. Every time the process of copying has to be interrupted I shall indicate this in the program explicitly by the insertion of a special word, introduced now and represented by “E” (from “Evaluate”). My machine now takes the following form. It reads the program text word by word, from left to right. By “reading” is meant the following: if the word read is unequal to “E” a copy of it is added to the stack, if the word read is equal to “E”, it is not copied but, instead, the operation takes place as specified (primarily) by the top word of the stack.

According to these rules the program prescribing the evaluation of the expression of our previous example will now consist of the following string of words

5   39   7   2   3   *   E   +   E   /   E   +   E   6   –   E

and under control of this piece of program text (i.e. when this string of words is “read by the machine”) the top of the stack will be in succession as shown in the following lines:

 …..   5
…..   5   39
…..   5   39   7
…..   5   39   7   2
…..   5   39   7   2   3
…..   5   39   7   2   3 *
…..   5   39   7   6
…..   5   39   7   6   +
…..   5   39   13
…..   5   39   13 /
…..   5   3
…..   5   3   +
…..   8
…..   8   6
…..   8   6   –
…..   2

As said above the machine performs the operation specified by the top word of the stack when it reads the word “E” in the program text. We shall restrict ourselves to such programs that at such a moment the top word of the stack is indeed an operator word (and not, for instance, a number word). Furthermore we shall restrict ourselves to the case that the immediately underlying stack words be in accordance with any requirements that the execution of the operator at the top may set. (For instance, in the case of the binary arithmetic operations illustrated above the two immediately underlying words must be numbers.)

In other words: if an operand of an arithmetic operation happens to be an expression we substitute for this expression its numerical value before the operation is called into action, thus appealing to the fact that, primarily, the arithmetic operations are defined only when supplied with numerical operands.

We regard the replacement of a (sub)expression by its numerical value as a “substitution”, and we indicate explicitly when these substitutions have to be performed, although, linguistically speaking, this rather abundant: “3 + 4” will always be equal to “7”, no matter when we perform this addition.

This situation, however, radically changes as soon as variables —in contrast to constant numbers— are taken into account. (In the following we shall denote variables with small letters, reserving capital letters for “special words”, such as “E” and others, to be introduced below.) Let us assume that we have to compute the value of the expression

”  x + 4  ”

at a moment that the value of the variable x equals 3. This means that in the above expression we must substitute for “x” its numerical value at that moment; only after having done so we can perform the arithmetic substitution (” 3+4 ” being replaced by ” 7 “). Given something dependent on x (viz. the expression ” x+4 “) we create a result (viz. ” 7 “) which, thanks to the fact that we have substituted for x its present value, is made independent of the future history of x. We have fixed an “instantaneous picture” of the variable x. Obviously I insist upon indicating explicitly when this instantaneous picture of the variable x (which is varying in time!) has to be taken.

Now we are going to harvest the first fruits of our labor for the mechanism for this explicit indication is already introduced. The piece of program prescribing the evaluation of the expression

”  x + 4  ”

now takes the following form:

     ”  x   E   4   +   E  ”

and under the above assumption the successive pictures of the stack are

…..   x
…..   3
…..   3   4
…..   3   4   +
…..   7

Our machine invites us to describe the fact that “the value of the variable x equals 3″ in slightly other wordings, viz. that the state of the process is such that reading the word “E” at a moment that the top word of the stack is “x” results in the replacement of this top word by the number word “3”. The variable on the top of the stack is thus regarded as a variable operator which, upon evaluation, is replaced by something dependent on the state of the process at that moment; in this case it is an operator the execution of which sets no special requirements to the immediately underlying stack words. (The similarity between operators and variables will be further stressed by our next example.)

All words read in the text are added to the stack except the word “E” which causes the machine to perform a substitution. For reason to be explained below we should like to have also the possibility of adding the word “E” to the stack. The framework for this extension, however, is already present. We introduce a special operator, denoted by the word “P” (from “Postponement”), which effects upon evaluation a fixed substitution, vis. its replacement by the word “E”. We shall illustrate the use of the operator “P” in the next example.

In this example we have three variables, named “x“, “y” and “plinus“. Suppose the state of the process to be such that reading “plinus E” generates the word “+” on top of the stack. When reading the text:

”  x   P   E   y   P   E   plinus   E   P   E  ”

the top of the stack will show in succession

…..   x
…..   x   P
…..   x   E
…..   x   E   y
…..   x   E   y   P
…..   x   E   y   E
…..   x   E   y   E   plinus
…..   x   E   y   E   +
…..   x   E   y   E   +   P
…..   x   E   y   E   +   E

and the top of the stack thus contains the string of words which, when read as a piece of program, would effectuate the evaluation of the expression ” x + y “. If the value of the variable “plinus” would have been “–” we would have generated (the string of words corresponding to) the expression ” xy “.

What we have done amounts to a partial evaluation of the expression ” x plinus y “, the result again being an expression. In our previous examples the final addition to the stack always consisted of a single number. But a number is a trivial example of an expression and generating not only numbers but also more general expressions as intermediate results is therefore an obvious extension of normal practice.

Up till now we have described the generation of words on top of the stack but not what we are going to do with these words. Furthermore we have assumed that with respect to given variable the process could be in such a state that evaluation of this variable would give rise to a previously defined substitution, but how this definition should take place is not mentioned in the above. These two gaps in our picture will both be filled by the introduction of the assignment operators.

For the assignment of a single word value, as in ” x := 3 ” we could write in our program

”  3  x  :=  E  ”

resulting into the stack pictures:

…..   3
…..   3   x
…..   3   x   :=

Upon evaluation of the assignment operator “:=” the machine investigates the immediately underlying word. This must be the variable to which an assignment has to take place; the next underlying word is assigned to this variable (a process, about which more below) and the three words on top of the stack (which have now been processed) are removed from the stack. Until further notice —i.e. a new assignment to the variable “x“— the evaluation of this variable will result in the replacement of the top word of the stack by the word “3”.

But for the interchanging of left and right hand side this is closely analogous to the assignment statement as known in ALGOL 60. But we need more than that for, in general, the assigned value will not consist out of a single word, but out of a string of words and we must therefore have a means of indicating how deep in the stack the assigned value extends. The simplest way to do this is to insert in the stack a marker, say the special word “T” (from “Terminal”) at the bottom side of the assigned value. Furthermore we introduce another assignment operator “:-” (called the “string assignment” in contrast to the “word assignment” introduced in the previous paragraph). Upon evaluation of this operator the machine investigates the top of the stack in downward direction. The first word (immediately under the operator “:-“) must be the variable to which a value has to be assigned. Thereafter the machine continues its word by word investigation in the downward direction until it meets the special marker “T”: the words passed in this way form together the string that acts as the assigned value.

The simplest way to add a “T” to the stack would be just to insert the word “T” in the proper place in the program under control of which the stack is being filled. This arrangement, however, will not do; for reasons to be explained later we need the possibility of generating a “T” on top of the stack under control of a program that itself does not contain this word. We can do this with the same trick that enabled us to generate an “E” on top of the stack. We introduce a new operator, denoted by the word “S” (say from “Separator” or because it precedes the “T” in the alphabet) which upon evaluation is replaced by the word “T” and we make it a rule that this will be the only way in which words “T” are added to the stack.

Using all this we have an alternative to write the assignment statement ” x := 3 “, viz.

”  S   E   3   x   :-   E  ”

giving in the top of the stack in succession:

…..   S
…..   T
…..   T 3
…..   T 3 x
…..   T 3 x :-
…..

The net effect of this is equivalent to the previous form using the word assignment “:=”.

Let us use the more powerful assignment in an example which is an extension of one of our earlier ones, viz. the one describing the partial evaluation of the expression ” x plinus y “. The result of this partial evaluation was an expression depending on the variables “x” and “y” and suppose that we want to call this expression “z“. For this purpose we write in the program:

” S   E   x   P   E   y   P   E   plinus   E   P   E   z   :-   E ” .

When the last “E” of this string is going to be read the top of the stack will be as follows (under the same assumption with respect to the value of “plinus“:

…..   T   x   E   y   E   +   E   z   :-

and after the execution of this assignment the above words will have been removed from the stack, the word “T” inclusive. Until further notice the evaluation of the variable “z” will imply the execution (the “reading”) of the string assigned to it. Upon evaluation of the variable “z” the machine therefore must have access to the first word of this string; when it starts reading this string, however, it must detect the last word of this string. We propose that the assignment operator sees to this by adding again an end marker and for this purpose we can use the very same word “T”. Upon evaluation of the variable “z” the string assigned to it will be read as a piece of program, from left to right until the end marker “T” is met. The new situation resulting from the last assignment can conveniently be represented by:

      ”   z   →   x   E   y   E   +   E   T   ”      .

In exactly the same way our previous assignments

”   3   x   :=   E   ”    or    ”   S   E   3   x   :-   E   ”

will both give rise to the situation, represented by

      ”   x   →   3   T   ”      .

One of the most illuminating aspects of this arrangement is that the usual distinction between “numbers” and “instructions” has completely vanished. The value of a variable is defined as a piece of program, evaluation of this variable implies the execution of this piece of program.

Furthermore we should like to draw attention to a certain form of duality between the assignment on the one hand and reading a text on the other. When the machine reads a piece of program text, the top of the stack is filled under control of this program text. In the assignment “readable text” is created under control of the contents of the stack. The duality can also be illustrated by taking into consideration the accessibility requirements. The words in the stack need only be accessible in the direction from top to bottom. If an assignment statement converts the top of the stack into readable text, however, the consecutive words thereby become accessible in the other direction.

Finally, the stack is reserved for “anonymous intermediate results”, whereas readable text —in principle, at least— is always “named”, for we create it by assigning it to a variable.

The attentive reader will have noticed that, along with the representation of the value of a variable, we have silently introduced two more complications in our machine.

The first one, the occurrence of the word “T” in program text and the machine’s “immediate reaction” to it is a relatively simple one. As we have described the organization, the word “T”, when read in the text, is not copied on top of the stack! Instead, it causes the machine to go on reading at the first word following in the string after the “E” that caused this evaluation of the variable in question. In other words, it acts as a “Return” at the end of a closed subroutine.

But the evaluation of a variable may call for the evaluation of other variables (even for the evaluation of itself): the pragmatic definition of the evaluation of a variable is basically a recursive one and the mechanisms one needs to follow a recursive definition is ….. another stack! I call this second stack “the stack of activations” in contrast to the first which I call “the anonymous stack”. One of the functions of the stack of activations is to control the reading process. When the evaluation of a variable starts the stack of activations expands, when the corresponding word “T” is read, it shrinks to its previous size. (In the usual terminology of machine structure: the stack of activations contains a stack of “order counter values”, its top element being, by definition, “the present order counter”; in the same terminology its older elements act as a stack containing the “return addresses”.)

Note. We could try to merge our two stacks into one. This merging would present itself in a completely natural fashion if the two should expand and shrink “in phase” with one another. In general, however, this is not the case and trying to merge the two stacks into a single one would give a highly unnatural construction.

We shall use the stack of activations for yet another purpose, to satisfy a very fundamental need, viz. the creation of new variables. In the above I have used special words (“x“, “y“, “plinus” etc.) to denote variables and I have carefully avoided to use the term “identifier”. I have used the term “variable” in connection with a single, unique object, existing for some period of time and capable of taking on different values in succession. This concept of a variable is to be distinguished carefully from the “identifier” as used in ALGOL 60, because one and the same identifier may be used to point to a host of objects, to a great number of different variables

First of all we meet the fact that one and the same identifier may play different roles thanks to the fact that it occurs in more than one declaration. A lexicographical rule then tells us which one of these declarations applies everywhere, where the identifier in question may be used. This form of multiple use of one and the same identifier could be removed by a simple process of renaming.

But there is a much more subtle case of “multiple use of one and the same identifier”, viz. as soon as a certain block occurs in one or more nested activations (as in the case of a a recursive procedure). In other words: one and the same identifier then refers sometimes to this variable, sometimes to another.

In actual fact: the identifier stands for a variable and in order to indicate clearly for which variable it stands I intend to denote explicitly the moment when a variable has to be substituted for an identifier.

For the sake of convenience —to be more exact: convenience for the machine and not for the hypothetical user— I intend to use the same identifiers for the local variables of every activation. (What I call “an activation” is closely analogous to a block or procedure body, as known in ALGOL 60.) I use for this purpose the special identifier words “L0”, “L1″,”L2”, etc..

If the machine starts the evaluation of a variable, the stack of activations increases with one item. At the start this item also contains a note that up till now no local variables have been introduced in this activation.

If the machine reads the word “E” at a moment that the top of the anonymous stack contains one of the identifier words (say “L2”) then it investigates the top item of the stack of activations. If it is the first time that this identifier has to be evaluated in the present activation the machine creates a new variable for it (and may give this variable an empty value) and makes in the youngest item of the stack of activations a note to this effect. Then it replaces the top word of the anonymous stack by the variable just created for it. At a next evaluation of the same identifier at a moment that the same activation is still (or again) the present one, the machine finds in the top item of the stack of activations the note left there at the first evaluation of this identifier and the top word of the stack is replaced by the same variable.

Now we can show a more complicated example. Let the values of the variables “x“, “y” and “complus” be as represented by:

”   x   →   10   23   T   ”

”   y   →     5    –2   T   ”

”   complus   →   L0   E   :=   E

                L1   E   :=   E

L2   E   :=   E

L1   E   E   +   E

L1   E   E   L0   E   E   +   E

T   ”      .

If we now read the text

      ”   S   E   x   E   y   E   complus   E   z   :-   E   ”

the net effect will be that we can represent the new value of “z” by:

      ”   z   →   15   21   T   ”

and what we have done can be interpreted as the addition of two complex numbers.

In ALGOL terminology: “complus” is a procedure with four numerical parameters, all called by value. The simple structure of the process allows the first of these to remain anonymous even in the procedure body. Furthermore, it is a kind of “type procedure”, be it one that, syntactically speaking, takes the place of two primaries.

Let me end with a trivial example. Suppose that we want to write “plus” instead of “+”. After the assignment

       ”   S   E   +   P   E   plus   :-   E   ”

which gives rise to the situation

       ”   plus   →   +   E   T   ”

the expressions

       ”   x   E   y   E   plus   E   ”

and       ”   x   E   y   E   +   E   ”

are completely equivalent. This example is included to show as clearly as possible the arbitrariness of our primitives.

Conclusion.I am fully aware that the sketch is definitely incomplete. Particularly conditional reaction and some equivalent of the go tostatement should be incorporated if one wishes to make a system out of this. For the moment I leave these out and I do so for two reasons. Firstly for the sake of brevity and secondly because I have not decided yet: for I know of several possible ways but none of them fully satisfies me.

With some versions of these facilities I have made slightly more elaborate programs. They showed me both the power and the weakness of my Language, its power being its flexibility and its unambiguity, its weakness being the fact that using it intelligently proved to be far above at least my powers.

If nevertheless I claim attention for this project I don’t do so only because it charms me and may charm others as well.  This report is the condensation of my meditations after we had completed our implementation of ALGOL 60.  This implementation was conceived at high speed and the main justification for the numerous decisions taken in those hectic months was the recognition that our conceived constructions would lead to our goal and would do the job, in some way or another.  The Machine described in this report, however, represents an extreme of the continuous spectrum of possible implementations of an algorithmic language which (as is the case with ALGOL 60) caters for recursiveness.  In this quality it has been very clarifying for me personally: it has helped me a great deal in the appreciation of the various (initially disconnected) tricks we have incorporated intuitively and it has clearly shown us a number of alternative solutions.  Therefore the hope is justified that translator construction and machine design in the future will benefit from these considerations.

Furthermore, the Machine presented here is so ridiculously inefficient that every practical implementation of a practical algorithmic language in all probability can be regarded as an optimization of it, an optimization which is permissible thanks to certain restrictions in the language.  It may be useful to compare a proposed language with my language; during the process of language construction it may be helpful in the timely detection of ‘expensive features.’  Whether such an expensive feature will be included or not is more or less a political question but quite apart from how such a question is answered it is nice to know what one is doing.

Finally the language described in this report (or a language devised along similar lines) may prove to be a suitable means for the formalization of the semantic definition of an algebraic language.  The lack of such a rigorous semantic definition is one of the recognized shortcomings of the official ‘Report on the Algorithmic Language ALGOL 60’ and having seen the tremendous amount of trouble caused by this defect, I most sincerely hope that this report will contribute to the effort to avoid this mistake the next time an algorithmic language will be devised.”     Edsger Dijkstra, “Substitution Processes;” from The Edsger W. Dijkstra Archive, 1962


Numero Tres“At a time in America when being a housewife and mother was the primary occupation approved for women, Ariel Durant showed one way of breaking the mold.  Involved in a lifelong loving relationship with her husband, Will, and mother to daughter, Ethel, Ariel Durant first became an assistant and then an equal to her prolific philosopher-writer husband.  An active lecturer and believer in the rights of women, Ariel Durant was able to share in her husband’s fame and accomplishments, though with her personality and ambition she probably would have preferred more independent recognition for her talents.

 

Ariel Durant was born as Chaya Kaufmann in Proskurov, Russia, on May 10, 1898.  She was the daughter of Ethel Appel Kaufman and Joseph Kaufman, a clothing store salesman who emigrated to America, bringing his family over in search of a better life in 1901.  Her early family life was unsettling: her parents made a meager living selling newspapers, and her mother became active in the anarchist movement, eventually moving away from the family.  When Chaya was 14 she transferred from the New York City public schools, where she had gone sporadically, to the anarchist-inspired progressive Ferrer Modern School.  Her teacher was Will Durant.

‘She thought him somewhat ridiculous, being short and shy.  Nevertheless, a bond quickly developed between the 14-year-old (Chaya) Ariel and the 28-year-old teacher.  Passion and love quickly followed, and they were married on October 31, 1913, after Chaya rollerskated to the New York City Hall for their civil ceremony. ‘

Will renamed Chaya “Puck” after the mischievous character in Shakespeare’s Midsummer’s Night Dream. Later he changed her nickname to “Ariel,” the sprite from The Tempest, “because she was strong and brave as a boy, and as swift and mischievous as an elf.”


Husband and wife had opposite personalities: he was shy and retiring, she was outgoing and social. He offered her an outlet for her intellectual curiosity and she introduced him to the world of artists, poets, philosophers and entertainers with whom they socialized in New York and Los Angeles. Ariel became a brilliant conversationalist and sharp debater under the tutelage of the man she called her “teacher, lover, mentor and friend.” Will especially appreciated Ariel’s compulsion to speak her mind, her fun loving appreciation of life, and her championing of women’s rights.As early as 1912, Will Durant envisioned writing a five-part history of civilization, told through the stories of famous people of the times. This was a very different approach from historical research of the time: it made history very readable to the general public, and the volumes were well received by a nation recovering from world war, though some strict historical academicians were harsh critics. The Story of Civilization tries to show the interrelations between science, politics, economics, art, religion and literature of the past 6,000 years. It became an 11-volume opus published between 1935 and 1975.

Ariel began helping Will with this massive project by classifying and organizing his copious notes. As his literary assistant, she worked by his side in relative anonymity for many years. She began supplementing and complementing his research and soon was a critic and contributor. Ariel began to conduct much of the research herself for volume 4, as Will was now in his seventies. In 1961, when the seventh volume was published, Ariel Durant received joint author credit for that and the remaining four volumes. Her own interests in women, France, and England had an impact on the focus and content of the multivolume series. The Durants were awarded the Pulitzer Prize for Literature in 1968 for Rousseau and Revolution, the tenth volume of the series.

After World War II, both Durants became involved in a movement to lessen the racial and religious tensions in the United States. Although Will was the key figure behind the “Declaration of Interdependence,” Ariel took an active role. The movement is still active today.

The Durants were elected to the Institute of Arts and Sciences, and Ariel was chosen one of the five women of the year in 1965 by the Los Angeles Times.

In 1977 the Durants published A Dual Autobiography.  They both received the Presidential Medal of Freedom from President Ford that same year.  Ariel Durant died at home on October 25, 1981.  Her husband, then 95 years old and recovering from surgery in the hospital, died less than two weeks later.

Several days after his death, an editorial cartoon appeared in the Los Angeles Times featuring Ariel on roller skates, welcoming Will to heaven.”    Jerrilyn Jacobs, “Writer Hero: Ariel Durant;” The My Hero Project, 2002