Domain specific optimizations for Plug-ins systems

Plug-ins are a powerful tool to create easily expandable systems, but it usually deteriorates the performance of the whole system. A good compromise is the system cannot be expanded at any time in its work, but only as its launch. This opens up possibilities for applying optimizations on the entire system and plug-ins to reduce the influence of the weak connectivity of its modules. Optimizations like merging plug-in modules to the base program, automatically mark the classes as sealed, and the de-virtualization methods are just examples of how you can achieve better performance without losing the flexibility of the system. The results from optimizations may be cached to avoid performing these hard analyzes and transformations at each program launch. This approach allows optimizations to be performed only when we add or remove plug-ins to the system.

Requirements:

We intend to implement this domain specific optimization methods using the existing SolidOpt infrastructure. Application must be able to transform itself and cache the result then that result must be launched. Transformations should be made only if the cache is invalid (for example, set of plug-ins is changed, configuration is changed, etc). We need to consider the security risks and whether the transformation can be made by a system service or daemon.

At the beginning we shall concentrate on SolidOpt plug-ins sub system, but later we shall consider the MEF, Mono Add-ins, and other plug-in systems

Expected results: The final project should fulfill the requirements, have unit testing and be ready for adoption in our mainline.

Knowledge Prerequisite: C#, SolidOpt framework, Mono.Cecil, Decompilation, IL, ...

More info: ---

Mentor: Alexander Penev