2. Limites nativos e evidências de desempenho
Uma função externa é um contrato de ABI. Faça corresponder convenção de chamada, largura, layout, propriedade e falhas. Envolva-a em um módulo Flecha pequeno para que o restante use valores tipados comuns. Torne entradas nativas explícitas e qualifique cada alvo compatível.
Para desempenho, comece por uma carga representativa e saída estável. Meça builds nativos otimizados, inspecione LLVM para checks de limites e overflow e perfile alocações antes de mudar o código. Índices constantes ou comprovadamente seguros podem perder checks; variáveis devem manter o contrato. Nunca enfraqueça um check para vencer um microbenchmark.
Leia funções externas, geração LLVM e a linha de base v0.3.
Exemplo testado
Mantenha workload e status de saída fixos antes de inspecionar saída nativa otimizada ou LLVM.
Arquivo: curriculum/main-evidence/single/llvm_poc.fl
i32 add(i32 left, i32 right) { return left + right;}
i32 main() { x := 20; y := 22; return add(x, y);}O bloco acima é o arquivo completo executado pelos comandos abaixo.
O workload pequeno e determinístico fornece um status estável antes da inspeção de LLVM ou código nativo. Ele serve como evidência para inspeção de codegen, não como conclusão de desempenho por si só.
Comandos
flecha check curriculum/main-evidence/single/llvm_poc.flflecha build curriculum/main-evidence/single/llvm_poc.fl -o build/llvm_pocbuild/llvm_pocSaída esperada
(stdout vazio)status de saída: 42Referência relacionada: /examples/llvm_poc/.