CSCI 330 Programming languages Spring 2020: lecture and lab topics
Note that labs start the week of Jan. 13-17

Week Tue. Lecture Tue/Wed Labs Thu. Lecture
Week 1:
Jan 6-10
Course intro, overview, administrivia
Intro to functional programming,
Lisp: functions/calls, variables, expressions, types, t/nil, i/o, if, cond
No lab Lisp: defun, lists, type checking
Week 2:
Jan 13-17
Cancelled: VIU snow closure
Week 3:
Jan 20-24
recursion on lists, sequences, arrays, vectors Lab 1: lisp basics let blocks, recursion and tail recursion, lisp implementations/side effects
Week 4:
Jan 27-31
Lisp: hashes, structures, scope, parameter tokens: &rest, &key, &optional, "special" variables (dynamic scope) Lab 2: tail recursion Lisp: higher order functions, map, eval, apply, funcall
Week 5:
Feb 3- 7
Lisp: lambda, closures, labels, internal structure of functions Lab 3: Lisp higher order functions loops, packages, pure functional programming vs lisp, efficiency
Week 6:
Feb 10-14
midterm preparation, intro to let over lambda Lab 4: closures, lambda functions Midterm
Week 7:
Feb 17-21
Lisp: let over lambda example, macros Lab 5: let over lambda (with labels) Formal language description syntax and semantics: regular expressions, context free grammars
Study break: Feb 24-28
Week 8:
Mar. 2- 6
augmented context free grammars, lex/yacc, intro to course projects Lab 6: scope and lifetime in C lex/yacc examples, project discussion
Week 9:
Mar 9-13
Lexical components of languages, static/dynamic binding, data entity names, addresses, types, scopes, lifetime, and binding Lab 7: relationship between C and assembly instructions Primitive data types and operators, type compatibility, casting and conversion
Week 10:
Mar 16-20
Composite data types and operators, C unions Lab 8: operations, precedence, side effects in C Expressions, precedence, associativity
Week 11:
Mar 23-27
Code statements, blocks, scope, branching and labels Lab 9: Macros/templating covered in lab session: variadic functions in C and C++ Iteration, selection, subroutines, call/return, parameters, scope.
Week 12:
Mar 30-A3
Subroutine overloading, nesting, implementation details (memory organization, access, function pointers) Lab 10: implementing higher order functions in C++ (templated function pointers) Pointers, operations, issues, memory allocation and organization, garbage collection, smart pointers
Week 13:
Apr 6-10
OO: fields and methods, scopes, access control OO: inheritance, dynamic binding, memory organization, implementation issues Final review/wrapup