CSCE 4430-5450:
Programming Languages - Spring 2013
Instructor: Paul Tarau, Associate Professor - see
my home page for contact
info and office hours.
Teaching Assistant. Fahmida Hamid. See her course page for
contact info and office hours.
First
exam: March 18, 12:30pm – open net – 3 out of 5 problems
Final
exam: Wednesday May 8 10:30am–12:30pm. For 3
additional points please post on Moodle proof of completed SETE evaluations and
exit surveys at
http://www.cse.unt.edu/exitSurvey.cgi?CSCE+4430+001+12N
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
- Evolution of Programming
Languages L1
- Programming Paradigms:
logic, functional, object oriented, imperative L1
- Language Specification:
Syntax and Semantics L1
- Language Processors:
Interpreters and Compilers L2
- Models of Computation,
Computability, Turing
Equivalence L2
- Functional Programming
Languages (Haskell+Scala)
- Lambda Calculus and
Recursion Theory L3
- Higher Order Functions L4
- Working with Fold, Map,
Zip L4
- Working with Pattern
Matching L4
- Lazy Evaluation, Computing
with Infinite Lists L5
- Polymorphism, Type
inference, Type Classes L5
- Scala as a functional language
L6
- Logic Programming Languages
(Prolog)
- Unification and Horn
Clause Resolution in Prolog L7
- Non-determinism and
Backtracking with application to Problem Solving L7
- Practical Prolog: IO, File
Operations L7
- Definite Clause Grammars
L8
- Parsing and Generation L8
- Meta-Interpreters,
Universal Machines L8
- Object Oriented Programming
(Scala+Java)
- Quick Introduction to Scala and Eclipse (our main tools) L9
- Types: Static vs. Dynamic
Type Checking L9
- Classes, Instances,
Objects, Case Classes L9
- Collections, Iterators and
IO operations L10
- Reflection and
Serialization 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
- Event driven programming,
Multi-threading. Actors and Futures L13
- Distributed Programming,
Message Passing, Coordination L14
- Web Service Architectures
and Interactivity (Dart)
L14
- Future trends in
Programming Language Design L15
Prerequisites:
mandatory (Data Structures)
Recommended books and online
materials:
Evaluation:
- 2 Individual Exams: 50%
- Team Project and
Assignments (groups of 2-3): 50%
More software,
tutorials and related links:
Outcomes:
1.
Understand key concepts of programming languages, with emphasis on programming
paradigms and language processors.
2. Have
a practical understanding of commonalities and differences between major
programming paradigms.
3.
Understand the key object oriented, logic and functional programming concepts.
4.
Understand the key concepts of event driven and concurrent programming.
5. Understand
the use and implementation of modern programming language concepts like
recursion, inheritance, reflection, unification, backtracking, type inference,
infinite data objects, and threads.
6. Have
some familiarity with domain-specific languages with emphasis on Internet
programming languages.