3.10 Laziness
Complete this assignment with Team One.
You must submit this in an archive named "wlazy.zip". This archive must contain a folder named "wlazy". This folder must contain all the files specified below. You must attach "wlazy.zip" to an email whose subject is "BYU - Fall 2011 - CS 330 - wlazy" and whose message body contains the name of everyone on your team (each on a separate line.) You must send this email to jay@cs.byu.edu before 5pm (Provo time) on 10/11. Ensure that what you are satisfied with what you submit, because only your chronologically first submission will be graded. Ensure that you follow these instructions exactly, since submissions that do not meet these requirements (i.e. do not have the correct format) will receive no credit, despite the time and energy you put into the assignment. Please see Turn In Policy for more information.
You must submit this in a file named "wlazy.pdf".
3.10.1 Java
Is Java eager or lazy? Write a Java program to determine the answer to this question. The same program, run under the two different regimes, should produce different results. You may use any Java features you want, but keep your program relatively short; we will penalize you for programs we consider excessively long or obfuscatory. (Tip: It’s possible to solve this problem with a program no more than a few dozen lines long.)
You must turn in both the source code to your program (in printed or written form) as well as an answer to the question of whether Java is eager or lazy, and an explanation of how your program determines this. That is, you should provide a brief and unambiguous answer (e.g., “Java is lazy.”) followed by a description of what result one would obtain under each regime, along with a brief explanation of why that regime would generate that result.
In general, it would be a good idea to discuss your plan of attack with the course staff. This will help you avoid falling into a trap of measuring the wrong entity, and will improve your understanding of eagerness and laziness.
3.10.2 Stricness Points
[id (v) (lookup v env)]
[id (v) (strict (lookup v env))]
Is it possible to write a program that will produce different results under the original interpreter and Doug’s Let the interpreted language feature arithmetic, first-class functions, with, if0, and rec (even though these are not in our in-class lazy interpreter).
If so, hand in an example program and the result under each interpreter, and clearly identify which interpreter will produce each result. Be sure to compare this behavior against that of the lazy interpreter of the sort we’ve written in class.
If it’s not possible, defend why one cannot exist.
3.10.3 State
No lazy language in history has also had state operations (such as mutating the values in boxes, or assigning values to variables). Why not?
The best answer to this question would include two things: a short program (which we assume will evaluate in a lazy regime) that uses state, and a brief explanation of what problem the execution of this program illustrates. Please be sure to use the non-caching (ie, original) notion of laziness. If you present a sufficiently illustrative example (which needn’t be very long!), your explanation can be quite short.
3.10.4 Application
In 850 words or less, describe if and how your knowledge of lazy evaluation will help you in your future programming practice. Good answers might discuss how this concept can be applied in interesting programming environments or how knowledge of its subtleties clarifies or improves existing practices, techniques, tools, etc.