Cópia estática
Copiado de docs/decisions/adp-012.md em https://github.com/poppy-team/aipo-lang (MIT). Fixado na revisão ce47c4e070404fc41722ccd8e2b7b808b99062a8, blob 2dc37c8330635a96b2c00a858ae2d46c0e761e1f. O repositório de origem permanece canônico; esta cópia é atualizada por um pull request de sincronização, não em tempo real.
O Aipo é projetado para minimizar a sobrecarga cognitiva e oferecer uma experiência de desenvolvimento límpida, inclusiva e determinística, especialmente convidativa para desenvolvedores neurodivergentes (com TDAH e dislexia):
var.:) em literais de dicionários e na instanciação de estruturas tipadas, eliminando atrito motor e erros de digitação.{ ... }) fn, struct, impl, if, while, loop, repeat, each, match, attempt, await do) são delimitados por chaves { ... }.if x > 10 { ... }, while ativo { ... }, each item in lista { ... }.struct, todos os campos são estritamente imutáveis por padrão. Basta declarar o identificador do campo (id, criado_em).var: var status = "offline".var é rejeitada estaticamente pelo compilador (AIPO_SEM_IMMUTABLE_FIELD_REASSIGN).:) StructName{ campo: valor, ... }, em total simetria com literais de dicionário { "chave": valor }.var self impl, o receptor self sem anotação é estritamente somente-leitura (self).var self: fn incrementar(var self) { ... }.var é a palavra universal e suficiente para indicar mutabilidade.interface é estrutural e automática. Se uma estrutura implementa os métodos exigidos com assinaturas compatíveis (aridade, parâmetros, retornos e compatibilidade de self/var self), ela satisfaz a interface de forma transparente.// e //=) // e //=, preservando harmonia simbólica com +, -, *, /.loop { ... } (infinito), while c { ... } (condicional), repeat n { ... } (contagem finita) e each x in col { ... } (iteração sobre coleções).| Diretriz Canônica | Sintaxe Canônica | Benefício Cognitivo & Ergonômico |
|---|---|---|
| Blocos Estruturados | if c { ... }, fn f() { ... } | Delimitação inequívoca com suporte nativo a rainbow brackets e folding |
| Imutabilidade em Structs | struct User { id, var status } | Imutabilidade por padrão; mutabilidade requer intenção explícita com var |
| Instanciação Simétrica | User{ id: "1", name: "Ana" } | Simetria motora e visual perfeita com literais de dicionário { k: v } |
| Receptor Mutador | fn inc(var self) { ... } | Unificação semântica: var é a palavra universal de mutabilidade |
| Interfaces Formais | interface Drawable { ... } | Subtipagem puramente estrutural sem cerimônias ou acoplamento artificial |
| Divisão Inteira | a // b, a //= b | Consistência matemática e simetria com outros operadores aritméticos |
aipo-lexer: Fornece os tokens SlashSlash (//), SlashSlashEq (//=), chaves { e } e palavras-chave canônicas.aipo-syntax: Faz o parse recursivo de blocos com chaves, campos imutáveis por padrão, var explícito, e instanciação de structs com :.aipo-sema: Realiza checagem estática de tipos, verificação de imutabilidade de campos, conformidade estrutural com interfaces e validação de var self.aipo-formatter: Garante formatação idempotente com indentação de 4 espaços e alinhamento canônico de chaves.aipo-vm & aipo-wasm & aipo-js: Emitem e executam código correspondente de forma 100% idêntica e determinística.