📘 DECISÕES TÉCNICAS

Justificativas e escolhas arquiteturais do compilador

🎯 1. Contexto

Inicialmente optamos por utilizar TypeScript por aparentar possuir uma sintaxe semelhante à de C. Porém, ao longo do desenvolvimento percebemos que, apesar da familiaridade superficial, existem diferenças estruturais significativas entre as duas linguagens.

❗ 2. Problema

Durante o desenvolvimento percebemos que vários conceitos essenciais de C não têm equivalente direto em TypeScript, o que impactou a arquitetura do compilador. Os principais pontos foram:

• Endereçamento
C trabalha com endereços reais e aritmética de ponteiros; TypeScript não permite acesso à memória. Isso exigiu adaptações em operações como leitura, escrita, manipulação de strings e inferência de tipos.

• Strings
C usa arrays mutáveis de char; TypeScript usa strings imutáveis. Operações simples, como concatenação, precisaram ser reinterpretadas.

• Orientação a objetos e métodos específicos
TypeScript possui classes, interfaces e diversos métodos nativos como .split() e .sort(), que não existem em C. Implementar equivalentes exigiria estruturas complexas em baixo nível.

• Assincronicidade & modelo de execução
TypeScript utiliza async/await, Promises e event loop; C é totalmente síncrono. Replicar esse comportamento exigiria escrever um runtime completo.

✅ 3. Decisão

Optamos por não incluir recursos como orientação a objetos, funções assíncronas (async/await), arrow functions e métodos de alto nível como split() e sort() — este último exigindo a implementação interna de algoritmos como TimSort. Essa escolha permitiu manter o escopo do compilador simples, consistente e compatível com o modelo de execução de C.