Abstract
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.
Preview
Unable to display preview. Download preview PDF.
Similar content being viewed by others
References
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)
Armstrong, J.: Concurrency oriented programming in Erlang. Invited talk, FFG (2003)
Balat, V.: Ocsigen: typing web interaction with objective Caml. In: Proceedings of the 2006 workshop on ML, Portland, Oregon (September 2006)
Benton, N., Cardelli, L., Fournet, C.: Modern concurrency abstractions for C\(\sharp\). TOPLAS 26(5) (2004)
Benton, N., Kennedy, A., Russo, C.: Adventures in interoperability: the SML .NET experience. PPDP (2004)
Bierman, G., Meijer, E., Schulte, W.: Programming with rectangles, triangles, and circles. In: XML Conference (2003)
Buneman, P., Naqvi, S., Tannen, V., Wong, L.: Principles of programming with complex objects and collection types. TCS 149(1) (1995)
Burstall, R., MacQueen, D., Sannella, D.: Hope: An experimental applicative language. In: Lisp Conference (1980)
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)
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)
Garret, J.: Ajax: a new approach to web applications (2005)
Graham, P.: Method for client-server communications through a minimal interface. United States Patent no. 6,205,469 (March 20, 2001)
Graham, P.: Beating the averages (2001)
Graunke, P., Findler, R.B., Krishnamurthi, S., Felleisen, M.: Automatically restructuring programs for the web. ASE (2001)
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)
Gapeyev, V., Levin, M., Pierce, B., Schmitt, A.: The Xtatic experience. PLAN-X (2005)
Microsoft Corporation. DLinq: .NET Language Integrated Query for Relational Data (September 2005)
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)
Niehren, J., Schwinghammer, J., Smolka, G.: A Concurrent Lambda Calculus with Futures. TCS, 364(3) (2006)
Narra, G.: ObjectGraph Dictionary, http://www.objectgraph.com/dictionary/how.html
Odersky, M., et al.: An overview of the Scala programming language. Technical report, EPFL Lausanne (2004)
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)
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)
Queinnec, C.: Continuations to program web servers. ICFP (2000)
Queinnec, C.: Inverting back the inversion of control or, continuations versus page-centric programming, SIGPLAN Not (2003)
Reynolds, J.: Definitional interpreters for higher-order programming languages. In: ACM ’72: Proceedings of the ACM annual conference (1972)
Ruby on Rails, http://www.rubyonrails.org/
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)
Syme, D.: F\(\sharp\)web page, research.microsoft.com/projects/ilx/fsharp.aspx
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)
Trevor, J., Swamy, N., Hicks, M.: Defeating Script Injection Attacks with Browser-Enforced Embedded Policies. World Wide Web (May 2007)
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)
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)
Wiederman, B., Cook, W.: Extracting queries by static analysis of transparent persistence. POPL (2007)
Wong, L.: Kleisli, a functional query system. JFP, 10(1) (2000)
XML Query and XSL Working Groups. XQuery 1.0: An XML Query Language, W3C Working Draft (2005)
Author information
Authors and Affiliations
Editor information
Rights and permissions
Copyright information
© 2007 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Cooper, E., Lindley, S., Wadler, P., Yallop, J. (2007). Links: Web Programming Without Tiers. In: de Boer, F.S., Bonsangue, M.M., Graf, S., de Roever, WP. (eds) Formal Methods for Components and Objects. FMCO 2006. Lecture Notes in Computer Science, vol 4709. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-74792-5_12
Download citation
DOI: https://doi.org/10.1007/978-3-540-74792-5_12
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-74791-8
Online ISBN: 978-3-540-74792-5
eBook Packages: Computer ScienceComputer Science (R0)