Skip to content

CompilerEvolution

Edgar Mesquita edited this page Jan 25, 2026 · 5 revisions

Evolução do Compilador

Este documento descreve o caminho percorrido no desenvolvimento do compilador do eQuantic.UI, focando na transição de um transpiler sintático simples para um motor de compilação robusto e ciente da semântica.

🕰️ Histórico

Fase 1: Transpilação Baseada em Sintaxe

Inicialmente, o compilador operava através de substituições diretas baseadas em tokens.

  • Limitação: Era difícil lidar com sobrecargas de métodos ou extensões C# complexas.
  • Resultado: Código TypeScript que às vezes requeria ajustes manuais.

Fase 2: O Padrão Strategy

Introduzimos o CSharpToJsConverter baseado em estratégias (IConverterStrategy).

  • Melhoria: Cada elemento da árvore sintática (AST) passou a ter uma lógica de conversão isolada e testável.
  • Destaque: Implementação de suporte nativo a construções como try-catch, switch e expressões lambda.

Fase 3: Consciência Semântica (Atual)

A integração com o Roslyn Semantic Model permitiu que o compilador entendesse o "significado" do código, não apenas a sua forma.

  • Heurísticas de Contexto: O compilador agora sabe diferenciar quando uma variável é um Parameter (mantém o nome) ou uma Property (adiciona this.).
  • Mapeamento Declarativo: Substituímos os grandes blocos de switch por um registro de mapeamento configurável.

🚧 Princípios de Segurança (Guardrails)

Para garantir que o código executado no browser seja estável, o compilador impõe limites claros:

  • Divisão Servidor/Cliente:
    • Server Components: Podem usar System.IO, DbContext, e APIs de banco de dados.
    • Client Components: Restritos a lógica de UI, estado e APIs portáveis.
    • Bloqueio: O compilador rejeita o uso de APIs proibidas (como acesso direto a arquivos) em componentes que serão enviados para o browser.

🔮 Futuro

O próximo grande salto evolutivo focará no Type-Safe Bridge automático, onde o compilador gerará não apenas a chamada da ServerAction, mas também garantirá que os tipos de retorno e argumentos estejam perfeitamente sincronizados entre C# e TypeScript em tempo de compilação.

Clone this wiki locally