About Links
Links is a functional programming language designed to make web programming easier.
Links eases building interactive web applications with significant client- and server-side components.
A typical, modern web program involves many "tiers": part of the program runs in the web browser, part runs on a web server, and part runs in back-end systems such as a relational database. To create such a program, the programmer must master a myriad of languages: the logic may be written in Java; the presentation in HTML and CSS; the GUI behavior in Javascript; and the queries in SQL. There is no easy way to link these, for example, to be sure that an HTML form or an SQL query produces the type of data that the Java code expects. This problem is called the impedance mismatch problem.
Links eases the impedance mismatch problem by providing a single language for all three tiers. The system generates code for each tier; for instance, translating some code into JavaScript for the browser, some into a bytecode for the server, and some into SQL for the database.
Links incorporates proven ideas from other programming languages: database-query support from Kleisli, web-interaction proposals from Racket, and distributed-computing support from Erlang. On top of this, it adds new web-centric features of its own.
The initial Links development effort was funded by EPSRC grant EP/D046769/1 from 2005-2009. In 2014 development on Links resumed with a focus on adding session types to Links, funded by EPSRC Programme Grant "From Data Types to Session Types: A Basis for Concurrency and Distribution" (EP/K034413/1). Other active areas of research which are driving Links development include work on adding algebraic effects and effect handlers to Links (UKRI Future Leaders Fellowship EHOP, grant number MR/T043830/1) and the Skye project, which builds on Links to support scientific data curation (funded by the European Research Council, grant number 682315).
Publications
- Soundly Handling Linearity. Wenhao Tang, Daniel Hillerström, Sam Lindley, and J. Garrett Morris. POPL 2024 (distinguished paper).
- Language-Integrated Query for Temporal Data. Simon Fowler, Vashti Galpin, and James Cheney. GPCE 2022.
- A Typed Slicing Compilation of the Polymorphic RPC Calculus. Kwanghoon Choi, James Cheney, Sam Lindley, and Bob Reynders. PPDP 2021.
- Comprehending Nulls. James Cheney and Wilmer Ricciotti. DBPL 2021.
- Curating Covid-19 data in Links. Vashti Galpin and James Cheney. IPAW 2021 demo paper.
- Cross-tier web programming for curated databases: a case study. Simon Fowler, Simon Harding, Joanna Sharman, and James Cheney. Pre-proceedings, IDCC 2020.
- Query Lifting: Language-integrated query for heterogeneous nested collections. Wilmer Ricciotti and James Cheney. ESOP 2021.
- Effects for Efficiency: Asymptotic Speedup with First-Class Control. Daniel Hillerström, Sam Lindley, and John Longley. ICFP 2020.
- A Polymorphic RPC Calculus. Kwanghoon Choi, James Cheney, Simon Fowler, and Sam Lindley. Science of Computer Programming 197:102499, October 2020. Preliminary version presented at SBMF 2019.
- Strongly Normalizing Higher-Order Relational Queries. Wilmer Ricciotti and James Cheney. FSCD 2020.
- Model-View-Update-Communicate: Session Types meet the Elm Architecture. Simon Fowler. ECOOP 2020.
- Language-Integrated Updatable Views. Rudi Horn, Simon Fowler and James Cheney. Post-proceedings of IFL 2019.
- FreezeML: Complete and Easy Type Inference for First-Class Polymorphism. Frank Emrich, Sam Lindley, Jan Stolarek, James Cheney, and Jonathan Coates. PLDI 2020.
- Effect handlers via generalised continuations. Daniel Hillerström, Sam Lindley, and Robert Atkey. JFP special issue on effect handlers 2020.
- Language-integrated provenance by trace analysis, Stefan Fehrenbach and James Cheney. DBPL 2019.
- Mixing Set and Bag Semantics. Wilmer Ricciotti and James Cheney. DBPL 2019.
- Exceptional Asynchronous Session Types: Session Types without Tiers. Simon Fowler, Sam Lindley, J. Garrett Morris, and Sára Decova. POPL 2019.
- Shallow Effect Handlers. Daniel Hillerström and Sam Lindley. APLAS 2018.
- Incremental Relational Lenses. Rudi Horn, Roly Perera, and James Cheney. ICFP 2018.
- Language-integrated provenance. Stefan Fehrenbach and James Cheney. Science of Computer Programming 155: 103-145 (2018).
- Continuation Passing Style for Effect Handlers. Daniel Hillerström, Sam Lindley, Robert Atkey, and KC Sivaramakrishnan. FSCD 2017.
- Lightweight functional session types. Sam Lindley and J. Garrett Morris. In Behavioural Types: from Theory to Tools, River Publishers, 2017.
- Language-integrated provenance. Stefan Fehrenbach and James Cheney. PPDP 2016.
- Compiling Links Effect Handlers to the OCaml Backend. Daniel Hillerström, Sam Lindley, and KC Sivaramakrishnan. ML Workshop 2016.
- Liberating Effects with Rows and Handlers. Daniel Hillerström and Sam Lindley. In the proceedings of TyDe 2016.
- Effective quotation. James Cheney, Sam Lindley, Gabriel Radanne, and Philip Wadler. In the proceedings of PEPM 2014.
- Query shredding: efficient relational evaluation of queries over nested multisets. James Cheney, Sam Lindley, and Philip Wadler. In the proceedings of SIGMOD 2014.
- Row-based effect types for database integration. Sam Lindley and James Cheney. In the proceedings of TLDI 2012.
- DBWiki: a database wiki prototyped in Links. James Cheney, Sam Lindley, and Heiko Müller. In the proceedings of DBPL 2011.
- The Script-Writer's Dream: How to Write Great SQL in Your Own Language, and Be Sure It Will Succeed. Ezra Cooper. In the proceedings of DBPL 2009
- The RPC calculus. Ezra Cooper, Philip Wadler. In the proceedings of PPDP 2009
- The essence of form abstraction. Ezra Cooper, Sam Lindley, Philip Wadler, and Jeremy Yallop. In the proceedings of APLAS 2008.
- Links: web programming without tiers. Ezra Cooper, Sam Lindley, Philip Wadler, and Jeremy Yallop. In the proceedings of FMCO 2006, LNCS 4709.
Grants
- EHOP, UKRI Future Leaders Fellowship grant number MR/T043830/1.
- Skye, ERC Consolidator Grant (2016-2021).
- A Basis for Concurrency and Distribution, EPSRC Programme Grant (2013-2020).
- Google Research Awards Database Wikis (2011), Synchronized Database Wikis (2012), and Language-Integrated Provenance (2014-15).
- Original grant proposal for EPSRC (2005).
- Letter of support from LShift.
- Letter of support from Run Deep.
Core team
- James Cheney.
- Frank Emrich.
- Simon Fowler.
- Vashti Galpin.
- Daniel Hillerström.
- Sam Lindley.
- Wilmer Ricciotti.
- Wenhao Tang.
- Philip Wadler.
Alumni
- Ezra Cooper.
- Gilles Dubochet.
- Stefan Fehrenbach.
- Rudi Horn.
- Garrett Morris.
- Jan Stolarek.
- Jeremy Yallop.
Visitors
- Shriram Krishnamurthi, Nov 2006.
- Rodney Topor, Sep–Dec 2005. Rodney taught us about transactions.
Undergraduate projects
- Trylinks 2023, Mantas Maciulis (2024)
- Developing concurrent web applications with effect handlers in Links. Steven Chang (2023).
- A video-calling API for Links. Weston Everett (2023).
- A multi-view video conferencing system in Links. Caitlin McDougall (2023).
- Scaling a dynamic video calling application. Lewis Raeburn (2023).
- Fast Regular Matching without Tiers. Robertas Norkus (2023).
- A dynamic video conferencing app in Links. Weston Everett (2022).
- A spatial metaphor for dynamic video calling in Links. Lewis Raeburn (2022).
- TryLinks: an interactive online platform to learn the Links programming language. Nick Wu (2018).
- Building Bobcat - a web content management system in Links. Simon Vansintjan (2010).
- Web Menace: Links demonstration of a classic learning machine. Samuel Corbett (2009).
- Compiling Links server-side code. Steven Holmes (2009).
- LODE: an online IDE for Links in Links. Carl Andersson (2008).
- Online Scrabble in Links. Ashvin Jayaram (2008).
- Building web 2.0 applications in Links: Speed dependent automatic zooming for web applications. Sjoerd van Roosmalen (2008).
- Creating linksCollab: an assessment of Links as a web development language. Steve Strugnell (2008).
MSc Projects
- Compiling Links to WebAssembly. Aaron Song (2021).
- Uselets: UIs using Actors as an Abstraction for Composable Communicating Components. Thomas Weber (LMU/University of Augsburg/TU Munich, 2018).
- Compilation of Effect Handlers and their Applications in Concurrency. Daniel Hillerström (2016).
- Handlers for Algebraic Effects in Links. Daniel Hillerström (2015).
- Functional reactive animation in SVG for the web via Links. Chi-Feng Chou (2011).
- Implementing the Java Pet Store in Links: An assessment of Links as an effective platform for building web applications . Gabriel Tellez (2008).
- Building biological database applications using Links. Ravi Shankar Dangeti (2008).
- The SLinks language. Gilles Dubochet (2005).
Interns
- Yi Zhou, June–July 2022. Yi implemented several benchmark programs for Links, extended the command-line interface of Links, and tweaked the internal handling of file paths.
- Robin Jourde, May–July 2022. Robin extended Links with effect aliases, first-class operation polymorphism, and fresh operation label generation.
- Dee Yeum, July–August 2021. Dee worked on headless testing of client-side Links applications.
- Samo Novak, June–August 2021. Samo implemented a round-trip type pretty printer, whose outputs can be successfully parsed by the Links parser.
- Yueyang Tang, May–August 2020. Yueyang worked on improvements to Links, including dramatically speeding up serialization of large query expressions and supporting function definitions by case analysis
- Jonathan Coates, June–July 2019. Jonathan worked on the Links codebase. He implemented support for first-class polymorphism, syntactic sugar for effects, and fixed numerous bugs.
- Tom Davey, June–July 2019. Tom adapted TryLinks for use with Jupyter Notebook.
- Arek Mikolajczak, June–August 2018. Arek worked on TryLinks.
- Nicole Meng, June–July 2018. Nicole worked on implementing the essence of React in Links using effect handlers.
- Thomas Weber, May–October 2017. Thomas worked on uselets, a new abstraction for UI programming in Links, and made several contributions including a cleanup of the JavaScript runtime code, a redesign of this home page, and the Links logo. He also developed the Uselets library and examples.
- Jake Browning, Summer 2017. Jake implemented a reactive programming library for Links inspired by Elm.
- Sára Decova, Summer 2017. Sára implemented a collection of Links applications making use of session types in the presence of distribution and failure.
- Victor Dumitrescu, Summer 2015. Victor worked on applications of session types in Links.
- Austėja Elvina Brasiūnaitė, Summer 2014. Elvina helped us to develop session types in Links by building and testing lots of examples.
- Dariusz Jędrzejczak, Summer 2014. Dariusz significantly speeded up JavaScript compilation in Links and built and evaluated the performance of a number of games written in Links.
- Gabriel Radanne, Summer 2012. Gabriel extended the Links to OCaml compiler developed by Steven Holmes to handle database queries.
- Thierry Martinez, Mar–Aug 2006. Thierry experimented with approaches to statically typing XML in Links.
Security
Talks
- Talk slides (Melbourne, 2 Feb 2006)
- Talk slides (PADL, 9 Jan 2006)
- Links meeting at ETAPS (Edinburgh, 6 Apr 2005)
- Talk slides (Cambridge, 9 Feb 2005)