Cópia estática
Copiado de docs/adp/ADP-011-performance-and-ergonomics-roadmap.md em https://github.com/poppy-team/aipo-lang (MIT). Fixado na revisão ce47c4e070404fc41722ccd8e2b7b808b99062a8, blob 92aba6d6877067e15c88e821922ed10bb5807d29. O repositório de origem permanece canônico; esta cópia é atualizada por um pull request de sincronização, não em tempo real.
Status: accepted Date: 2026-09-26 Related: docs/performance/baseline.md, docs/performance/cross-language.md, docs/adp/ADP-008-v0.1.0-language-release.md, crates/aipo-vm/, crates/aipo-bytecode/Authority: subordinate ao canon; define a estratégia arquitetural de médio e longo prazo para superação dos gargalos de performance e evolução ergonômica da linguagem Aipo.
Durante a fase P04 e início de P05, sete experimentos locais de micro-otimização (pool de nomes, layout denso com 2 vetores, cache de flags fixed por slot, cache de tipos guarded, cache de metadata de métodos) falharam em produzir ganhos reprodutíveis e foram revertidos.
A auditoria arquitetural aprofundada comprovou que o interpretador da Aipo opera com um piso estrutural de custo por opcode de ~100ns (~300 ciclos de CPU). Micro-otimizações locais são incapazes de transpor esse piso. Medições comparativas com Wren 0.4.0 e Luau 0.739 revelaram gaps entre 7x e 22x em computação aritmética e entre 10x e 14x em acesso a campos e despacho de métodos.
Adicionalmente, no aspecto ergonômico, a linguagem carece de falhas tipadas estruturadas (atualmente restritas a mensagens de texto plano), pattern matching com desestruturação e refinamento de tipo (type narrowing) estático.
Value para 16/24 Bytes Value. A variante Value::Native passa a usar Rc<NativeData> ou índice de catálogo, e Value::Function utiliza inteiros compactos (u32 para entry_ip, u16 para arity).Value cai de 48 bytes para 16 a 24 bytes, reduzindo a pressão de banda de memória em até 66% e quadruplicando a densidade de valores por cache line L1.InvokeMethod) expr.method(args...) como um opcode fundido InvokeMethod, em vez da sequência GetField + Call.Rc<BoundMethodData> observadas no workload fields.self.step() por instrução, promovendo ponteiros críticos (ip, stack_base, code) a variáveis locais registradas pela CPU.Call0..Call4 e GetLocal0..GetLocal3 sem bytes extras de operando, aumentando a densidade do bytecode e reduzindo ciclos de decodificação.fail aceite qualquer valor ou instância de struct como payload da falha, preservando o rollback automático de invariantes e estendendo attempt ... failed err para inspeção tipada (if err is MyError).match expr com desestruturação estrutural de structs, listas/tuplas e tipos primitivos.aipo-sema is, elidindo a emissão de instruções AssertContract em runtime quando o tipo for garantido em tempo de compilação.Todas as implementações decorrentes desta ADP devem:
scripts/perf/paired.sh sob metodologia de tempo de CPU (cpu_ab.py) com múltiplos lotes.aipo-js).