Los desarrolladores de Rust que buscan realizar microbenchmarks precisos a menudo descubren que las herramientas estándar como Criterion carecen de funciones específicas comunes en el ecosistema de Go. Específicamente, Criterion no rastrea de forma nativa las asignaciones de memoria heap (B/op), carece de una integración estándar con el perfilado pprof y utiliza un modelo de muestreo de rampa lineal que puede introducir varianza y sobrecarga en bucles de nivel de microsegundos. Estas limitaciones dificultan la realización de comparaciones A/B directas entre implementaciones en Rust y Go, o el seguimiento de regresiones de rotación de memoria a través de diferentes commits.

Para cerrar esta brecha, Bartek Płotka desarrolló benchfmt.rs, un ejecutor de benchmarks en Rust sin dependencias y un convertidor de Criterion. La herramienta imita el marco `testing.B` de Go al proporcionar un contador de asignaciones de memoria heap local al hilo (CountingAlloc) e integración con el perfilador pprof. Admite la nomenclatura de sub-benchmarks `/key=value`, lo que permite que la herramienta `benchstat` basada en Go pivote a través de diferentes dimensiones, como el lenguaje o el tamaño de la muestra. Para proyectos existentes, un convertidor puede tomar la salida de Criterion y emitir el formato `benchfmt` compatible con Go, permitiendo el uso de `benchstat` para cálculos de mediana resistentes a valores atípicos y pruebas U de Mann-Whitney.

Un gráfico promocional para el proyecto benchfmt.rs que muestra su integración con el flujo de trabajo de benchmarking de Go.
El proyecto benchfmt.rs tiene como objetivo traer la telemetría de benchmarking estilo Go al ecosistema de Rust.www.bwplotka.dev

Esta imagen sirve como el recurso visual principal para la herramienta benchfmt.rs, que replica el ecosistema de benchmarking de Go para los desarrolladores de Rust.

La herramienta ofrece diferentes caminos dependiendo de las necesidades del usuario. El ejecutor `benchfmt::Suite` está destinado a nuevos microbenchmarks donde se requieren datos precisos de memoria heap y perfiles, ya que captura archivos `-cpuprofile` y `-memprofile` de ámbito definido. Por el contrario, el convertidor de CLI `benchfmt` es ideal para repositorios que ya utilizan Criterion y simplemente necesitan generar tablas `benchstat` sin modificar el código de benchmark subyacente. Si bien Criterion sigue siendo el estándar para gráficos HTML y SVG integrados, benchfmt.rs proporciona la telemetría específica —como bytes de memoria heap por operación y recuentos de asignación— necesaria para una ingeniería de rendimiento de alta fidelidad.

Una distinción técnica es el modelo de muestreo. Criterion utiliza por defecto 100 muestras de rampa lineal, lo que puede inflar la varianza y añadir sobrecarga de tiempo. En contraste, benchfmt.rs imita las épocas de estado estacionario de Go, donde un recuento de iteraciones fijo se calibra para una ventana de tiempo específica (por ejemplo, 2 segundos) y se repite en ejecuciones independientes. Esto proporciona resultados más fiables para operaciones muy rápidas donde las interrupciones de sobrecarga del temporizador podrían sesgar los resultados. Sin embargo, debido a que el convertidor aproxima estas épocas agrupando el array de muestras de Criterion, los resultados son una aproximación del modelo de estado estacionario en lugar de una replicación perfecta del comportamiento interno del tiempo de ejecución de Go.