Links
OCaml JavaScript Standard ML Makefile Emacs Lisp Shell Other
Latest commit 7f0e962 Jan 24, 2017 @dhil dhil committed on GitHub Merge pull request #134 from dhil/sessions
Support for using environment variables in Links configuration files
Permalink
Failed to load latest commit information.
benchmarks remove trailing whitespace Dec 24, 2016
deriving Remove deriving source; use the Ocsigen/OPAM version instead. Jul 28, 2014
doc Tweak .gitignore and make clean for doc directory Sep 27, 2016
documentation Fixed numbers in 2048 being off center. Added some files to the docum… Sep 12, 2014
examples hack to support client access points created on the server in the app Jan 4, 2017
lib/js hack to support client access points created on the server in the app Jan 4, 2017
tests link should be conditioned Jan 3, 2017
.gitignore Consistent type variable names in error messages Dec 1, 2016
.travis.yml Try updating travis to switch to 4.04.0 Dec 22, 2016
ACKNOWLEDGEMENTS Merge murrayfield branch back to trunk. Jun 3, 2009
CHANGES formatting Dec 30, 2016
COPYING Merge murrayfield branch back to trunk. Jun 3, 2009
INSTALL no need to mention ulimit Dec 31, 2016
INSTALL-OLD New installation instructions and changelog Dec 24, 2016
Makefile add support for multipart form data to the app server Dec 24, 2016
Makefile.sample.config Query presence of database backends in Makefile Dec 13, 2016
OCamlMakefile Update OCamlMakefile Sep 27, 2016
PP.ml Fix #125 (for now). Dec 30, 2016
README.md Convert README do Markup, add Travis status button Oct 12, 2016
basicsettings.ml update welcome message; minor tweaks Dec 24, 2016
buildTables.ml Get rid of most of the remaining warnings. Dec 22, 2016
chaser.ml More testing and fixes to modules (#121) Dec 23, 2016
chaser.mli Simpler Module System Dec 15, 2016
checkXmlQuasiquotes.ml Get rid of most of the remaining warnings. Dec 22, 2016
closures.ml Get rid of most of the remaining warnings. Dec 22, 2016
compilePatterns.ml Get rid of most of the remaining warnings. Dec 22, 2016
compiler_prelude.links Merge murrayfield branch back to trunk. Jun 3, 2009
constant.ml remove trailing whitespace Dec 24, 2016
database.ml Get rid of most of the remaining warnings. Dec 22, 2016
database.mli remove trailing whitespace Dec 24, 2016
debug.ml remove trailing whitespace Dec 24, 2016
debug.mli remove trailing whitespace Dec 24, 2016
defaultAliases.ml First attempt at sockets in Links. Aug 22, 2014
desugarCP.ml link should be conditioned Jan 3, 2017
desugarCP.mli Support quoted CP-style process expressions. Jul 18, 2014
desugarDatatypes.ml remove trailing whitespace Dec 24, 2016
desugarDatatypes.mli Make sure that DesugarDatatypes.read always receives a type May 7, 2008
desugarDbs.ml Get rid of most of the remaining warnings. Dec 22, 2016
desugarDbs.mli Merge murrayfield branch back to trunk. Jun 3, 2009
desugarFormlets.ml Get rid of most of the remaining warnings. Dec 22, 2016
desugarFormlets.mli - Lots of fixes to type inference. Sep 16, 2008
desugarFors.ml Get rid of most of the remaining warnings. Dec 22, 2016
desugarFors.mli Merge murrayfield branch back to trunk. Jun 3, 2009
desugarFuns.ml Get rid of most of the remaining warnings. Dec 22, 2016
desugarFuns.mli delete bogus executable flags Aug 9, 2012
desugarInners.ml Get rid of most of the remaining warnings. Dec 22, 2016
desugarInners.mli Merge murrayfield branch back to trunk. Jun 3, 2009
desugarLAttributes.ml Get rid of most of the remaining warnings. Dec 22, 2016
desugarLAttributes.mli Narrow some interfaces. Dec 22, 2007
desugarModules.ml More testing and fixes to modules (#121) Dec 23, 2016
desugarModules.mli Simpler Module System Dec 15, 2016
desugarPages.ml Get rid of most of the remaining warnings. Dec 22, 2016
desugarPages.mli Rewrite DesugarPages to be type-preserving. Aug 13, 2008
desugarProcesses.ml Get rid of most of the remaining warnings. Dec 22, 2016
desugarProcesses.mli Merge murrayfield branch back to trunk. Jun 3, 2009
desugarRegexes.ml remove trailing whitespace Dec 24, 2016
desugarRegexes.mli - lots of bug-fixes in TransformSugar Aug 11, 2008
dumpTypes.ml Get rid of most of the remaining warnings. Dec 22, 2016
env.ml Get rid of most of the remaining warnings. Dec 22, 2016
env.mli Merge branch 'master' into sessions Sep 17, 2014
errors.ml Get rid of most of the remaining warnings. Dec 22, 2016
errors.mli remove trailing whitespace Dec 24, 2016
evalir.ml link should be conditioned Jan 3, 2017
eventHandlers.ml add some missing files Jan 18, 2016
eventHandlers.mli add some missing files Jan 18, 2016
fixTypeAbstractions.ml Get rid of most of the remaining warnings. Dec 22, 2016
fixTypeAbstractions.mli Lots of improvements to the implementation of first-class Dec 14, 2010
frontend.ml Get rid of most of the remaining warnings. Dec 22, 2016
generalise.ml Get rid of most of the remaining warnings. Dec 22, 2016
generalise.mli Push subkinds for presence variables all the way through. Still need Jul 15, 2014
getopt.ml remove trailing whitespace Dec 24, 2016
getopt.mli remove trailing whitespace Dec 24, 2016
graph.ml remove trailing whitespace Dec 24, 2016
instantiate.ml Get rid of most of the remaining warnings. Dec 22, 2016
instantiate.mli first-class polymorphism fixes Apr 2, 2015
ir.ml remove trailing whitespace Dec 24, 2016
ir.mli Get rid of most of the remaining warnings. Dec 22, 2016
irtojs.ml Get rid of most of the remaining warnings. Dec 22, 2016
irtojs.mli Get rid of most of the remaining warnings. Dec 22, 2016
js.ml remove trailing whitespace Dec 24, 2016
json.ml remove trailing whitespace Dec 24, 2016
jsonlex.mll Change the representation of server-side integers from unbounded Nov 13, 2015
jsonparse.mly remove trailing whitespace Dec 24, 2016
lexer.mli remove trailing whitespace Dec 24, 2016
lexer.mll remove trailing whitespace Dec 24, 2016
lib.ml link should be conditioned Jan 3, 2017
lib.mli Get rid of most of the remaining warnings. Dec 22, 2016
links-mode.el New option --print-keywords to make Links print its language keywords ( Sep 27, 2016
links.ml update welcome message; minor tweaks Dec 24, 2016
linksregex.ml remove trailing whitespace Dec 24, 2016
lite3_database.ml fixed warnings Nov 30, 2016
loader.ml Get rid of most of the remaining warnings. Dec 22, 2016
loader.mli * Added "whole_program_caching" option, which caches several expensive Aug 4, 2010
moduleUtils.ml More testing and fixes to modules (#121) Dec 23, 2016
moduleUtils.mli More testing and fixes to modules (#121) Dec 23, 2016
multipart.ml add support for multipart form data to the app server Dec 24, 2016
mysql_database.ml fixed warnings Nov 30, 2016
notfound.ml Added error handling (or rather printing) for expansion of environmen… Jan 24, 2017
opam Install Links executable as "linx". Jan 13, 2017
parse.ml remove trailing whitespace Dec 24, 2016
parse.mli remove trailing whitespace Dec 24, 2016
parseXml.ml remove trailing whitespace Dec 24, 2016
parseXml.mli Basic XML parsing functionality for Links. Apr 27, 2010
parser.mly allow trailing unit to be omitted in CP syntactic sugar Jan 4, 2017
performance.ml remove trailing whitespace Dec 24, 2016
performance.mli For labels, use MD5 digest instead of sequence generator (should be Feb 7, 2007
pg_database.ml fixed warnings Nov 30, 2016
prelude.links link should be conditioned Jan 3, 2017
proc.ml link should be conditioned Jan 3, 2017
proc.mli link should be conditioned Jan 3, 2017
query.ml remove trailing whitespace Dec 24, 2016
query.mli create an interface for Query module Sep 30, 2016
queryshredding.ml remove trailing whitespace Dec 24, 2016
refineBindings.ml fix bug with refineTypeBindings reordering bindings - by ensuring it Dec 23, 2016
refineBindings.mli Pull out a couple of things as separate phrases: Dec 19, 2007
regex.ml remove trailing whitespace Dec 24, 2016
resolvePositions.ml remove trailing whitespace Dec 24, 2016
resolvePositions.mli Narrow some interfaces. Dec 22, 2007
rewrite.ml remove trailing whitespace Dec 24, 2016
run-tests Database tests can now be expected to be broken. Oct 19, 2016
settings.ml Added error handling (or rather printing) for expansion of environmen… Jan 24, 2017
settings.mli remove trailing whitespace Dec 24, 2016
sourceCode.ml remove trailing whitespace Dec 24, 2016
sugarTraversals.ml link should be conditioned Jan 3, 2017
sugarTraversals.mli Change the representation of server-side integers from unbounded Nov 13, 2015
sugartoir.ml remove trailing whitespace Dec 24, 2016
sugartoir.mli First attempt at in-Links web server (#101) Dec 19, 2016
sugartypes.ml link should be conditioned Jan 3, 2017
tables.ml Get rid of most of the remaining warnings. Dec 22, 2016
test-harness Newer version of modules system (#93) Dec 1, 2016
test.ml remove trailing whitespace Dec 24, 2016
tests.ml remove trailing whitespace Dec 24, 2016
transformSugar.ml link should be conditioned Jan 3, 2017
transformSugar.mli no warnings at all; fixed bugs in formlet traversal Dec 23, 2016
typeSugar.ml link should be conditioned Jan 3, 2017
typeSugar.mli Narrow some interfaces. Dec 22, 2007
typeUtils.ml Get rid of most of the remaining warnings. Dec 22, 2016
typeUtils.mli Merge session types with datatypes in the backend. Now we can do type Aug 4, 2014
types.ml Get rid of most of the remaining warnings. Dec 22, 2016
types.mli First attempt at in-Links web server (#101) Dec 19, 2016
typevarcheck.ml Get rid of most of the remaining warnings. Dec 22, 2016
typevarcheck.mli Merge alias branch into trunk. Feb 26, 2008
unify.ml Get rid of most of the remaining warnings. Dec 22, 2016
unify.mli Merge alias branch into trunk. Feb 26, 2008
unionfind.ml remove trailing whitespace Dec 24, 2016
unionfind.mli Merge murrayfield branch back to trunk. Jun 3, 2009
used.sh Prettier errors in web mode. May 24, 2006
utility.ml remove trailing whitespace Dec 24, 2016
value.ml Get rid of most of the remaining warnings. Dec 22, 2016
value.mli remove trailing whitespace Dec 24, 2016
var.ml Get rid of most of the remaining warnings. Dec 22, 2016
webif.ml add support for multipart form data to the app server Dec 24, 2016
webif.mli Get rid of most of the remaining warnings. Dec 22, 2016
webserver.ml get rid of .meth warning in webserver.ml Jan 4, 2017
webserver.mli Get rid of most of the remaining warnings. Dec 22, 2016
webserver_types.ml Add mapping from extensions to MIME types in addStaticRoute. Dec 23, 2016
webserver_types.mli Add mapping from extensions to MIME types in addStaticRoute. Dec 23, 2016
webtest.cgi Import from CVS repository Mar 16, 2006
webtest.ls Import from CVS repository Mar 16, 2006
xmlLexer.mll remove trailing whitespace Dec 24, 2016
xmlParser.mly remove trailing whitespace Dec 24, 2016

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