Ur/Web

The World Wide Web has evolved gradually from a document delivery platform to an architecture for distributed programming. This largely unplanned evolution is apparent in the set of interconnected languages and protocols that any Web application must manage. This paper presents Ur/Web, a domain-specific, statically typed functional programming language with a much simpler model for programming modern Web applications. Ur/Web's model is unified, where programs in a single programming language are compiled to other "Web standards" languages as needed; supports novel kinds of encapsulation of Web-specific state; and exposes simple concurrency, where programmers can reason about distributed, multithreaded applications via a mix of transactions and cooperative preemption. We give a tutorial introduction to the main features of Ur/Web and discuss the language implementation and the production Web applications that use it.

[1]  Dan R. K. Ports,et al.  Serializable Snapshot Isolation in PostgreSQL , 2012, Proc. VLDB Endow..

[2]  Manuel Serrano,et al.  Hop and HipHop: Multitier Web Orchestration , 2013, ICDCIT.

[3]  Sebastian Burckhardt,et al.  It's alive! continuous feedback in UI programming , 2013, PLDI.

[4]  Aske Simon Christensen,et al.  Extending Java for high-level Web service construction , 2002, TOPL.

[5]  Philip Wadler,et al.  The RPC calculus , 2009, PPDP '09.

[6]  Jay A. McCarthy,et al.  Automatically RESTful web applications: marking modular serializable continuations , 2009, ICFP.

[7]  Juan-Carlos Cano,et al.  HOP: achieving efficient anonymity in MANETs by combining HIP, OLSR, and pseudonyms , 2006, OOPSLA 2006.

[8]  Stéphane Ducasse,et al.  Seaside — a Multiple Control Flow Web Application Framework , 2004 .

[9]  Vincent Balat,et al.  Ocsigen: typing web interaction with objective Caml , 2006, ML '06.

[10]  Adam Chlipala,et al.  Ur/Web , 2015, Communications of the ACM.

[11]  Benjamin C. Pierce,et al.  Regular expression types for XML , 2000, TOPL.

[12]  David A. Wagner,et al.  Fine-grained privilege separation for web applications , 2010, WWW '10.

[13]  Nikolai Tillmann,et al.  TouchDevelop: programming cloud-connected mobile devices via touchscreen , 2011, Onward! 2011.

[14]  Stephen Chong,et al.  Asynchronous functional reactive programming for GUIs , 2013, PLDI.

[15]  Philip Wadler,et al.  How to make ad-hoc polymorphism less ad hoc , 1989, POPL '89.

[16]  Alain Frisch,et al.  OCaml + XDuce , 2006, ICFP '06.

[17]  Shriram Krishnamurthi,et al.  Interaction-Safe State for the Web , 2006 .

[18]  Henry M. Levy,et al.  Capability-Based Computer Systems , 1984 .

[19]  James Cheney,et al.  Edinburgh Research Explorer A Practical Theory of Language-integrated Query , 2022 .

[20]  Adam Chlipala,et al.  Ur: statically-typed metaprogramming with type-level record computation , 2010, PLDI '10.

[21]  Manuel Serrano,et al.  Hop, a Fast Server for the Diffuse Web , 2009, COORDINATION.

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

[23]  Nir Shavit,et al.  Software transactional memory , 1995, PODC '95.

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

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

[26]  Matthias Felleisen,et al.  Implementation and use of the PLT scheme Web server , 2007, High. Order Symb. Comput..

[27]  Jim Gray,et al.  The Transaction Concept: Virtues and Limitations (Invited Paper) , 1981, VLDB.

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

[29]  Ankur Taly,et al.  Object Capabilities and Isolation of Untrusted Web Applications , 2010, 2010 IEEE Symposium on Security and Privacy.

[30]  Philip Wadler,et al.  The Essence of Form Abstraction , 2008, APLAS.

[31]  Adam Chlipala,et al.  Static Checking of Dynamically-Varying Security Policies in Database-Backed Applications , 2010, OSDI.

[32]  John H. Reppy,et al.  Concurrent programming in ML , 1999 .

[33]  Michael Benedikt,et al.  Experience with a Domain Specific Language for Form-based Services , 1997, DSL.

[34]  Brian Beckman,et al.  LINQ: reconciling object, relations and XML in the .NET framework , 2006, SIGMOD Conference.

[35]  Shriram Krishnamurthi,et al.  Flapjax: a programming language for Ajax applications , 2009, OOPSLA '09.

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

[37]  Uday S. Reddy,et al.  Imperative functional programming , 1996, CSUR.

[38]  Simon L. Peyton Jones,et al.  Composable memory transactions , 2005, CACM.

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