Practice questions for quiz 5 are available. Solutions to the practice questions are also available.
Programming assignment 8 is available.
This course introduces the student to characteristics of various kinds of programming languages. See the syllabus.
M-Th 9:40-10:40. I will stay later if there is demand.
All students will receive accounts on the Unix systems in Austin 320. If you have a prior account, it has not been modified. If you were on my class role and you did not have a prior account, then your account is your first initial followed by your middle initial followed by up to six letters of your last name. Your password is your three initials (first, middle, last) followed by the last five digits of your social security number. If you have no middle initial, an x is used.
A brief tutorial on unix is available.
[6/27/02] We began looking at general goals of programming languages. This is from chapter 1 of the text.
[6/28/02] We looked at compilers and interpreters and other issues on language implementation. Then we turned to syntax and BNF, which is a formal method of describing the syntax of a language. See chapter 3 for material on syntax.
[7/1/02] We finished covering syntax by discussing ambiguity, and precedence and associativity of binary operators. Then we discussed general issues on semantics, and discussed classifications of languages, including imperative languages and declarative languages. Material on semantics is in chapter 4 of the text. We began looking at data and data representation, from chapter 5 of the text.
[7/2/02] We continued with data and data representation, looking at lists and trees. Complex values typically can be represented in many different ways, and different approaches have advantages for performing different kinds of operations. We discussed memory management (chapter 6), and turned to names and mechanisms for binding names, including elementary pattern matching.
[7/3/02] Quiz 1. We continued on chapter 8 and discussed material on imperative programming from chapter 10. We will come back to imperative programming later.
[7/5/02] We began looking at functional programming. See chapter 13 of the text.
[7/8/02] We continued looking at functional programming, and started on higher order functional programming (chapter 14). We went through the map function.
[7/9/02] We continued on higher order functions, and then began to look at evaluation strategies and lazy evaluation.
[7/10/02] We looked at a few more examples, and then explored uses of lazy evaluation, and how to create lazy functions. This is in chapter 15.
[7/11/02] Quiz 2. We talked about evaluation tactics and managing the run-time stack. See chapter 16.
[7/12/02] We discussed aspects of the programming language Scheme.
[7/15/02] We discussed semantics of programming languages, including aspects of denotational semantics and the semantics of imperative languages.
[7/16/02] We continued looking at lambda-calculus. Then we began looking at types and type checking. General issues on types are covered in chapter 19.
[7/17/02] Quiz 3. We continued looking at types, including type equivalence, constructors and unconstructors.
[7/18/02] We talked about polymorphism, including type variables and how type inference can be done using type variables. See chapter 20.
[7/19/02] We discussed object-based programming and the beginnings of object-oriented programming. We covered the high points of chapters 22, 23 and 24.
[7/22/02] We continued discussing object-oriented programming.
[7/23/02] We discussed classes as objects and discussed Java.
[7/24/02] Quiz 5. We discussed inner classes in Java. Then we began looking at handling failure, by discussing exception handling.
[7/25/02] We discussed backtracking, another way of handling failure.
[7/26/02] We began looking at logic programming, by introducing the main concepts of first order logic that are needed for logic programming.
[7/29/02] We continued to look at logic programming by looking at examples of programs and proofs (computations).