Thursday, 8 April 2010, 16:00 (note the unusual time)
Cybernetica Bldg (Akadeemia tee 21), room C231 (note the unusual room)
Slides from the talk [pdf]
Abstract: The ML module system is well-known for its support of modular development. Traditionally ML modules are initialized in call-by-value, i.e., all modules are initialized at once at start-up time. Motivated by experiences in practice, I propose introducing lazy initialization to ML-style modules supporting recursion. The intriguing question here is then how much laziness is desirable. I want to find, ideally, a happy compromise between call-by-value and call-by-need, so that we can support useful recursive initialization patterns for modules while keeping initialization order somewhat manageable.
I have developed a model and proof techniques to investigate the design space of hybrid module initialization strategies between call-by-value and call-by-need. Five strategies are examined, inspired by existing languages. Each strategy has its own merit and demerit with respect to expressivity and predictability.
In this talk, I will explain why laziness is potentially useful in practice and present the model, which is a variation of Ariola and Felleisen's cyclic call-by-need calculus extended with state in the style of Hieb and Felleisen.