# Future Work

The Gobo Eiffel Compiler can be extended in many ways. Here is a non-exhaustive list of possible enhancements and future developments.

## Improve C code generation

Currently gec generates one big C file. Some effort should be spent on allowing several smaller C files to be generated, hence allowing possible incrementality of the C compilation and not putting C compilers too much at stress.

The names of the generated C functions should not depend on type and feature ids in order to make it possible to play with DLLs and other shared libraries. It will also make the incrementality of C compilation easier to implement. The class `ET_C_GENERATOR` has been written in such a way that it should not be that difficult to change the naming convention. You can have a look at the callers of feature `short_names` as a starting point.

One way to improve C compilation time could be to try to use distcc. It seems to work well when applied to the C code generated by ISE.

Note that no effort has been made yet to optimize the generated C code.

## Garbage Collection

One solution is to plug the Boehm GC to the C code generated by gec.

## Multithreading

We need to identify what C functions used by the Eiffel kernel are not thread-safe. We also need to make some special treatment with the once-functions, which are currently implemented using global variables.

## Debugger

Add debugging facilities.

## Profiling

Add profiling facilities.

## Incrementality

Some effort should be spent on finding ways to make the Eiffel to C compilation incremental.

## Validation Test Suite

Several kinds of validation test suite are needed. One to test interoperability with ISE Eiffel. Another one to test compliance with the ECMA Eiffel standard. It would also be useful to have a test suite for FreeELKS kernel library.

## Intermediate Languages

gec currently generates C code. This is done through the class `ET_C_GENERATOR`. gec could be extended to generate Java Virtual Machine (JVM) code, Microsoft .NET code (MSIL), or even native code. We could also have a look at C--.