Tierless web programming in ML

Eliom is a dialect of OCaml for Web programming in which server and client pieces of code can be mixed in the same file using syntactic annotations. This allows to build a whole application as a single distributed program, in which it is possible to define in a composable way reusable widgets with both server and client behaviors. Eliom is type-safe, as it ensures that communications are well-behaved through novel language constructs that match the specificity of Web programming. Eliom is also efficient, it provides static slicing which separates client and server parts at compile time and avoids back-and-forth communications between the client and the server. Finally, Eliom supports modularity and encapsulation thanks to an extension of the OCaml module system featuring tierless annotations that specify whether some definitions should be on the server, on the client, or both. This thesis presents the design, the formalization and the implementation of the Eliom language.

[1]  Jérôme Vouillon,et al.  Eliom: tierless Web programming from the ground up , 2016, IFL 2016.

[2]  Andrej Bauer,et al.  Programming with algebraic effects and handlers , 2012, J. Log. Algebraic Methods Program..

[3]  Jérôme Vouillon,et al.  From bytecode to JavaScript: the Js_of_ocaml compiler , 2014, Softw. Pract. Exp..

[4]  Scott Owens,et al.  A Sound Semantics for OCamllight , 2008, ESOP.

[5]  Simon L. Peyton Jones,et al.  Backpack: retrofitting Haskell with interfaces , 2014, POPL.

[6]  Karl Crary,et al.  Modules, abstraction, and parametric polymorphism , 2017, POPL.

[7]  Xavier Leroy,et al.  A syntactic theory of type generativity and sharing , 1996, Journal of Functional Programming.

[8]  Manuel Serrano,et al.  A glimpse of Hopjs , 2016, ICFP.

[9]  Oleg Kiselyov Generating Code with Polymorphic let: A Ballad of Value Restriction, Copying and Sharing , 2015, ML Family/OCaml.

[10]  Tarmo Uustalu,et al.  Trace-Based Coinductive Operational Semantics for While , 2009, TPHOLs.

[11]  V. Balat Rethinking Traditional Web Interaction , 2013 .

[12]  Simon L. Peyton Jones,et al.  Scrap your boilerplate: a practical design pattern for generic programming , 2003, TLDI '03.

[13]  Alan Bawden,et al.  Quasiquotation in Lisp , 1999, PEPM.

[14]  Karl Crary,et al.  A separate compilation extension to standard ML , 2006, ML '06.

[15]  Jacques Garrigue A Certified Interpreter for ML with Structural Polymorphism , 2009 .

[16]  Emmanuel Chailloux,et al.  Typing unmarshalling without marshalling types , 2012, ICFP '12.

[17]  Christian Queinnec,et al.  A multi-tier semantics for Hop , 2010, High. Order Symb. Comput..

[18]  James Cheney,et al.  Effective quotation: relating approaches to language-integrated query , 2013, PEPM '14.

[19]  Karl Crary,et al.  Towards a mechanized metatheory of standard ML , 2007, POPL '07.

[20]  David B. MacQueen Modules for standard ML , 1984, LFP '84.

[21]  John Hughes,et al.  Why Functional Programming Matters , 1989, Comput. J..

[22]  Joeri De Koster,et al.  Dependence-driven delimited CPS transformation for JavaScript , 2016, GPCE.

[23]  Xavier Leroy,et al.  Applicative functors and fully transparent higher-order modules , 1995, POPL '95.

[24]  Robin Milner,et al.  A Theory of Type Polymorphism in Programming , 1978, J. Comput. Syst. Sci..

[25]  Viktor Vafeiadis,et al.  Acute: high-level programming language design for distributed computation , 2005, ICFP '05.

[26]  Coen De Roover,et al.  Towards Tierless Web Development without Tierless Languages , 2014, Onward!.

[27]  Arthur Charguéraud,et al.  Engineering formal metatheory , 2008, POPL '08.

[28]  Jérôme Vouillon,et al.  Lwt: a cooperative thread library , 2008, ML '08.

[29]  Ramana Kumar,et al.  Functional Big-Step Semantics , 2016, ESOP.

[30]  Matthias Felleisen,et al.  A Syntactic Approach to Type Soundness , 1994, Inf. Comput..

[31]  Nada Amin,et al.  Type soundness proofs with definitional interpreters , 2017, POPL.

[32]  Robin Milner,et al.  Definition of standard ML , 1990 .

[33]  Adam Chlipala,et al.  An optimizing compiler for a purely functional web-application language , 2015, ICFP.

[34]  Manuel Serrano,et al.  Hop Client-Side Compilation , 2007, Trends in Functional Programming.

[35]  Christian Queinnec,et al.  The influence of browsers on evaluators or, continuations to program web servers , 2000, ICFP '00.

[36]  Jérôme Vouillon,et al.  Experience report: ocsigen, a web programming framework , 2009, ICFP.

[37]  Jérôme Vouillon,et al.  Eliom: A Core ML Language for Tierless Web Programming , 2016, APLAS.

[38]  James Cheney,et al.  Row-based effect types for database integration , 2012, TLDI '12.

[39]  Adam Chlipala,et al.  Ur/Web , 2015, Commun. ACM.

[40]  Manuel Serrano,et al.  Reasoning about Web Applications: An Operational Semantics for HOP , 2012, TOPL.

[41]  Philip Wadler,et al.  Links: Web Programming Without Tiers , 2006, FMCO.

[42]  Karl Crary,et al.  Understanding and evolving the ml module system , 2005 .

[43]  Anton Ekblad,et al.  A meta-EDSL for distributed web applications , 2017, Haskell.

[44]  Erick Gallesio,et al.  Hop: a language for programming the web 2.0 , 2006, OOPSLA Companion.

[45]  Christian Queinnec Inverting back the inversion of control or, continuations versus page-centric programming , 2003, SIGP.

[46]  Michel Mauny,et al.  Generic Programming in OCaml , 2016, ML/OCAML.

[47]  Oleg Kiselyov The Design and Implementation of BER MetaOCaml - System Description , 2014, FLOPS.

[48]  Peter Thiemann Programming Languages and Systems , 2016 .

[49]  Damien Doligez,et al.  The OCaml system release 4.07: Documentation and user's manual , 2013 .

[50]  Umut A. Acar,et al.  Automatically Splitting a Two-Stage Lambda Calculus , 2016, ESOP.

[51]  Vincent Balat Rethinking Traditional Web Interaction: Theory and Implementation , 2014 .

[52]  Karl Crary,et al.  Type-Safe Distributed Programming with ML5 , 2007, TGC.

[53]  Jeremy Yallop,et al.  Modular implicits , 2014, ML/OCaml.

[54]  Christian Queinnec,et al.  Continuations and Web Servers , 2004, High. Order Symb. Comput..

[55]  Yannis Smaragdakis,et al.  Stream fusion, to completeness , 2017, POPL.

[56]  Simon L. Peyton Jones,et al.  Template meta-programming for Haskell , 2002, Haskell '02.

[57]  Walid Taha,et al.  Multi-Stage Programming: Its Theory and Applications , 1999 .

[58]  Anton Ekblad A seamless, client-centric programming model for type safe web applications , 2016 .

[59]  M. Tofte Operational Semantics and Polymorphic Type Inference , 1988 .

[60]  Jérôme Vouillon,et al.  Macaque : Interrogation sûre et flexible de base de données depuis OCaml , 2010 .

[61]  John McCarthy,et al.  Recursive functions of symbolic expressions and their computation by machine, Part I , 1960, Commun. ACM.