The Cake linking language
Cake is a linking language I'm working on as part of my PhD. Simply
put, Cake provides a high-level declarative notation for gluing together
interfaces which are abstractly similar but concretely
different. These concrete differences might be because of simple
interface evolution (i.e. gluing together components respectively
providing and requiring mismatched versions of the same interface) or
unanticipated composition (i.e. gluing together components with no
preexisting relationship or shared origins, but providing logically
compatible functionality).
Cake has the following novel and/or interesting properties.
- Cake is practical. The design of Cake is grounded in case studies
arising from real development needs.
- Cake targets binaries, in the form of relocatable object code. In
contrast to glue coding approaches, you don't need to bother creating a
build environment that can compile against the interfaces you're gluing.
Provided you understand what the components are doing, you don't need
source code. It really helps to have debugging information though.
- Cake is language-agnostic, in that it is useful for any components
that are in the form of relocatable object code. The current
implementation is tuned to components written in C, but broadening this
is a goal for future development.
- Cake is based on the high-level abstraction of relations.
These describe what values correspond between components being
glued, and in what contexts. By introducing context-dependent
specialisations, arbitrarily complex glue logic can be described.
However, for now Cake is limited to only a few forms of
context-dependency.
- Cake is adoptable. There are no special constraints on the
components which will work with Cake, so you can take your existing
code and start using Cake to glue it together. It also integrates
neatly into existing build systems---the Cake compiler generates a
POSIX makefile designed to be included in a toplevel makefile (although
it can also be invoked directly).
- The implementation of Cake has interesting overlaps with dynamic languages,
garbage collectors, debuggers, dynamic software update systems and more.
Please read the OOPSLA 2010
paper to find out more about the language. There is also an earlier
short paper from ICSE
'09 detailing some earlier case studies which shaped the design of Cake.
My PhD thesis is
the most complete account, but is overkill for introductory purposes.
Feel free to contact me to find out
more.
Cake has not advanced to a state where it's ready for
public consumption, but adventurous users can try out what currently exists.
The best reference for that is my Cake
repository on GitHub.
Please do send me e-mail if you run
into problems, or have general questions or comments.
Content updated at Tue 2 Jun 15:00:00 BST 2015.
validate this page