Boomerang is a programming language for writing lenses—well-behaved bidirectional transformations—that operate on ad-hoc, textual data formats. Every lens program, when read from left to right, describes a function that maps an input to an output; when read from right to left, the very same program describes a "backwards" function that maps a modified output, together with the original input, back to a modified input.
Lenses have been used to solve problems across a wide range of areas in computing including: in data converters and synchronizers, in parsers and pretty printers, in picklers and unpicklers, in structure editors, in constraint maintainers for user interfaces, in software model transformations, in schema evolution, in tools for managing system configuration files, and in databases where they provide updatable views.
The best way to get started with Boomerang is to download our system and work through the examples in the first few chapters of the manual. Many more details can be found in our research papers.
Mailing List
Discussion of Boomerang and other bidirectional languages takes place on bidirectional transformations wiki and email list.Team
Boomerang is developed by Nate Foster, Benjamin C. Pierce, and Michael Greenberg with major contributions from Davi Barbosa, Aaron Bohannon, Julien Cretin, Alexandre Pilkiewicz, and Alan Schmitt.
Support
Our work is supported by the National Science Foundation under the following grants:
- ITR-0113226: Principles and Practice of Synchronization
- CPA-0429836: Harmony: The Art of Reconciliation
- IIS-0534592: Linguistic Foundations for XML View Update
- CT-0716469: Manifest Security
- NSF Graduate Research Fellowship
Boomerang is free software; you may redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation.
Github Access
The Boomerang sources are maintained at GitHub. You can clone your own copy like this:
git clone https://github.com/boomerang-lang/boomerang
Boomerang Manual
- J. Nathan Foster and Benjamin C. Pierce. Boomerang Programmer's Manual. [ pdf ]
Research papers on Boomerang
-
Aaron Bohannon, J. Nathan Foster, Benjamin C. Pierce, Alexandre Pilkiewicz, and
Alan Schmitt.
Boomerang: Resourceful Lenses for String Data.
In ACM SIGPLAN-SIGACT Symposium on Principles of
Programming Languages (POPL), San Francisco, California, January 2008.
[ conference version | tech report | slides ] -
J. Nathan Foster, Alexandre Pilkiewcz, and Benjamin C. Pierce.
Quotient Lenses. To appear in ACM SIGPLAN
International Conference on Functional Programming (ICFP),
Victoria, British Columbia, September, 2008.
[ conference version ]
Research papers on lenses in general
- Aaron Bohannon, Jeffrey A. Vaughan, and Benjamin C. Pierce.
Relational Lenses: A Language for Updateable Views.
In ACM SIGMOD-SIGACT-SIGART Symposium on Principles of Database Systems (PODS), Chicago, Illinois, June 2006.
Also available as Technical Report MS-CIS-05-27, Department of Computer and Information
Science, University of Pennsylvania, December 2005.
[ conference version | tech report ] - J. Nathan Foster, Michael B. Greenwald, Jonathan T. Moore,
Benjamin C. Pierce, and Alan Schmitt.
Combinators for bidirectional tree transformations: A
linguistic approach to the view-update problem.
ACM Transactions on Programming Languages and Systems,
29(3):17, May 2007.
Preliminary version presented at the Workshop on Programming
Language Technologies for XML (PLAN-X), 2004; extended abstract
presented at Principles of Programming Languages (POPL), 2005.
[ conference version | journal version | slides ]