Benchmarks en Go
b.Loop en Go 1.24 reemplazó el bucle b.N, y evita que el optimizador haga trampa.
func Join(parts []string) string {
var b strings.Builder
for i, part := range parts {
if i > 0 {
b.WriteString(",")
}
b.WriteString(part)
}
return b.String()
}
func BenchmarkJoin(b *testing.B) {
parts := strings.Split(strings.Repeat("step,", 50), ",")
b.ReportAllocs()
for b.Loop() {
_ = Join(parts)
}
}
func BenchmarkStdlibJoin(b *testing.B) {
parts := strings.Split(strings.Repeat("step,", 50), ",")
for b.Loop() {
_ = strings.Join(parts, ",")
}
}
Cómo funciona
for b.Loop()corre el cuerpo las veces necesarias para que signifique algo.b.ReportAllocsagrega asignaciones por operación.- La preparación antes del bucle no se cronometra.
Palabras clave y builtins usados aquí
forfuncifrangereturnstringvar
El intento, en números
- Líneas
- 26
- Caracteres a escribir
- 452
- Tokens
- 142
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 77 segundos.
Paso 1 de 3 en Medir y generar; paso 8 de 13 en Pruebas.