Exploring Languages
with Interpreters
and Functional Programming
Chapter 1

H. Conrad Cunningham

08 April 2022

Copyright (C) 2016, 2017, 2018, 2019, 2022, H. Conrad Cunningham
Professor of Computer and Information Science
University of Mississippi
214 Weir Hall
P.O. Box 1848
University, MS 38677
(662) 915-7396 (dept. office)

Browser Advisory: The HTML version of this textbook requires a browser that supports the display of MathML. A good choice as of April 2022 is a recent version of Firefox frvom 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 Chapters 2 and 3 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:

Chapters 2 and 3 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 retired from the full-time faculty in May 2019. As one of my post-retirement projects, I am continuing work on this textbook. In January 2022, I began refining the existing content, integrating additional separately developed materials, reformatting the document (e.g., using CSS), constructing a bibliography (e.g., using citeproc), and improving the build workflow and use of Pandoc.

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 Terms and Concepts

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

1.8 References

[1]
Edwin Brady. 2017. Type-driven development with Idris. Manning, Shelter Island, New York, USA.
[2]
Edwin Brady. 2022. Idris: A language for type-driven development. Retrieved from https://www.idris-lang.org
[3]
William E. Byrd. 2009. Relational programming in miniKanren: Techniques, applications, and implementations. PhD thesis. Indiana University, Bloomington, Indiana, USA.
[4]
William E. Byrd and Contributers. 2022. miniKanren,org. Retrieved from http://minikanren.org/
[5]
William F. Clocksin and Christopher S. Mellish. 2012. Programming in Prolog: Using the ISO standard (Fifth ed.). Springer, Berlin, Germany.
[6]
Evan Czaplicki. 2022. Elm: A delightful language for reliable web applications. Retrieved from https://elm-lang.org
[7]
Elixir Team. 2022. Elixir. Retrieved from https://elixir-lang.org
[8]
Richard Feldman. 2020. Elm in action. Manning, Shelter Island, New York, USA.
[9]
Michael Fogus and Chris Houser. 2011. The joy of Clojure. Manning, Shelter Island, New York, USA.
[10]
Phil Freeman. 2017. Purescript by example: Functional programming for the web. Leanpub, Victoria, British Columbia, Canada. Retrieved from https://book.purescript.org/
[11]
Daniel P. Friedman, William E. Byrd, Oleg Kiselolyov, and Jason Hemenn. 2018. The reasoned schemer (Second ed.). MIT Press, Cambridge, Massachusetts, USA.
[12]
Daniel P. Friedman and Matthias Felleisen. 1995. The little schemer (Fourth ed.). MIT Press, Cambridge, Massachusetts, USA.
[13]
Daniel P. Friedman and Matthias Felleisen. 1995. The seasoned schemer (Second ed.). MIT Press, Cambridge, Massachusetts, USA.
[14]
Adele Goldberg and David Robson. 1983. Smalltalk-80 the language and its implementation. Addison-Wesley, Boston, Massachusetts, USA.
[15]
Rich Hickey. 2020. A history of Clojure. Proceedings of the ACM on Programming Languages 4, HOPL, Article 71 (2020), 1–46.
[16]
Rich Hickey. 2022. The Clojure programming language. Retrieved from https://clojure.org/
[17]
Roberto Ierusalimschy. 2016. Programming in Lua (Fourth ed.). Lua.org, Pontifical Catholic University of Rio de Janeiro (PUC-Rio), Brazil.
[18]
Steve Klabnik, Carol Nichols, and Conributers. 2019. The Rust programming language (Rust 2018th ed.). No Starch Press, San Francisco, California, USA. Retrieved from https://doc.rust-lang.org/book/
[19]
LabLua, PUC-Rio. 2022. Lua: The programming language. Retrieved from https://www.lua.org/
[20]
Simon Marlow (Ed.). 2010. Haskell 2010 language report. Retrieved from https://www.haskell.org/definition/haskell2010.pdf
[21]
John McCarthy. 1978. History of LISP. ACM SIGPLAN Notices 8 (1978), 217–223. Retrieved from https://pages.cs.wisc.edu/~horwitz/CS704-NOTES/PAPERS/mccarthy.pdf
[22]
John McCarthy, Paul W. Abrahams, Daniel J. Edwards, Timothy P. Hart, and Michael I. Levin. 1962. LISP 1.5 programmer’s manual. MIT Press, Cambridge, Massachusetts, USA. Retrieved from https://apps.dtic.mil/sti/pdfs/AD0406138.pdf
[23]
O’Reilly Media. 2004. History of programming languages poster. Retrieved from https://www.cs.toronto.edu/~gpenn/csc324/PLhistory.pdf
[24]
Martin Odersky, Lex Spoon, and Bill Venners. 2021. Programming in Scala (Fifth ed.). Artima, Inc., Walnut Creek, California, USA.
[25]
purescript.org. 2022. PureScript: A strongly-typed functional programming language that compiles to javascript. Retrieved from https://www.purescript.org/
[26]
Python Software Foundation. 2022. Python. Retrieved from https://www.python.org/
[27]
Christian Queinnec. 2003. Lisp in small pieces. Cambridge University Press, Cambridge, UK.
[28]
Luciano Ramalho. 2013. Fluent Python: Clear, concise, and effective programming. O’Reilly Media, Sebastopol, California, USA.
[29]
Ruby Community. 2022. Ruby: A programmer’s best friend. Retrieved from https://www.ruby-lang.org
[30]
Rust Team. 2022. Rust: A language empowering everyone to build reliable and efficient software. Retrieved from https://www.rust-lang.org/
[31]
Scala Language Organization. 2022. The Scala programming language. Retrieved from https://www.scala-lang.org/
[32]
SelfLanguage.org. 2022. Self: Fun through simplicity. Retrieved from https://selflanguage.org/
[33]
SWI-Prolog Organization. 2022. SWI-Prolog: Robust, mature, free Prolog for the real world. Retrieved from https://www.swi-prolog.org/
[34]
The R Foundation. 2022. R: The R project for statistical programming. Retrieved from https://www.r-project.org/
[35]
Dave Thomas. 2018. Programming Elixir >= 1.6: Functional |> concurrent |> pragmatic |> fun. Pragmatic Bookshelf, Raleigh, North Carolina, USA.
[36]
David Thomas, Chad Fowler, and Andrew Hunt. 2004. Programming Ruby (Second ed.). Pragmatic Bookshelf, Raleigh, North Carolina, USA.
[37]
Simon Thompson. 2011. Haskell: The craft of programming (Third ed.). Addison-Wesley, Boston, Massachusetts, USA.
[38]
David Ungar and Randall B. Smith. 1987. Self: The power of simplicity. In Proceedings of the ACM conference on object-oriented programming systems, languages and applications (OOPSLA’87), Orlando, Florida, USA, 227–242.
[39]
Wikibooks: Open Books for the World. 2019. Haskell. Retrieved from https://en.wikibooks.org/wiki/Haskell
[40]
Wikpedia: The Free Encyclopedia. 2022. History of programming languages. Retrieved from https://en.wikipedia.org/wiki/History_of_programming_languages
[41]
Wikpedia: The Free Encyclopedia. 2022. R (programming language). Retrieved from https://en.wikipedia.org/wiki/R_(programming_language)
[42]
Wikpedia: The Free Encyclopedia. 2022. Lisp (programming language). Retrieved from https://en.wikipedia.org/wiki/Lisp_(programming_language)
[43]
Wikpedia: The Free Encyclopedia. 2022. Scheme (programming language). Retrieved from https://en.wikipedia.org/wiki/Scheme_(programming_language)