Optimizador de AST (Optimización en Compilación)

Archivo: src/optimizer.rs

El optimizador de Forja opera directamente sobre el Árbol de Sintaxis Abstracta (AST) después de superar las fases de validación semántica. Su función es reestructurar el árbol eliminando redundancias en tiempo de compilación para reducir la cantidad de instrucciones generadas, lo que a su vez disminuye la carga de trabajo en runtime para la máquina virtual y los backends nativos.

El archivo implementa dos fases de optimización independientes:


1. Reducción de Constantes (Optimizer)

Estructura Optimizer
pub struct Optimizer {
    pub cambios_realizados: usize,
}

Lleva la cuenta de la cantidad de simplificaciones de nodos del AST ejecutadas con éxito.

Desglose de Funciones

pub fn new() -> Self

pub fn optimizar(&mut self, programa: &Programa) -> Programa

fn optimizar_declaracion(&mut self, decl: &Declaracion) -> Declaracion

fn optimizar_expresion(&mut self, expr: &Expresion) -> Expresion

fn evaluar_binaria(&self, a: &ValorConstante, op: &Operador, b: &ValorConstante) -> Option<ValorConstante>


2. Eliminación de Código Muerto (DeadCodeEliminator)

Estructura DeadCodeEliminator
pub struct DeadCodeEliminator {
    pub eliminados: usize,
    variables_usadas: HashSet<String>,
    funciones_llamadas: HashSet<String>,
}

Desglose de Funciones

pub fn eliminar(&mut self, programa: &Programa) -> Programa

fn recolectar_en_expresion(&mut self, expr: &Expresion)

fn es_muerto(&self, decl: &Declaracion) -> bool