Overview
This page provides information on some of the resources available for students in COP 4020. The page is organized as follows:
- Course resources
- Various paradigms (including OO programming, Distrubuted Programming, AOP, functional programming (including information on Haskell and on Erlang), logic programming, and Multi-paradigm languages)
- Language design resources
- Semantics resources.
Course Resources
Related to various Textbooks
- Concepts, Techniques, and Models of Computer Programming by Peter Van Roy and Seif Haridi (MIT Press, 2004).
Related to the Course Materials
- Course home page.
- Meeting outlines directory, containing outline files for the "lectures".
- Old homeworks directory, containing old homework assignments from this and previous semesters (and their testing files). Current students should only use the assignments from Webcourses, as this directory is not necessarily up to date during the current semester.
- Lecture notes directory, containing strangely formatted notes for the "lectures". We recommend that students use the Meeting outlines (above) instead.
- The course documentation directory
including:
- Following the Grammar with Haskell by Gary T. Leavens, which is designed to help you write good functional programs in Haskell.
Various Paradigms
Some general resources are the following.
- Programming Paradigms for Dummies: What Every Programmer Should Know , by Peter Van Roy, a chapter from G. Assayag and A. Gerzso (eds.) New Computational Paradigms for Computer Music, IRCAM/Delatour, France.
- Gary Leavens's programming languages page with various links
- Rosetta Code, a collection of tasks solved in many different programming languages (including many in Oz).
- Lambda the Ultimate programming languages weblog.
- Language Popularity
OO Programming
- Smalltalk.org.
- Cincom (formerly ParcPlace) VisualWorks Smalltalk Non-Commercial version
- Squeak Smalltalk.
- Squeak by Example
- Free on-line books on Smalltalk.
-
Java related information.
- Java Concurrency in Practice, the web site for an excellent book by Brian Goetz and others.
- There is an implementation of flow-based programming in Java available from this sourceforge project. Also check out the web site for more information.
- Ruby
- A Ruby implementation of dataflow variables and actors.
- Scala.
- Cω.
Distributed Programming
- See the more extensive Erlang resources (below).
- Orc, an orchestration language.
Aspect-Oriented Programming
- Aspect-oriented Software Development (aosd.net)
- AspectJ (eclipse.org/aspectj/)
- HyperJ design paper
- MixJuice
Component-Based Programming
- See Component Software: Beyond Object-Oriented Programming by Clemens Szyperski (Addison-Wesley, 1998).
Functional Programming
- Functional programming FAQ
- Why Functional Programming Matters by John Hughes.
- Beating the Averages by Paul Graham, on how the expressive power of Lisp helped in a startup.
- Functional Jobs, which has job postings for companies looking for functional programmers.
- The Galois a company that makes extensive use of Haskell commercially.
-
Haskell related information.
- Our Running Haskell page, with information about installing and running Haskell on your home computer or laptop.
- A page of Haskell Tutorials.
- The Haskell 2010 Report.
- Other materials for learning Haskell.
- An Introduction to QuickCheck2, a random testing tool for Haskell.
- HUnit, a unit testing tool for Haskell.
- F#
- Scheme
- Racket, a dialect of Scheme.
- Standard ML, the New Jersey version.
- OCaml, a version of ML with OO extensions.
-
Ericsson uses the functional language
Erlang
to write all of its software.
- Our Running Erlang page. This has tips for installing Erlang and editing Erlang files.
- erlang.org, which has downloads, and documentation.
- Erlang Reference Manual, which includes sections on the type notation (chapter 7) and records (chapter 10).
- Erlang standard library modules
- Erlang Programming wiki book.
- Erlang plugin for Eclipse.
- The ICFP Programming contest gives some ideas for what kinds of problems can be solved with functional programming.
- Clojure
- R a statistical programming language with functional features.
- ECMAScript, the standard version of Javascript, which can be used as a functional programming language.
Logic Programming
- lambda Prolog related information.
- The Teyjus lambda Prolog implementation.
- XSB, a version of Prolog with tabling.
Multi-Paradigm Languages
- Lua
-
Oz is a dynamically-typed
multi-paradigm language.
- Examples of Oz code that compute
various properties related to chapter 2. This includes,
as described in the 0DOCS.pdf file:
- Free variable identifiers (see also FreeVarIdsTest.oz).
- Bound variable identifiers (see also BoundVarIdsTest.oz).
- Desugaring (see also BoundVarIdsTest.oz).
- A parser for a subset of Oz. This is written using a set of Parsing Combinators and a state-machine-based lexical analysis technique. (See also MyOzParserTest.oz.)
- An unparser (for printing abstract syntax tree records, see also UnparseTest.oz).
- The operational semantics (see also ReducerTest.oz).
- The Mozart/Oz system.
This includes:
- The system's documentation (available on your own system, if you have installed Mozart),
- An "Unofficial Wiki"
- Examples of Oz code that compute
various properties related to chapter 2. This includes,
as described in the 0DOCS.pdf file:
- The Alice language.
Language Design
- An Introduction to the Literature On Programming Language Design.
- Benjamin Pierce's list of the most important papers in programming languages.
Semantics
Last modified Wednesday, October 30, 2019.
This web page is for COP 4020 at the University of Central Florida. The details of this course are subject to change as experience dictates. You will be informed of any changes. Please direct any comments or questions to Gary T. Leavens at Leavens@ucf.edu. Some of the policies and web pages for this course are quoted or adapted from other courses I have taught, in partciular, Com S 342.