Once in a while, an idea will strike you with great force, and you say "Why didn't I think of that?" The history of programming the Web is a sequence of innovations in abstraction, each of which might make you utter the aforementioned phrase.
One of the earliest of these abstractions appeared at the end of the last millennium, when Atkins, Ball, Bruns, and Cox1 devised MAWL, the Mother of All Web Languages. MAWL introduced to the Web world the now-common idea of inversion of control, where a sequence of requests from users invoking programs that generate Web pages is instead viewed as a single program generating a sequence of pages to which users respond. My first attempts to come to grips with inversion of control hurt my brain, but within a few years it acquired firm foundations in theory, relating it to well-understood notions of continuations and continuation-passing style, thanks to the efforts of Queinnec7 and the PLT Scheme (now Racket) team of Graunke, Findler, Krishnamurthi, Van Der Hoeven, and Felleisen.4
The following paper presents the next step. Until now, the database in a Web application has been treated as a global variable, accessible to all. Chlipala suggests a better approach: allow each module to declare locally a portion of the database relevant to its needs, and hide that portion from the other modules. He also introduces primitives to support concurrency and transaction, with a more elegant design than found in most other Web languages. Finally, he suggests a novel form of functional reactive programming that incorporates imperative actions. How the latter compares with the more declarative form of functional reactive programming found in languages such as Elm remains to be seen. Chlipala has tried these techniques in practice, and an intriguing list of his early customers may be found in the research version of this paper, which appeared in POPL 2015.
Until now, the database in a Web application has been treated as a global variable, accessible to all. Chlipala suggests a better approach.
Modularizing database access is a simple idea of enormous power, and I expect it will be coming to a Web programming language near you soon. Why didn't I think of that?
1. Atkins, D.L., Ball, T., Bruns, G. and Cox, K. Mawl: A domain-specific language for form-based services. IEEE Trans. Software Engineering 25, 3 (1999), 334346.
2. Cooper, E., Lindley, S., Wadler, P. and Yallop, J. Links: Web programming without tiers. Formal Methods for Components and Objects. Springer, 2007, 266296.
3. Cooper, E., Lindley, S., Wadler, P. and Yallop, J. The essence of form abstraction. In Proceedings of the Asian Symposium on Programming Languages and Systems. Springer, 2008, 205220.
4. Graunke, P., Krishnamurthi, S., Van Der Hoeven, S. and Felleisen, M. Programming the Web with high-level programming languages. In Proceedings of the European Symposium on Programming. Springer, 2001, 122136.
5. McBride, C. and Paterson, R. Applicative programming with effects. J. Functional Programming 18, 1 (2008), 113.
6. Plasmeijer, R. and Achten, P. idata for the World Wide WebProgramming interconnected Web forms. In Proceedings of the International Symposium on Functional and Logic Programming. Springer, 2006, 242258.
7. Queinnec, C. The influence of browsers on evaluators or, continuations to program Web servers. ACM SIGPLAN Notices 35 (2000), 2333.
To view the accompanying paper, visit doi.acm.org/10.1145/2958736
The Digital Library is published by the Association for Computing Machinery. Copyright © 2016 ACM, Inc.
No entries found