Cecilia is a development environment for programming Fractal components on top of the C programming language.
It leverages previous developments made in the Plasma project, and is a fork of V3 of the Think project.
Cecilia environment includes a toolchain for building software systems from their architecture descriptions. This toolchain is implemented on top of the original Fractal ADL toolchain, adding the possibility to perform sophisticated code generation tasks as part of the toolchain execution. In other terms, the role of this toolchain is to read a set of Fractal ADL architecture description files defining the configuration of a given software, and to build the corresponding software by gathering the components to be used from component libraries and generating the glue code to fit them in the required configuration, and also to compile the set of generated and hand-written implementation files to produce an executable application, or a bootable kernel.
Thanks to this toolchain, primitive Cecilia components are programmed with respect to a programming guide on top of C and C++ programming languages, allowing the developer to concentrate only on writing component-related aspects such as instance data, interface implementations, invocations and so on.
Note that the generated code conforms to standard C, and the tools used to compile both the implementation and generated files are standard C or C++ compiler and linker for a given target hardware platform.
Quick Start tutorials
If you want to have familiarity on how to develop a Fractal application with Cecilia, it is recommended to begin with these quick start tutorials:
- HelloWorld: it is a basic Cecilia example, showing a composite component containing a primitive client component which calls a print method on a primitive server component. The example is then progressively extended, to have the server component counts the number of times its print method is called. In order to do that a nrOfInvocations component instance variable is added, and it is initialized using the Fractal LifeCycleController interface.
Inside the tutorials you will find references to other documentation needed to setup the working environment or understand some concepts.
Cecilia implements the Fractal Component Model. You may look at the Fractal specification for more information on the abstract component model.
Cecilia primitive programming languages
You can write primitive components for Cecilia in different languages on top of C:
- Cecilia thinkMC language. It is the language in which the examples are provided.
- C++ language. Support for developing Cecilia components in C++ is still experimental.
You can then follow one of these two links:
- Cecilia ADL Language: a description of the Cecilia Architecture Description Language, starting with a basic example and then providing the full ADL grammar specification
- Cecilia ADL Toolchain: a description of the Cecilia Toolchain architecture. The toolchain reads an architecture description, generates corresponding C source code and compiles the resulting application.
The following is a list of component based libraries that can be used with Cecilia:
- cecilia-baselib: This library contains a minimal set of interfaces and components needed to develop a Cecilia application.
- Minus: This library provides components to build exo-kernels and middlewares for embedded platforms. It is delivered with a set of examples, as well as wrapper components to run on POSIX systems (Linux).
The Cecilia modules (api, impl and libs) are built and packaged with the open source tool Maven.
You are suggested to use Maven to develop 3rd party applications based on Cecilia, because you may find that there is Maven support for Cecilia by means of custom plugins and archetypes which can speedup and simplify your developments.
Frequently Asked Questions
As some sort of short reference to some Cecilia practices, there is a Frequently Asked Questions page.
Questions, comments, ideas, etc. related to Fractal can be posted on the Fractal mailing list (preferably prefixing your email subject with [cecilia]).