CSci 450-01: Org. of Programming Languages
CSci 503-01: Fund. Concepts in Languages
Lecture Notes, Fall 2018

H. Conrad Cunningham

30 September 2018

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

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

Lecture Notes

Go To Current Lecture!

Schedule, Notes, and Examples

  1. Textbook: Exploring Languages with Interpreters and Functional Programming
    [HTML] [PDF]

  2. (20 Aug) Discuss syllabus, class organization, and textbook

  3. Discuss Evolution of Programming Languages (Chapter 1):
    [HTML] [PDF]

    1. (22 Aug) Section 1.2, Evolving Computing Hardware Affects Programming Languages:
      [HTML slides]

    2. (22, 24 Aug) Section 1.3, History of Programming Languages:
      [HTML slides]

  4. Discuss Programming Paradigms (Chapter 2):
    [HTML] [PDF]

  5. (FUTURE) Defer Object-Based Paradigms (Chapter 3) until later:
    [HTML] [PDF]

  6. Discuss First Haskell Programs (Chapter 4):
    [HTML] [PDF]

  7. (5 Sep) Discuss Assignment #1: [HTML] [PDF].

    Posted to website and announced via email on 2 Sep.

  8. Examine Haskell Types (Chapter 5) and programming basics:
    [HTML] [PDF]

  9. Discuss Procedural Abstraction (Chapter 6):
    [HTML] [PDF]

  10. Discuss Data Abstraction:
    [HTML] [PDF]

  11. Discuss Recursion Styles and Efficiency (Chapter 9):
    [HTML] [PDF]

  12. (19 Sep) Review for Exam #1

  13. (21 Sep) Give Examination #1 over ELIFP Chapters 1-2, 4-7, 9

  14. Discuss List Programming (Chapter 13):
    [HTML] [PDF]

  15. (26 Sep) Go over graded Exam #1

  16. (30 Sep) Post Assignment #2 (WWM Point-of-Purchase Project)

  17. Discuss Infix Operators and List Examples (Chapter 14):
    [HTML] [PDF]

  18. Discuss Higher-Order Functions (Chapter 15):
    [HTML] [PDF]

  19. Discuss Haskell Function Concepts (Chapter 16):
    [HTML] [PDF]

  20. Discuss Higher-Order Function Examples (Chapter 17):
    [HTML] [PDF]

  21. More List Processing (Chapter 18):
    [HTML] [PDF]

  22. (DEFER) Discuss Evaluation Model (Chaper 8):
    [HTML] [PDF]

    NO UPDATE FROM HERE (2017 dates)

  23. Discuss Algebraic Data Types (Chapter 8): [HTML] [PDF]

    1. (16, 25 Oct) Algebraic Data Types
  24. (18 Oct) Review for Exam #2

  25. (20 Oct) Examination #2 primarily covering Section 2.6 and 2.7, Chapter 5, Section 7,2 and 7.3, and Chapter 8.

  26. (23 Oct) Return and discuss Exam #2 except last problem

  27. (25 Oct) Return and discuss last problem on Exam #2

  28. (25 Oct) Discuss systematic testing of modules (with respect to Assignment #4)

    1. Assignment #4 description

    2. Extensive test driver BagTest2.hs

  29. (27 Oct) Complete discussion of Algebraic Data Types (slides) (Chapter 8, Maybe and Either types)

  30. (for reference, mentioned 27 Oct) Examine the Labeled Digraph case study

    1. Background (These notes have not been updated to use Haskell. Some material has also been incorporated into chapters 1 and 2 of “Introduction to Functional Programming Using Haskell”.)

    2. Haskell version (Spring 2015)

    3. Elixir version (Spring 2015)

    4. Scala versions (Spring 2016)

    5. Using the Elixir Digraph ADT module to build the Wizard’s Adventure game (Spring 2015)

  31. Explore Overloading and Type Classes (Chapter 9): [HTML] [PDF]

    1. (27, 30 Oct, 1 Nov) Overloading and Type Classes (slides)

    2. (1, 3 Nov) Movable Objects case study

  32. (for Assignment #5) Building domain-specific languages

    1. (30 Oct) Sandwich DSL Case Study

    2. (for reference) Domain-Specific Languages introduction

  33. Discuss language processing phases for compilers and interpreters

    1. (3, 6, 8 Nov) Compilation and interpretation

  34. (13 Nov, Assignment #6) Extending the Expression Language interpreter

  35. (8, 13, 15 Nov) Explore the Expression Language Syntax and Semantics (Chapter 10) [HTML] [PDF]

    Supplemental slides:

    Code in work:

  36. (10 Nov) No class because of a scheduling mistake

  37. (15 Nov) Review for Examination #3

  38. (17 Nov) Examination #3

  39. (20-24 Nov) Enjoy Fall Break!

  40. (27, 29 Nov) Explore the Expression Language Parsing (Chapter 11) [HTML] [PDF]

    Supplemental slides:

    Code in work:

  41. (for reference) Explore the Expression Language Compilation [HTML] [PDF]

    Code in work:

  42. (for reference) Explore the Imperative Core Language: [HTML (future)] [PDF (future)]

    Code in work:

  43. (1 Dec) Return Examination #3 and Review for Examination #4

  44. (7 Dec, 8-11 a.m.) Examination #4 in Final Exam period

  45. (TBD) Study Names, Scopes, and Bindings from Scott’s PLP textbook Chapter 3: slides

  46. (TBD) Study Subroutines and Control Abstractions form Scott’s PLP textbook Chapter 9: slides

  47. (for reference) Notes on Scala for Java Programmers

  48. (for reference) Introduce Lua programming language

    1. Reference: Roberto Ierusalimshcy. Programming in Lua, Fourth Edition, Lua.org, Rio de Janiero, Brazil, 2016. The First Edition of this book is available online at https://www.lua.org/pil/contents.html; it covers Lua 5.0.

    2. Background: The slides below are adapted, in part, from Programming in Lua, Slides for Course by Fabio Mascarenhas from the Federal University of Rio de Janeiro, Brazil. He taught a course, which used Lua 5.2, at Nankai University, P. R. China, in July 2013.

    3. Introduction to Lua slides based, in part, on Mascarenhas slide sets 0-5

      Concepts: Lua design principles, REPL, chunk, script, data types and operators (e.g., nil, boolean, number, string, table, function), dynamic vs. static typing, first-class functions (first-class, anonymous, variadic, multiple return), statements (multiple assignment, if, while, repeat, numeric for, generic for, do), tables (as array, matrix, record, set)

    4. Advanced Lua Functions slides based, in part, on Mascarenhas slide set 6

      Concepts: lexical scope, higher-order functions, closure, callback, functional programming (map, filter, folds) Currying, partial application

    5. Modules in Lua slides based, in part, on Mascarenhas slide set 9

      Concepts: module, information hiding, interface, abstract interface, module and interface design criteria, Lua module implementation

    6. Lua Metatables slides based, in part, on Mascarenhas slide set 10

      Concepts: metatable; metamethod; Lua metatable & metamethod-related functions; shared metatable; overriding operation behavior; use of metamethods such as __add, __len, __eq, __lt, __le, __index, __newindex, and __tostring; proxy tables example

    7. Lua Objects slides based, in part, on Mascarenhas slide set 11

      Concepts: a simple Lua object model; Lua tables as objects; method; receiver object; colon method call operator; self; syntactic sugar; Lua classes as modules; using metatables and metamethod __index to construct classes and superclasses; constructor; class method; instance method; examples of classes and superclasses; instance-of;


References and Web Resources

General language

  1. Free online programming language textbooks and tutorials

  2. Harold Abelson and Gerald J. Sussman with Julie Sussman. Structure and Interpretation of Computer Programs, Second Edition, MIT Press, 1996. [HTML book]

    SICP video lectures, Hal Abelson

  3. William R. Cook. Anatomy of Programming Languages online draft

  4. Shiram Krishnamurthi. Programming Languages: Application and Interpretation, online book

Lua

  1. Lua language website

  2. Lua users site

    1. Lua Tutorial
  3. Fabio Mascarenhas. Programming in Lua, Slides for Course, Federal University of Rio de Janeiro, Brazil, July 2013. This course was delivered at Nankai University, P. R. China, in July 2013 using Lua 5.2.

  4. Roberto Ierusalimshcy. Programming in Lua, First Edition, Lua.org, Rio de Janiero, Brazil, 2003. This old edition at https://www.lua.org/pil/contents.html covers Lua 5.0.

  5. Luarocks component site

  6. Lua Toolbox

  7. Kepler Project

  8. Tecgraf PUC-Rio Libraries and Tools for Lua

  9. Penlight Lua Libraries inspired by the Python standard libraries

  10. LuaMacro site

  11. Love 2D game framework

Elm

  1. Elm language website

  2. Awesome Elm tutorial list

  3. An Introduction to Elm

  4. Elm Tutorial

Haskell

  1. Haskell language website

    1. Haskell 2010 Language Report

    2. GHC User’s Guide

  2. Haskell Cheat Sheet

  3. School of Haskell online tutorials

  4. Miron Lipovaca. Learn You a Haskell for Great Good: A Beginner’s Guide, a free online tutorial at http://learnyouahaskell.com/. (It is also in print from No Starch Press, 2011.)

    Video lectures by Peter Drake

  5. H. Conrad Cunningham. Introduction to Functional Programming Using Haskell, Computer and Information Science, University of Mississippi, 2016 (partial draft), available from the prototype CSci 555 course site at http://www.cs.olemiss.edu/~hcc/csci555/prototype/. I begin developing this set of notes in June 2016 based partly on previous materials.

  6. H. Conrad Cunningham. Notes on Functional Programming with Haskell, Computer and Information Science, University of Mississippi, 1994-2014. This older document is being revised and integrated with other materials to produce the document Introduction to Functional Programming Using Haskell.

  7. Kees Doets and Jan van Eijck. The Haskell Road to Logic, Math and Programming, March 2004. This book is also available in print, published by College Publications, 2004.

  8. Paul Hudak. The Haskell School of Music: From Signals to Symphonies, Version 2.6, January 2014. This book is a recent rewrite of Hudak’s The Haskell School of Expression: Learning Functional Programming through Multimedia, Cambridge University Press, 2000.

  9. Simon Marlowe. Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming,
    1. This book is also available in print, published by O’Reilly Media, 2013.
  10. Bryan O’Sullivan, Don Stewart, and John Goerzen. Real World Haskell,
    1. This book is also available in print, published by O’Reilly Media in November 2008.

Prolog

  1. SWI Prolog website

  2. Patrick Blackburn, Johan Bos, and Kristina Striegnitz. Learn Prolog Now. This a tutoral available online at http://www.learnprolognow.org/. It is also available in print from College Publications, 2006.