McMaster University
CAS 706
Lectures
Extra material
Languages and compilers
Assignements
Presentations
Tuesday 15:30-17:00, and Friday 11:30-13:00 in ITB/222.
Assignments
- Parametrized quicksort
- Lambda calculus interpreter
- Typed Lambda calculus interpreter
- Fun with scripting languages
Types and Programming Languages Benjamin C. Pierce
Programming Languages: Principles and Paradigms Allen Tucker and Robert Noonan.
There is some very useful material at the following pages:
When in the mood to look at weird languages, I definitely recommend
In the same vein, some good jokes based on programming languages.
I recently found a nice comparison of the
extension benefits of OO vs functional. Clearly lays out the tradeoffs involved.
I could also talk about how FP is (mostly) based on initial algebras and OO on
co-algebras, but that might not enlighten many amongst you!
For specific languages, I recommend:
- Smalltalk
- GNU Prolog
- Prolog tutorial
- Use gcc for C code. Turn on all warnings.
- Haskell. I recommend using Hugs for learning Haskell.
- Ocaml. Note that ocaml 3.04 is
installed on the CAS servers (in /usr/local/bin); this is fine for
getting the assignments done. The latest version of ocaml is 3.07+2,
but it is not necessary to use this.
- Java. Java 1.4 is already
installed on all CAS machines.
- You can use either free pascal
or use one of the undergraduates machine with Pascal installed on it.
- mercury.
This is now installed on birkohff (a Sun) and penguin (linux). To
run this properly you should
- add /usr/local/mercury-0.11.0/bin to your PATH,
This can be done (if you use a csh-based shell) via
putting
set path = ($path /usr/local/mercury-0.11.0/bin)
in your .cshrc (in your home directory). Something similar can
be put in your configuration
if you use a sh-based shell.
- add /usr/local/mercury-0.11.0/man to your MANPATH,
- and add /usr/local/mercury-0.11.0/info to your INFOPATH.
- You may also want to add the following lines to the `.emacs' file in your home directory (if you are an emacs user):
(setq load-path (cons (expand-file-name
"/usr/local/mercury-0.11.0/lib/mercury/elisp") load-path))
(autoload 'mdb "gud" "Invoke the Mercury debugger" t)
All the sites above contain executables and lots of documentation.
Presentations
Dan Zingaro -- Typed lambda calculus and exceptions
Wen Yu -- Normalization and References
Jessie Li -- Overload and OVerriding
Orlin Grigorov -- Inheritance, Subtyping and Prototypes in OO
Xiaolei Cui -- Compiling Functional Languages;
separately, Ryan pointed me to
a paper by DonS on compiling Haskell, a good read.
Paul Hachmann -- Comonads
Pouya Larjani -- Domain Theory
David Miller -- Compiling dynamically typed languages
Additional resources
The slides from
this course on programming languages are also topical.
Googling for "introduction to lambda calculus" and
"lambda calculus interpreter" yield a lot of useful resources
Sep 2006