2.9 Paper
On this page:
2.9.1 Depth
2.9.2 Breadth

2.9 Paper

Consult the paper policy for details of the turn-in and preparation process.
Choose one of the following two options.

2.9.1 Depth

Choose one facet of programming language design, such as type systems, security, memory management, modularity, safety, expressiveness, alternative semantics (like constraint solving) etc. Introduce and define the facet (at least one page). Discuss its development in the field of programming languages by punctuating the history with particular examples of innovations and deployments. (Each such section should probably be at least a page, maybe more.) End with a brief summarization (roughly a page) of open issues and ideas that you have for developing it (this last part is the only place where your opinion can enter in.)

2.9.2 Breadth

Choose one programming language. (I suggest selecting a research or otherwise experimental language. A good place to start looking is Wikipedia.) Briefly introduce it and the historical circumstances of its development (less than a page.) Select a number of unique or interesting aspects of it (such as those listed above as "depth" topics) and discuss how it approaches them. The most important part of discussing the approach is walking through the consequences of the design in the lives of programmers and their software. (Each one should be at least a page and perhaps more.) End with a brief personal perpsective on what you think its influence has been or should be on the world of programming languages (roughly a page.)