CSci 450-01: Organization of Programming Languages
CSci 503-01: Fundamental Concepts in Languages
Fall 2014

Lecture Notes and Web Resources


Sections:


    Reference Materials

  1. Free online programming language textbooks and tutorials
  2. Functional programming using Haskell:
      Primary Haskell lecture notes and tutorials for course
    1. H. Conrad Cunningham. Notes on Functional Programming with Haskell
      This document is under revision during Fall 2014 and may change frequently. Reload the page or clear the browser cache to ensure that you see the latest version.
    2. Miron Lipovaca. Learn You a Haskell for Great Good: A Beginner's Guide, online tutorial
      This book is also available in print, published by No Starch Press April 2011.

    3. Other Haskell books
    4. 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.
    5. 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: [source code for SOE]
    6. Simon Marlowe. Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming, 2013
      This book is also availabel in print, published by O'Reilly Media 2013.
    7. Bryan O'Sullivan, Don Stewart, and John Goerzen. Real World Haskell: [HTML book]
      This book is also available in print, publised by O'Reilly Media November 2008.
    8. (book not online) Simon Thompson. Haskell: The Craft of Functional Programming, Third Edition, Addison Wesley, 2011:
      [source code] [local copy of source code]

    9. Other Haskell resources
    10. Haskel project web site
  3. Lua:
    1. (Textbook not available online) Roberto Ierusalimshcy. Programming in Lua( PiL), Third Edition, Lua.org, Rio de Janiero, 2013 (covers Lua 5.2)
    2. Course notes by Fabio Mascarenhas for a course based on Programming in Lua
    3. Official Lua language site: [download ] [documentation]
    4. Lua users site: [wiki]
  4. Prolog:
    1. Patrick Blackburn, Johan Bos, and Kristina Striegnitz. Learn Prolog Now, online tutorial
    2. SWI Prolog, stable release 6.6.6, available from http://www.swi-prolog.org/ or various other repositories.
  5. William R. Cook. Anatomy of Programming Languages, online draft
  6. Kathleen Fisher's lectures on programming languages: [local]
  7. (SICP) Harold Abelson and Gerald J. Sussman with Julie Sussman. Structure and Interpretation of Computer Programs, Second Edition, MIT Press, 1996:
    [book site at MIT Press] [HTML book] [SICP ebook site] [local copy of source code]
  8. Shiram Krishnamurthi. Programming Languages: Application and Interpretation, Second Edition:
    [HTML] [PDF] [Fall 2012 course] [Fall 2013 course]

  9. Schedule, Lecture Notes, and Examples

  10. (25 Sep) Examine syllabus and discuss class organization. Separate CSci 503 students into new meeting time (10:00 MWF, Weir 106).
  11. Discuss the changes in computer systems over past 70 years and their implications for programming and programming language design.
    1. (27 Sep) Effect of Computing Hardware Evolution on Programming Languages, instructor's lecture notes
    2. (for reference) Nathan Ensmegner's Early History of Computing, The Franklin Institute
    3. (for reference) Wikipedia article on History of Computing Hardware
    4. (for reference) Wikipedia article on the Timeline of Computing
  12. (27 Aug) Discuss Backus' Turing Award lecture excerpt in Notes on Functional Programming with Haskell, section 1.2, pages 2-4.
  13. (29 Aug) Discuss history of programming languages over past 60 years, calling attention to the emergence of paradigms and major languages. See instructor's notes.
  14. (29 Aug) Discuss programming paradigms from Notes on Functional Programming with Haskell, section 1.3, pages 5-6.
  15. (3 Sep) Discuss simple factorial function example to explore Haskell syntax and semantics.
    1. Background reading: Chapter 2 "Starting Out" of Learn You a Haskell for Great Good
    2. (for reference) GHCi User's Guide
    3. Lecture from chapter 3 of Notes on Functional Programming with Haskell, pages 17-22
    4. Demonstrate the GHCi (Glasgow Haskell Compiler interactive interface) using the factorial functions from chapter 3.
      Note: GHCi is an interactive REPL (Read-Evaluate-Print-Loop) tool for the Haskell language.
  16. (5 Sep) Discuss reasons for stiudying functional programming and related concepts and terminology in section 1.4 of of Notes on Functional Programming with Haskell (pages 6-8). Important concepts: referential transparency, abstraction, first-class functions, higher-order functions, and eager versus lazy evaluation
  17. Discuss basic Haskell functional programming concepts from chapter 5 of Notes on Functional Programming with Haskell, pages 25-54.
    1. Background reading: Chapters 2, 3, 4, and 5 of Learn You a Haskell for Great Good
    2. (for reference) Haskell Cheat Sheet
    3. Haskell modules from Notes chapter 5
    4. (5-8 Sep) Haskell builtin data types, section 5.1, pages 25-29
    5. (8 Sep) Programming with list patterns, section 5.2, pages 30-34
    6. (10-12 Sep) Infix operators, recursive programming styles, more list operations, and the rational arithmetic package, section 5.3-6, pages 35-47
    7. (15 Sep) Standard Prelude functions
    8. (15 Sep) IO program to test an xor function
    9. (17 Sep) Live coding demonstration using exercises 6 and 8 at the end of chapter 5
    10. (19 Sep) Example rjustify function
    11. (19 Sep) Exponentiation function examples (backward, tail, and logarthmic)
    12. (for reference) Kathleen Fisher's introductory slides on Haskell

  18. Discuss Haskell higher-order functions from chapter 6 of Notes on Functional Programming with Haskell, pages 55-78.
    1. Background reading: Chapter 6 of Learn You a Haskell for Great Good
    2. Haskell modules from Notes chapter 6
    3. (12-15 Sep) Capturing computational patterns using higher-order functions: Maps and filters from sections 6.1-2, pages 55-58
    4. (19-22 Sep) Capturing more computational patterns using higher-order functions: folds from section 6.3, pages 58-61
    5. (22 Sep) Example uses of fold functions
    6. (22 Sep) Higher-order function concepts and features: Stictness and currying from sections 6.4-5, pages 61-63
    7. (24-26 Sep) Higher-order function concepts and features: Operator sections, combinators, and functional composition, and lambda expressions from sections 6.6-9, pages 64-69
    8. (26 Sep) Capturing more computational patterns: List-breaking and list-combining functions, sections 6.10-11, pages 69-71
    9. (26 Sep) Case studies: Rational arithmetic package revisited and cosequential pocessing package, sections 6.12-13, pages 72-74
  19. Discuss Haskell sequences and comprehensions from chapter 7 of Notes on Functional Programming with Haskell, pages 79-84.
    1. Background reading: Sections "Texas ranges" and "I'm a list comprehension" in Chapter 2 of Learn You a Haskell for Great Good
    2. Haskell modules from Notes chapter 7
    3. (15 Sep) Discuss Haskell sequences and comprehensions from chapter 7 of Notes on Functional Programming with Haskell, pages 79-82.
    4. (19 Sep) Discuss "first occurrence in a list" problem and "solve a harder problem" strategy from section 7.2.6 of Notes on Functional Programming with Haskell, page 83.
  20. Examination 1
    1. (29 Sep) Covers everything to this point in the semester (e.g. items 9-18 of this list)
    2. (6 Oct) Discuss graded exam [solution]
  21. (1 Oct) Discuss recognizing regular expressions from Simon Thompson. Haskell: The Craft of Functional Programming, Third edition, Addison Wesley, 2011, for assignment #3.

  22. Discuss Haskell algebraic data types and type classes.
    1. Background reading: Chapter 3 and Chapter 8 of Learn You a Haskell for Great Good
    2. Haskell modules from Notes chapter 8
    3. (3, 8 Oct) Chapter 8 of Notes on Functional Programming with Haskell, pages 85-94
    4. (8-10 Oct) Overloading and Type Classes
    5. (for reference) Kathleen Fisher's slides on Type Classes
    6. (for reference) Type Inference
    7. (for reference) Kathleen Fisher's slides on Types
  23. (10 Oct) Discuss problem-solving techniques from chapter 10 of Notes on Functional Programming with Haskell, pages 105-108
  24. (13 Oct) 9:00 CSci 450 class meets with ABET/CAC Program Evaluator. 10:00 CSci 503 class does not meet.
  25. Discuss languages, expressions, syntax, and evaluation from Chapter 1 and Chapter 2 of William Cook's Anatomy of Programming Languages.
    1. (for reference) Bruno Olivera's slides for William Cook's Anatomy of Programming Languages.
    2. (15 Oct) Introduction to languages (pages 8-9)
    3. (15 Oct) Simple language of arithmetic, abstract syntax, and recognizing tokens in concrete syntax (pages 19-21)
    4. (20 Oct) Simple language for arithmetic concrete syntax, grammars, and evaluation (pages 23-30)
    5. Source code for simple language: [Lexer.hs] [Simple.hs] [Base.hs] [SimpleParse.y] [SimpleTest.hs]
  26. (17 Oct) Discuss compilers and syntax from section 4.1 (pages 48-57) of John Mitchell's Concepts in Programming Languages, Cambridge University Press, 2003.
  27. (TBD) Discuss scope, functions, and storage management from Chapter 7 (pages 204-231) of John Mitchell's Concepts in Programming Languages, Cambridge University Press, 2003: [slides]

UP to CSci 450/503 root document?


Copyright © 2014, H. Conrad Cunningham
Last modified: Fri Oct 24 16:19:07 CDT 2014