📘 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.