Next: ASM Super-Mutants, Previous: Super-Mutants, Up: Super-Mutants [Contents][Index]
Super mutants composed of clang
and clang-project
software objects
work by combining the genomes of multiple objects into a single
software object, identifying functions with differences between
objects, and wrapping the bodies of those functions in switch
statements switching on the value of an environment variable which
controls which mutant is exercised in any given execution.
When combining multiple genomes, there is some risk of interactions between the individual mutants. These primarily relate to compilation errors. For example, if a mutation deletes a global variable which is referenced in the program, that would normally lead to an error. But if that mutant is combined with another which still has the variable, the combined mutant will compile and both will run as if the variable was present.
Conversely, a compilation error in any mutant will cause compilation to fail for the entire super-mutant.
If all mutants are free from compilation errors, their combination should also compile, and its runtime behavior should be functionally indistinguishable from that of the individual mutants.
The super-mutant genome will introduce a getenv
call and a switch
statement. If these are placed in a performance-critical function,
execution time might increase significantly. If execution time is
part of the fitness evaluation, use super-mutants with caution.
A compilation failure in a single mutant will cause phenome
to
fail for the entire super-mutant. If mutations frequently
introduce compilation failures, this can lead to a lot of wasted
compilation. This problem will get worse as :super-mutant-count
increases.
Similarly, if the individual mutants are not compatible (due to
differences in global variables or function signatures), a mutate
error will be raised and the entire super-mutant discarded. This
can lead to wasted mutations.
Next: ASM Super-Mutants, Previous: Super-Mutants, Up: Super-Mutants [Contents][Index]