LIL: CLOS reaches higher-order, sheds identity, and has a transformative experience
LIL, the Lisp Interface Library, is a data structure library based on Interface-Passing Style. This programming style allows both parametric polymorphism (like ML functors) and ad hoc polymorphism (inheritance and mixins): CLOS generic functions take as first argument a first-class interface object, and plain data structures as other arguments. As compared to
traditional object-oriented programming, interfaces typically lack identity and state, while they manipulate data structures without intrinsic behavior. It becomes as easy to use pure functional persistent data structures without identity or state as to use stateful imperative ephemeral data structures.
Judicious Lisp macros allow developers to avoid boilerplate and to abstract away interface objects to expose classic-looking Lisp APIs. Using only a very simple linear type system to model the side-effects of methods, it is even possible to transform pure interfaces into stateful interfaces or the other way around, or to transform a stateful interface into a traditional object-oriented API. The result is a library that really feels like the right way to specify data structures, and that compares favorably with equivalent libraries in Scala, F#, and other non-blub languages.
This presentation will be an update of a presentation given in October 2012 at ILC'2012.
François-René Rideau is a cybernetician: one who thinks in terms of the dynamics of human and computer systems, what is conserved when change happens, and what varies according to what evolutionary pressures. His first software organization principle is that he who writes the code, he who knows the topic, and he who cares about the results should be the same person — otherwise the software and the people both are badly organized. He worked at
ITA Software where he became the Common Lisp build guy and notably rewrote ASDF
and curated QITAB; he recently joined the build team at Google. But he never forgot his old TUNES project to reinvent computing.