CSCE 4430: Programming
Languages - Spring 2011
Instructor: Paul Tarau,
Associate Professor - see my home page
for contact info and office hours.
Teaching Assistant: Mahesh Gautam – he will be using mudle
(enrollment code 44302011) for project
submissions. See his home page
for contact info and office hours.
E-mail : t a r a u@cs.unt.edu
WWW : http://www.cs.unt.edu/~tarau
Address: Department
of Computer Science, University of North Texas,
P.O. Box 311366, Denton,
Texas 76203, USA
Phone : Tel : +1-940-565-2806, +1-940-565-2767
Fax : +1-940-565-2799
Description and Objectives:
An advanced programming language course, with emphasis on
programming paradigms and language processors - and some of their formal models
like Predicate Logic and Lambda Calculus and exhibiting actual
implementations of key concepts (recursion, inheritance, unification,
backtracking, type inference, infinite and lazy data objects, threads,
event-driven and concurrent/distributed programming). The course also provides
a glimpse at salient features of modern object oriented languages and an
overview of language implementation techniques, run-time systems, garbage
collection, interpreters, compilers with emphasis on addressing and
memory management in efficient procedural languages like C.
Syllabus (L1..Ln)
indicate number of the lecture
- Basics
- Quick
Introduction to Scala and Eclipse (our main
tools) L1
- Evolution
of Programming Languages L1
- Programming
Paradigms: logic, functional, object oriented, imperative L1
- Language
Specification: Syntax and Semantics L2
- Language
Processors: Interpreters and Compilers L2
- Models
of Computation, Computability, Turing Equivalence L2
- Object
Oriented Programming (Java and Scala)
- Types:
Static vs. Dynamic Type Checking L3
- Classes
and Instances, Type vs. Implementation Inheritance L3
- Collections,
Iterators and IO operations L4
- Reflection
and Serialization L4
- Object
Oriented Exception Handling L4
- Functional
Programming Languages (Scala and Haskell)
- Lambda
Calculus and Recursion Theory L5
- Higher
Order Functions L5
- Working
with Fold/Unfold, Map, Zip L5
- Case
Classes and Pattern Matching L6
- Regular
Expressions and Combinator Parsers L6
- Lazy
Evaluation, Computing with Infinite Lists L7
- Polymorphism,
Type inference, Type Classes L7
- Logic
Programming Languages (Prolog, using a Scala-based
Interpreter)
- Unification
and Horn Clause Resolution L8
- Non-determinism
and Backtracking with application to Problem Solving L8
- Practical
Prolog: IO, File Operations L9
- Definite
Clause Grammars L9
- Parsing
and Generation L9
- Meta-Interpreters,
Universal Machines L10
- Low
Level Imperative Programming (C)
- basics:
assignment, function calls, lexical scoping, memory representations L11
- implementing
dynamic memory management and garbage collection L11
- Implementing
high-level programming languages L12
- Concurrent
Programming
- Multi-threaded
programming and Actors in Scala and Prolog L13
- Distributed
Programming, Client/Server Message Passing and Coordination L14
- Service
Architectures and Interactivity L14
- Future
trends in Programming Language Design L15
Prerequisites: mandatory (Data Structures)
Recommended books:
Evaluation:
- 2
Individual Exams: 50%
- Team
Project and Assignments (groups of 2-3): 50%