Links: Web Programming Without Tiers

  • Ezra Cooper
  • Sam Lindley
  • Philip Wadler
  • Jeremy Yallop
Part of the Lecture Notes in Computer Science book series (LNCS, volume 4709)


Links is a programming language for web applications that generates code for all three tiers of a web application from a single source, compiling into JavaScript to run on the client and into SQL to run on the database. Links supports rich clients running in what has been dubbed ‘Ajax’ style, and supports concurrent processes with statically-typed message passing. Links is scalable in the sense that session state is preserved in the client rather than the server, in contrast to other approaches such as Java Servlets or PLT Scheme. Client-side concurrency in JavaScript and transfer of computation between client and server are both supported by translation into continuation-passing style.


Regular Expression Message Passing Input Element Event Handler Session State 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Atkins, D.L., Ball, T., Bruns, G., Cox, K.C.: Mawl: A domain-specific language for form-based services. Software Engineering 25(3), 334–346 (1999)CrossRefGoogle Scholar
  2. 2.
    Armstrong, J.: Concurrency oriented programming in Erlang. Invited talk, FFG (2003)Google Scholar
  3. 3.
    Balat, V.: Ocsigen: typing web interaction with objective Caml. In: Proceedings of the 2006 workshop on ML, Portland, Oregon (September 2006)Google Scholar
  4. 4.
    Benton, N., Cardelli, L., Fournet, C.: Modern concurrency abstractions for C\(\sharp\). TOPLAS 26(5) (2004)Google Scholar
  5. 5.
    Benton, N., Kennedy, A., Russo, C.: Adventures in interoperability: the SML .NET experience. PPDP (2004)Google Scholar
  6. 6.
    Bierman, G., Meijer, E., Schulte, W.: Programming with rectangles, triangles, and circles. In: XML Conference (2003)Google Scholar
  7. 7.
    Buneman, P., Naqvi, S., Tannen, V., Wong, L.: Principles of programming with complex objects and collection types. TCS 149(1) (1995)Google Scholar
  8. 8.
    Burstall, R., MacQueen, D., Sannella, D.: Hope: An experimental applicative language. In: Lisp Conference (1980)Google Scholar
  9. 9.
    El-Ansary, S., Grolaux, D., Van Roy, P., Rafea, M.: Overcoming the multiplicity of languages and technologies for web-based development. In: Van Roy, P. (ed.) MOZ 2004. LNCS, vol. 3389, Springer, Heidelberg (2005)Google Scholar
  10. 10.
    Fournet, C., Gonthier, G.: The Join Calculus: a language for distributed mobile programming. In: Barthe, G., Dybjer, P., Pinto, L., Saraiva, J. (eds.) APPSEM 2000. LNCS, vol. 2395, Springer, Heidelberg (2002)CrossRefGoogle Scholar
  11. 11.
    Garret, J.: Ajax: a new approach to web applications (2005)Google Scholar
  12. 12.
    Graham, P.: Method for client-server communications through a minimal interface. United States Patent no. 6,205,469 (March 20, 2001)Google Scholar
  13. 13.
    Graham, P.: Beating the averages (2001)Google Scholar
  14. 14.
    Graunke, P., Findler, R.B., Krishnamurthi, S., Felleisen, M.: Automatically restructuring programs for the web. ASE (2001)Google Scholar
  15. 15.
    Graunke, P., Krishnamurthi, S., van der Hoeven, S., Felleisen, M.: Programming the web with high-level programming languages. In: Sands, D. (ed.) ESOP 2001 and ETAPS 2001. LNCS, vol. 2028, Springer, Heidelberg (2001)Google Scholar
  16. 16.
    Gapeyev, V., Levin, M., Pierce, B., Schmitt, A.: The Xtatic experience. PLAN-X (2005)Google Scholar
  17. 17.
  18. 18.
    Microsoft Corporation. DLinq: .NET Language Integrated Query for Relational Data (September 2005)Google Scholar
  19. 19.
    Møller, A., Schwartzbach, M.: The design space of type checkers for XML transformation languages. In: Eiter, T., Libkin, L. (eds.) ICDT 2005. LNCS, vol. 3363, Springer, Heidelberg (2004)Google Scholar
  20. 20.
    Niehren, J., Schwinghammer, J., Smolka, G.: A Concurrent Lambda Calculus with Futures. TCS, 364(3) (2006)Google Scholar
  21. 21.
    Narra, G.: ObjectGraph Dictionary,
  22. 22.
    Odersky, M., et al.: An overview of the Scala programming language. Technical report, EPFL Lausanne (2004)Google Scholar
  23. 23.
    Plasmeijer, R., Achten, P.: iData For The World Wide Web: Programming Interconnected Web Forms. In: Hagiya, M., Wadler, P. (eds.) FLOPS 2006. LNCS, vol. 3945, Springer, Heidelberg (2006)CrossRefGoogle Scholar
  24. 24.
    Pottier, F., Rémy, D.: The essence of ML type inference. In: Pierce, B. (ed.) Advanced Topics in Types and Programming Languages, ch. 10, pp. 389–489. MIT Press, Cambridge (2005)Google Scholar
  25. 25.
    Queinnec, C.: Continuations to program web servers. ICFP (2000)Google Scholar
  26. 26.
    Queinnec, C.: Inverting back the inversion of control or, continuations versus page-centric programming, SIGPLAN Not (2003)Google Scholar
  27. 27.
    Reynolds, J.: Definitional interpreters for higher-order programming languages. In: ACM ’72: Proceedings of the ACM annual conference (1972)Google Scholar
  28. 28.
  29. 29.
    Serrano, M., Gallesio, E., Loitsch, F.: HOP, a language for programming the Web 2.0. In: Proceedings of the First Dynamic Languages Symposium, Portland, Oregon (October 2006)Google Scholar
  30. 30.
    Syme, D.: F\(\sharp\)web page,
  31. 31.
    Thiemann, P.: WASH/CGI: server-side web scripting with sessions and typed, compositional forms. In: Krishnamurthi, S., Ramakrishnan, C.R. (eds.) PADL 2002. LNCS, vol. 2257, Springer, Heidelberg (2002)CrossRefGoogle Scholar
  32. 32.
    Trevor, J., Swamy, N., Hicks, M.: Defeating Script Injection Attacks with Browser-Enforced Embedded Policies. World Wide Web (May 2007)Google Scholar
  33. 33.
    Van Roy, P.: Convergence in language design: a case of lightning striking four times in the same place. In: Hagiya, M., Wadler, P. (eds.) FLOPS 2006. LNCS, vol. 3945, Springer, Heidelberg (2006)CrossRefGoogle Scholar
  34. 34.
    Wan, Z., Hudak, P.: Functional reactive programming from first principles. In: PLDI ’00: Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation, Vancouver, British Columbia, Canada (2000)Google Scholar
  35. 35.
    Wiederman, B., Cook, W.: Extracting queries by static analysis of transparent persistence. POPL (2007)Google Scholar
  36. 36.
    Wong, L.: Kleisli, a functional query system. JFP, 10(1) (2000)Google Scholar
  37. 37.
    XML Query and XSL Working Groups. XQuery 1.0: An XML Query Language, W3C Working Draft (2005)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2007

Authors and Affiliations

  • Ezra Cooper
    • 1
  • Sam Lindley
    • 1
  • Philip Wadler
    • 1
  • Jeremy Yallop
    • 1
  1. 1.University of Edinburgh 

Personalised recommendations