Links
OCaml JavaScript Standard ML Emacs Lisp Shell Python Other
Clone or download
Corneliusbusch and dhil Adding my demo projects to the example folder (#378)
Examples produced during Nicole's LFCS internship
Latest commit 252ec7f Aug 10, 2018
Permalink
Failed to load latest commit information.
benchmarks A wee bit of tidying up. Sep 20, 2017
bin Migrates from jbuilder to dune. (#367) Jul 12, 2018
core Missing page module (#381) Aug 3, 2018
database Migrates from jbuilder to dune. (#367) Jul 12, 2018
doc Extend XML support; Clean up JS (#248) Sep 20, 2017
documentation Fixed numbers in 2048 being off center. Added some files to the docum… Sep 12, 2014
examples Adding my demo projects to the example folder (#378) Aug 10, 2018
lib Fixes buggy implementation of getValue in jslib (#376) Jul 19, 2018
pkg Changes for topkg Jan 9, 2018
test Switch build system to jbuilder (#265) Dec 15, 2017
tests Resolves links-lang/links#360 (#361) Jul 9, 2018
.gitignore Switch build system to jbuilder (#265) Dec 15, 2017
.travis.yml Migrates from jbuilder to dune. (#367) Jul 12, 2018
ACKNOWLEDGEMENTS Merge murrayfield branch back to trunk. Jun 3, 2009
CHANGES.md Update CHANGELOG Jun 5, 2018
INSTALL postgresql data dumps May 8, 2017
LICENSE.md Changes for topkg Jan 9, 2018
Makefile Migrates from jbuilder to dune. (#367) Jul 12, 2018
README.md Change build status branch Oct 4, 2017
dune Migrates from jbuilder to dune. (#367) Jul 12, 2018
dune-project Migrates from jbuilder to dune. (#367) Jul 12, 2018
links-mode.el Handlers for Algebraic Effects in Links (#227) Sep 5, 2017
links-mysql.opam.unsupported Apparently OPAM files shouldn't have name fields now either Jan 23, 2018
links-postgresql.opam Migrates from jbuilder to dune. (#367) Jul 12, 2018
links-sqlite3.opam.unsupported Apparently OPAM files shouldn't have name fields now either Jan 23, 2018
links.opam Migrates from jbuilder to dune. (#367) Jul 12, 2018
links.vim Add rudimentary vim highlighter Feb 27, 2017
prelude.links Change the semantics of print (#348) Jun 21, 2018
run-tests Re-implemented dynamic loading of database drivers (#336) Jun 4, 2018
test-harness Handlers for Algebraic Effects in Links (#227) Sep 5, 2017

README.md

Links: Linking Theory to Practice for the Web

Build Status

Links helps to build modern Ajax-style applications: those 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 specialized systems such as a relational database. To create such a program, the programmer must master a myriad of languages: the logic is written in a mixture of Java, Python, and Perl; the presentation in HTML; the GUI behavior in Javascript; and the queries are written in SQL or XQuery. There is no easy way to link these: to be sure, for example, that an HTML form or an SQL query produces the type of data that the Java code expects. This is called the impedance mismatch problem.

Links eases the impedance mismatch problem by providing a single language for all three tiers. The system is responsible for translating the code into suitable languages for each tier: for instance, translating some code into Javascript for the browser, some into Java for the server, and some into SQL to use the database.

Links incorporates ideas proven in other programming languages: database-query support from Kleisli, web-interaction proposals from PLT Scheme, and distributed-computing support from Erlang. On top of this, it adds some new web-centric features of its own.

FEATURES

  • Allows web programs to be written in a single programming language
  • Call-by-value functional language
  • Server / Client annotations
  • AJAX
  • Scalability through defunctionalised server continuations.
  • Statically typed database access a la Kleisli
  • Concurrent processes on the client and the server
  • Statically typed Erlang-esque message passing
  • Polymorphic records and variants
  • An effect system for supporting abstraction over database queries whilst guaranteeing that they can be efficiently compiled to SQL
  • Handlers for algebraic effects on the server-side and the client-side