Effect Annotations Now Survive Codegen
Until now, ARIA's effect system had a gap. You could declare (effects pure) on a function, and the type checker would verify it, but the generated C and WAT output threw that information away. The compiled code had no trace of the effect annotations the AI wrote and the checker verified. @arkaitz-dev closed this gap in PR #7.
The C backend now maps effect declarations to GCC and Clang function attributes. A pure function with no pointer parameters emits __attribute__((const)). A pure function with pointer parameters emits __attribute__((pure)). A mem function returning a pointer emits __attribute__((malloc)). These are not decorative. At -O2, GCC and Clang use them for call deduplication, dead call elimination, and alias analysis. The WAT backend preserves effects as ;;effects: comments before each function, since WASM has no native attribute system.
This matters because it makes the effect system end to end. An AI declares effects in the IR. The type checker verifies them. The C backend encodes them as compiler hints that produce faster binaries. The information flows from intent through verification into optimization. Nothing is lost at the boundary between ARIA and the host compiler.
The thesis says AI-optimized IRs should carry semantic information that survives compilation. Effects are the first case where ARIA does this in a way that produces measurable results in the compiled output. The effect system is no longer just a correctness check. It is an optimization pipeline.