cs173: Essay 3

On the very first day of this course, we discussed that the central tension in programming language design is a modern manifestation of an ancient predicament: the trade-off between safety and liberty.

Since then, we have studied three main topics: control, types and execution environments. In each, we studied a few different building blocks, culminating in continuations (for control), polymorphic type inference (for types) and hybrid generational garbage collection (for execution environments). Each of these is a source of great power. We saw how continuations make it possible to concisely build very sophisticated and reusable control abstractions, how modern garbage collectors lift the programmer's burden of dealing with complex memory usage, and how polymorphic type inference provides expressive power and reuse while liberating the programmer from the drudgery of declaring types manually.

If safety and liberty conflict with each another, then a programmer who uses these liberating features must have lost some safety in return. Pick one of the three highlighted features and explain the loss of safety its use engenders. Limit your response to one page (final submission document length; first draft can be double-spaced), though a particularly cogent argument may not need an entire page. Your response can be as technical and detailed as necessary; the more (accurately) technical your writing, the better it will convince us you really understand the trade-off you are writing about. An example (in proper or pseudo-code) would be especially illustrative, but you do not need one before submitting your draft to the Writing Fellows — you may use the entire three weeks to come up with a good example. If you wish to change the feature you write about after submitting your first draft, you must first get the professor's permission.