chore(benchmarks): runners em bash para Linux/macOS e primeiro cross-runtime em Ubuntu - #141
Merged
Merged
Conversation
…runtime em Ubuntu Porta os três runners PowerShell para bash com o mesmo protocolo e a mesma saída: `run_benchmarks.sh` (suíte por binário, mediana), `interleaved_compare.sh` (dois binários intercalados, guard de CHECKSUM, benches sem equivalência pulados e listados) e `cross_runtime/run_cross_runtime.sh` (Noxy × CPython × Lua × Go, mínimo de N, coluna `--noxy-baseline` na mesma janela, líquido e razões). Números saem com ponto decimal fixo (`LC_NUMERIC=C`). `run_benchmarks.sh` pula e lista bench sem linha CHECKSUM em vez de abortar, como o intercalado já faz: hoje `bench_bst_owned`/`bench_bst_ref` não compilam na v0.25.0 (construtor com `null` em campo não-anulável) e `bench_hash31_bytes` nunca imprimiu CHECKSUM — o `.ps1` aborta no primeiro deles. Adiciona `cross_runtime/results/2026-09-05-v0250-ubuntu.md`: primeira medição em Linux (Ubuntu 26.04, CPython 3.14.4 do pacote, Go 1.27.1). As razões noxy/python são piores que as do Windows (fib 1,16x → 1,80x) porque o build gcc + PGO/LTO do CPython no Linux é mais rápido que o build MSVC; o Noxy rende igual nos três binários disponíveis. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013tLpxkXEQZgrHZaQdAj1c7
… hash31
Os dois benches BST ainda declaravam campo e parâmetro com `T` nu e passavam
`null`, o que a spec §2.4 rejeita desde a regra de nulabilidade ("expected
TreeNode, got null"). Seguem agora o idioma da spec §3 "Self-Reference":
- bst_owned: `esquerda/direita: TreeNode?`, `ref (TreeNode?)` ao slot em
`insert`/`count`, `let raiz: TreeNode? = null`. Em `count`, o narrowing de
`*node` não sobrevive à chamada recursiva com raiz `ref`, então o primeiro
`count(ref node.esquerda)` é vinculado a um `let` e `*node` é testado de
novo antes do segundo empréstimo — exatamente o hint do compilador.
- bst_ref: `esquerda/direita: ref TreeNode?`, `count(node: ref TreeNode?)`
vincula `let n: ref TreeNode = node` uma vez, como em noxy_examples/bst.nx.
Tempos na mesma máquina (667 ms / 211 ms) ficam na ordem dos publicados no
RESULTS.md (565–780 / 217): o caminho medido é o mesmo.
bench_hash31_bytes nunca imprimiu CHECKSUM; ganha a linha para entrar nos
runners sem ser pulado.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013tLpxkXEQZgrHZaQdAj1c7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O quê
Os runners de benchmark do repo eram só PowerShell; numa instalação limpa de Ubuntu sem
pwshnão dava para reproduzir nada. Este PR adiciona os mesmos três runners em bash, com o mesmo protocolo e a mesma saída, registra a primeira medição do cross-runtime em Linux e conserta os três benches da suíte que não entravam nos runners.benchmarks/run_benchmarks.sh— suíte completa por binário, mediana de N, gravaresults/<label>.md.benchmarks/interleaved_compare.sh— dois binários intercalados na mesma janela, guard de CHECKSUM, benches sem equivalência pulados e listados, gravaresults/interleaved.md.benchmarks/cross_runtime/run_cross_runtime.sh— Noxy × CPython × Lua × Go, mínimo de N,--noxy-baselinecomo coluna extra na mesma janela, tabela líquida e razões, gravaresults/cross_runtime.md.benchmarks/cross_runtime/results/2026-09-05-v0250-ubuntu.md— v0.25.0 em Ubuntu 26.04 (CPython 3.14.4 do pacote, Go 1.27.1), duas rodadas de 9.cross_runtime/README.md, seção Reprodução doRESULTS.mde a linha de benchmarks doAGENTS.md.Diferenças deliberadas em relação aos
.ps1:--noxy,--runs) em vez de parâmetros PowerShell.LC_NUMERIC=C) independente do locale.run_benchmarks.shpula e lista bench sem CHECKSUM em vez de abortar, como o intercalado já faz.Benches consertados (segundo commit)
bench_bst_owned.nxebench_bst_ref.nxnão compilavam na v0.25.0: declaravam campo e parâmetro comTnu e passavamnull(expected TreeNode, got null). Agora seguem o idioma da spec §3 "Self-Reference": camposTreeNode?/ref TreeNode?,ref (TreeNode?)ao slot eminsert/count,let raiz: TreeNode? = null. Emcountdo owned, o narrowing de*nodenão sobrevive à chamada recursiva com raizref, então o primeiro resultado é vinculado a umlete*nodeé testado de novo antes do segundo empréstimo, como o próprio compilador sugere. Tempos na mesma máquina (667 ms / 211 ms) ficam na ordem dos publicados noRESULTS.md(565–780 / 217): o caminho medido é o mesmo.bench_hash31_bytes.nxnunca imprimiu CHECKSUM; ganha a linha para entrar nos runners.Com isso, os 18 benches da suíte imprimem CHECKSUM na v0.25.0.
Cross-runtime em Linux
Razões noxy/python piores que no Windows (
fib1,16x → 1,80x,loop_arith1,06x → 1,28x,string_ops2,17x → 3,07x). O que mudou de lado foi o CPython (build gcc + PGO/LTO do Debian/Ubuntu contra o build MSVC), não o Noxy: os três binários disponíveis deram o mesmofib. Piso de processo: noxy 3 ms, python 10 ms.Verificação
bash -nnos três scripts.--noxy-baseline, suíte com 3 runs, intercalado com 3 runs); checksums batem entre noxy, python e go em todos os benches.🤖 Generated with Claude Code
https://claude.ai/code/session_013tLpxkXEQZgrHZaQdAj1c7