Niklaus Wirth, ou a Importância de Ser Simples
Defensores da filosofia “simplicidade em primeiro lugar” de Niklaus Wirth refletem sobre Pascal, Modula, Oberon e seus descendentes, contrastando-os com linguagens mainstream mais complexas como C, C++ e Rust. Os comentaristas avaliam como restrições de design de linguagem, velocidade de compilação e ergonomia afetam a produtividade no mundo real, o ensino e a programação de sistemas, citando frequentemente Go, D e Modula‑3 como herdeiros modernos das ideias de Wirth. A discussão também aborda a influência histórica do trabalho de Wirth — da Apple e Borland à Logitech — e questiona se as ferramentas de hoje e as pressões da indústria ainda recompensam linguagens minimalistas e cuidadosamente projetadas.
Pascal vs C e Compromissos no Design de Linguagens
- Vários comentaristas dizem que o Pascal “padrão” era restritivo demais; eles gastavam tempo com gambiarras que desapareciam ao mudar para C.
- Outros argumentam que a simplicidade e a estrutura do Pascal os tornavam produtivos e esclareciam conceitos centrais de programação.
- Há debate sobre se o sucesso de C se deve a ser mais simples/mais genérico, a uma melhor ergonomia (sintaxe mais curta e menos verbosa), à sinergia com o ecossistema Unix, ou a tudo isso.
- Extensões (Turbo Pascal, Object Pascal, Clascal, Modula-2, etc.) são vistas como necessárias para tornar o Pascal viável para desenvolvimento de sistemas e aplicações.
Linguagem de Ensino vs Sistemas em Produção
- Muitos observam que o Pascal original foi explicitamente projetado para ensino e compilação em uma passagem em hardware limitado, não como linguagem de sistemas.
- Alguns reclamam que ele foi mal utilizado na indústria (“mandado cavar uma trincheira com um carro de autoescola”), culpando escolhas de gestão e não a linguagem em si.
- Tempos curtos de compilação são destacados como críticos em ambientes educacionais e de time-sharing.
Funções Aninhadas e Closures
- Discussão sobre funções aninhadas com acesso a escopos externos (estilo Pascal) e como elas são implementadas usando um “static link” para os frames de pilha envolventes.
- Comparações com lambdas de C++ e trampolins; algumas VMs caseiras tentaram esquemas mais simples e encontraram problemas com recursão.
Módulos, Interfaces e Implementações
- Há confusão sobre “linguagens modulares”: alguns querem dizer módulos no estilo Modula/Oberon/Ada, outros interfaces ao estilo Java.
- Em sistemas de módulos como Modula-2/Oberon/C/C++, um determinado header de interface pode ter múltiplas implementações globalmente, mas apenas uma é escolhida por compilação.
- Interfaces no estilo Java (e alguns sistemas de módulos ao estilo ML) permitem múltiplas implementações de forma mais flexível no nível de tipos.
Simplicidade, Complexidade e Velocidade de Compilação
- Um ponto de vista: a velocidade de compilação é um teste decisivo para a simplicidade de uma linguagem; linguagens que compilam rápido (Go, Pascal clássico) refletem designs simples.
- Contra-argumentos: a velocidade de compilação é influenciada pela implementação e pelas ferramentas (por exemplo, LLVM, headers, templates), não apenas pela complexidade da linguagem; exemplos como OCaml mostram compiladores rápidos para linguagens não triviais.
- Debate sobre módulos modernos de C++, caches e ferramentas como correções parciais versus complexidade fundamental.
Influência em Linguagens Posteriores
- Go é frequentemente discutido: alguns o veem como um descendente simples, inspirado em Wirth, de Modula/Oberon; outros dizem que sua linhagem principal passa por Newsqueak e CSP, com apenas influência superficial da família Pascal (sintaxe, packages).
- D é citado por emprestar ideias específicas (por exemplo, funções aninhadas), mas não o minimalismo geral no estilo de Wirth.
- Modula-3 é elogiada como uma linguagem “completa”, porém enxuta, que antecipou problemas de complexidade do C++.
Concorrência e Simplicidade
- Subthread estendido sobre adicionar concorrência ao Oberon (Oberon+): channels vs monitors, actors, CSP, e quantos primitivos uma linguagem “simples” deveria expor.
- Não há consenso: alguns argumentam que um único construto (por exemplo, channels) deveria bastar; outros citam evidências de Go e outros ecossistemas de que múltiplos primitivos continuam amplamente usados.
Reflexões sobre Wirth e o Contexto Histórico
- Muitos expressam admiração pela ênfase em simplicidade, compiladores pequenos e co-design estreito entre hardware e software.
- Alguns argumentam que Wirth podia focar na simplicidade por causa das restrições e do ritmo mais lento de sua época; outros rejeitam fortemente isso e veem seu trabalho como ainda relevante e subutilizado.