Homework Assignment 10 CS 340d Unique Number: 50960 Spring, 2019 Given: April 22, 2019 Due: May 8, 2019 NOTE: This homework assignment counts as three homework grades! This homework has two parts: write a self-replicating program and write a summary of your experience in our course. Thus, you will submit a program that, when compiled and executed, prints an exact copy of the source code of the program that you compiled and executed. The second part of this homework assignment concerns writing a five-or-more page summary of the work you have done and what you have learned in this course. To provide you with an outline of what needs to be done to write a self-replicating program, we ask that you take up the challenge proposed by Ken Thompson in his CACM article (August 1984, Volume 27, Number 8) "Reflections on Trusting Trust". A reference to this article may be found in our top-level class webpage. We expect you to write your own self-replicating program in either C or Lisp. We note that this portion of your homework will be valued at 50%. Remember, documentation is an important part of the code you submit -- so we will be grading your submission for the correctness and will also be grading the associated (C-language-style or Lisp-language-style) documentation. For the second half of this homework (worth 50% of the homework grade), you are to write a paper with the following outline: 1. What did you learn in this course (1 page)? 2. What should be included in this course and what should be eliminated (1 page)? What would improve this course? 3. Describe the algorithmic complexity of the Baker GC code. Is the execution time of the GC code related to only the size of the memory being collected? If so, defend your position. If not, explain why not (1 page). 4. If possible, explain how you might improve the execution performance of the GC code. Also, explain how you could improve the GC code so that it was easier to understand and maintain (1 page). 5. What invariants would you add to the GC code to make sure that it functions correctly? Describe your invariants (1 page). For the second half of this homework assignment, you must submit the answers to the questions above as a single file containing only ASCII characters. You may think of a page as 60 lines of ASCII text with a nominal width of 72 characters. Do not submit a PDF or Word documents; we will not grade them. Make sure that you submit ASCII only -- we will test your submissions for ASCII compliance before we grade your submission. Thus, for Homework 10, you will make two submissions. 1. The code and associated comments for your self-replicating program -- all in C-language or LISP-language code. 2. A single report file that addresses the five questions above which contains only ASCII characters. Instructions for submitting your assignment will appear on Piazza.