Skip to content
EN

Cópia estática

Copiado de docs/decisions/adp-011.md em https://github.com/poppy-team/aipo-lang (MIT). Fixado na revisão ce47c4e070404fc41722ccd8e2b7b808b99062a8, blob 5b28735fbe630b55cc46e987e5d0e8f28b4b567d. O repositório de origem permanece canônico; esta cópia é atualizada por um pull request de sincronização, não em tempo real.

ADP-011 — Roteiro de Performance Estrutural e Ergonomia ​

  • Status: Aprovado
  • Data: 2026-09-26
  • Decisores: Poppy Team
  • Fase: Planejamento Pós-v0.1.0 / Evolução Arquitetural

Contexto e Diagnóstico ​

Durante a fase P04 e início de P05, sete experimentos locais de micro-otimização falharam em produzir ganhos reprodutíveis e foram devidamente revertidos.

A auditoria arquitetural 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 estruturais em computação aritmética e despacho de métodos.


Decisões Arquiteturais de Performance ​

  1. Compactação de Value para 16/24 Bytes:

    • Reduzir o tamanho de Value 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.
  2. Fusão de Invocação de Método (InvokeMethod):

    • Compilar chamadas diretas expr.method(args...) como o opcode fundido InvokeMethod (em vez de GetField + Call), eliminando 200.000 alocações efêmeras de BoundMethod.
  3. Laço de Despacho com Variáveis Hoisted:

    • Integrar o laço de execução contínuo com variáveis locais em registradores de CPU (ip, stack_base, code).
  4. Superinstruções e Especialização:

    • Variantes especializadas Call0..Call4 e GetLocal0..GetLocal3 sem operandos extras.

Decisões de Ergonomia de Linguagem ​

  1. Falhas Estruturadas (Model B+): Permitir que fail aceite qualquer valor ou instância de struct como payload da falha com inspeção tipada.
  2. Pattern Matching & Destructuring: Introduzir a expressão match expr com desestruturação de estruturas e coleções.
  3. Type Narrowing Estático: Refinamento sensível ao fluxo em aipo-sema para elidir asserções dinâmicas redundantes.