Sample solutions are available for assignment 1, assign2, assign3, and assign4 |
Bonus assignment
I have added a bonus assignment for the course, which can be used in place of any of the other five assignments. The bonus assignment is due just after the study break (5pm Tuesday March 6th). The assignment involves adding a number of new features to our implementation of the IttyBitty language, with all the resulting changes to the tokenizer, checker, parser, and translator. Details are in the readme in the git repository, which has now been posted. |
The course labs will be used to conduct practical/applied experiments and exercises in metaprogramming with a variety of languages. These exercises are intended to assist you in the understanding and complete the five assignments (discussed below).
There are five assignments, each worth 6% of your total grade.
Assignments will be distributed and collected via the standard csci git processes, details are provided in the labs themselves. No other form of assignment submission will be accepted for grading.
Assignments are to be completed as strictly individual efforts: collaborative work is not permitted.
Late Penalties:
Week | Wed. Lecture | Fri. Lecture | Labs |
Week 1: Jan 10-12 |
Course introduction, overview | Assemblers, program meta data | No lab |
Week 2: Jan 17-19 |
Compilers and interpretters | Generative programming in Ruby (I) | Lab 1: intro to generative programming in Ruby
Assignment 1: due Jan. 30th @5pm |
Week 3: Jan 24-26 |
Tokenizing and parsing techniques and examples in ruby | ||
Week 4: Jan 31-F2 |
Code translation techniques and examples in ruby, lex, and yacc | Preprocessors and C macros | Lab 2: the C preprocessor
Assignment 2: due Feb 13th @5pm |
Week 5: Feb 7- 9 |
Templates and use in metaprogramming (C++) | ||
Week 6: Feb 14-16 |
Generative programming in Ruby: writing a ruby preprocessor | Lab 3: templates in C++
Assignment 3: due Mar 6th @5pm |
|
Week 7: Feb 21-23 |
Midterm | Closure, reflection, self-aware programs | |
Study break: Feb 24-Mar 4 | |||
Week 8: Mar. 7- 9 |
Higher order functions (in lisp) | Closures (in lisp) | Lab 4: closures in lisp,
Macros in lisp, Self modifying code in lisp |
Week 9: Mar 14-16 |
Macros in lisp cont. | Self-modifying code | |
Week 10: Mar 21-23 |
Self modifying code in lisp and Ruby | ||
Week 11: Mar 28-30 |
Self modifying Ruby | University closed (Easter Friday) | |
Week 12: Apr 4- 6 |
Course wrap-up/review | Project presentations | Lab 5: adv. metaprogramming in ruby
Assignment 5: due Apr 16th @5pm |
Week 13: Apr 11-13 |
Project presentations |