typestar

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

  1. for b.Loop() corre el cuerpo las veces necesarias para que signifique algo.
  2. b.ReportAllocs agrega asignaciones por operación.
  3. La preparación antes del bucle no se cronometra.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 3 en Medir y generar; paso 8 de 13 en Pruebas.

← Anterior Siguiente →