  When programming resource-scarce embedded smart devices, the designer often
requires both the low-level system programming features of a language such as C
and higher level capability typical of a language like Java. The choice of a
particular language typically implies trade offs between conflicting design
goals such as performance, costs, and overheads. The large variety of
languages, virtual machines, and translators provides the designer with a dense
trade off space, ranging from minimalistic to rich full-fledged approaches, but
once a choice is made it is often difficult for the designer to revise it. In
this work we propose a system of light-weighted and modular extensions as a
method to flexibly reshape the target programming language as needed, adding
only those application layer features that match the current design goals. In
so doing complexity is made transparent, but not hidden: While the programmer
can benefit of higher level constructs, the designer can deal with modular
building blocks each characterized by a certain algorithmic complexity and
therefore each accountable for a given share of the overhead. As a result the
designer is given a finer control on the amount of resources that are consumed
by the run-time executive of the chosen programming language.
