We propose a Java-like language where class denitions are rst class values, hence new classes can be derived from existing, rather than by a xed mechanism like inheritance, by exploiting the full power of the language on top of a small set of primitive composition operators. Hence, compilation of a class table requires to perform (meta-)reduction steps, by a process that we call compile-time execution. This approach diers from meta-programming techniques provided in mainstream languages since it is meta-circular, hence the programmer does not need to learn new syntax and idioms. Compile-time execution is guaranteed to be sound (not to get stuck) by a lightweight technique, where class composition errors are detected dynamically, and conventional typing errors are detected by interleaving typechecking with meta-reduction steps. This allows a modular approach, that is, compile-time execution is dened, and can be implemented, on top of typechecking and execution of the underlying lan...