Rapid Development of Web Applications with Typed Metaprogramming in Ur/Web
Are static types a penance that programmers do to achieve over-the-top levels of assurance that their programs are correct? Can the rockstars of agile full-stack Web application development afford to stop hacking away long enough to throw in some types, or would their competition just eat their breakfasts?
I will demonstrate how, in the Ur/Web programming language, static types enable new levels of code reuse and automatic code generation. We know that programmers can often save substantial effort by using metaprogramming tools that crawl the syntax of programs and output new programs. Ur/Web enables similar benefits based on ideas from dependent type systems, replacing explicit syntax-tree analysis by reduction of terms with rich polymorphic types. As a bonus, the compiler delivers lean and lightning-fast native code and guarantees invulnerability to the most common security problems of the Web.
I’ll start with a few examples of programming in Ur/Web with extensible record types, which are the key feature for polymorphism over database schemas and similar bedrock elements of today’s Web apps. We’ll develop a few increasingly fancy metaprograms that build applications specialized to database schemas. I’ll wrap up by demoing the Ur/Web People Organizer, a full-fledged framework for rapid application assembly by instantiating schema-polymorphic components, in use for a few production applications with a few hundred users between them.