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.
Mailing ListDiscussion of Boomerang and other bidirectional languages takes place on bidirectional transformations wiki and email list.
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.
The Boomerang sources are maintained at GitHub. You can clone your own copy like this:
git clone https://github.com/boomerang-lang/boomerang
- 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
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 ]