Exploring Languages with Interpreters
and Functional Programming
Chapter 1

H. Conrad Cunningham

29 August 2018

Copyright (C) 2016, 2017, 2018, H. Conrad Cunningham
Professor of Computer and Information Science
University of Mississippi
211 Weir Hall
P.O. Box 1848
University, MS 38677
(662) 915-5358

Browser Advisory: The HTML version of this textbook requires a browser that supports the display of MathML. A good choice as of August 2018 is a recent version of Firefox from Mozilla.

1 Evolution of Programming Languages

1.1 Chapter Introduction

The goal of this chapter is motivate the study of programming language organization by:

1.2 Evolving Computer Hardware Affects Programming Languages

To put our study in perspective, let’s examine the effect of computing hardware evolution on programming languages by considering a series of questions.

  1. When were the first “modern” computers developed? That is, programmable electronic computers.

    Although the mathematical roots of computing go back more than a thousand years, it is only with the invention of the programmable electronic digital computer during the World War II era of the 1930s and 1940s that modern computing began to take shape.

    One of the first computers was the ENIAC (Electronic Numerical Integrator and Computer), developed in the mid-1940s at the University of Pennsylvania. When construction was completed in 1946, it cost about $500,000. In today’s terms, that is nearly $7,000,000.

    The ENIAC weighed 30 tons, occupied as much space as a small house, and consumed 160 kilowatts of electric power.

    Initially, the ENIAC had no main memory. Instead it had 20 accumulators, each 10 decimal digits wide. Later 100 words of core were added.

    Similarly, the ENIAC had no external memory as we know it today. It could read and write stacks of punch cards.

    The ENIAC was not a stored program computer. It was programmed mostly by connecting cables in plugboards. It took several days of careful work to enter one program. The program was only changed every few weeks.

    Aside: Many of the early programmers were women. This is quite a contrast to contemporary programming teams that are mostly male. What happened?

    The ENIAC and most other computers of that era were designed for military purposes, such as calculating firing tables for artillery or breaking codes. As a result, many observers viewed the market for such devices to be quite small. The observers were wrong!

Electronics technology has improved greatly in 70 years. Today, a computer with the capacity of the ENIAC would be smaller than a coin from our pockets, would consume little power, and cost just a few dollars on the mass market.

  1. How have computer systems and their use evolved over the past 70 years?

  2. How have these changes affected programming practice?

The first higher-level programming languages began to appear in the 1950s. IBM released the first compiler for a programming language in 1957–for the scientific programming language Fortran. Although Fortran has evolved considerably during the past 60 years, it is still in use today.

  1. How have the above changes affected programming language design and implementation over the past 60 years?

As we study programming and programming languages in this and other courses, we need to keep the nature of the contemporary programming scene in mind.

1.3 History of Programming Languages

From the instructor’s perspective, key languages and milestones in the history of programming languages include the following.

Note: These descriptions use terminology such as imperative and function that is defined in the subsequent chapters on programming paradigms.

1950’s

1960’s

1970’s

1980’s

1990’s

2000’s

2010’s

The evolution continues!

1.4 What Next?

Computer systems, software development practices, and programming languages have evolved considerably since their beginnings in the 1940s and 1950s. Contemporary languages build on many ideas that first emerged in the early decades of programming languages. But they mix the enduring ideas with a few modern innovations and adapt them for the changing circumstances.

This textbook explores both programming and programming language organization with the following approach:

The next two chapters explore the concept of programming paradigms.

1.5 Exercises

  1. Choose some programming language not discussed above and investigate the following issues.

    1. When was the language created?
    2. Who created it?
    3. What programming paradigm(s) does it support? (See Chapters 2 and 3 for more information about programming paradigms.)
    4. What are its distinguishing characterists?
    5. What is its primary target domain or group of users?
    6. What are other interesting aspects of the language, its history, use, etc?
  2. Repeat the previous exercise for some other language.

1.6 Acknowledgements

In Summer and Fall 2016, I adapted and revised much of this work in from my previous materials:

In 2017, I continued to develop this material as a part of Chapter 1, Fundamentals, of my 2017 Haskell-based programming languages textbook.

In Spring and Summer 2018, I reorganized and expanded the previous Fundamentals chapter into four chapters for the 2018 version of the textbook, now titled Exploring Languages with Interpreters and Functional Programming. These are Chapter 1, Evolution of Programming Languages (this chapter); Chapter 2, Programming Paradigms); chapter 3, Object-Based Paradigms; and Chapter 80 (an appendix), Review of Relevant Mathematics.

I maintain this chapter as text in Pandoc’s dialect of Markdown using embedded LaTeX markup for the mathematical formulas and then translate the document to HTML, PDF, and other forms as needed.

1.7 References

[O’Reilly 2004]:
O’Reilly Media. History of Programming Languages Poster ](http://www.oreillynet.com/pub/a/oreilly/news/languageposter_0504.html), 2004. (30 May 2018: This link seems broken. A temporary link is here.)
[Wikipedia 2018]:
Wikipedia. History of Programming Languages, 2018.

1.8 Terms and Concepts

The evolution of computer hardware since the 1940s; impacts upon programming languages and their subsequent evolution.