Gasto en comida este mes

Gana FxDart

Requisito

Dado un mes de transacciones del libro de cuentas —cada una con fecha, categoría, comercio e importe—, suma lo que se gastó en la categoría Food e imprímelo como un importe monetario. Los datos están en el código de abajo; las dos versiones deben imprimir la línea que aparece bajo Salida esperada.

Salida esperada
Food spending: $84.40

Lado a lado

Dart nativo

FxDart

Por qué difieren

Dart nativo no tiene una «suma de un campo»: o mutas un acumulador dentro de un bucle for, o recurres a fold con un valor inicial y un paso de combinación explícitos. El sumBy de FxDart dice la intención en una sola palabra, y la cadena filter → sumBy se lee en el mismo orden en que fluyen los datos. La distancia es pequeña en una tarea de dos pasos —se ensancha conforme se añaden pasos.

Benchmark

Apple M1 Max, 32 GB de RAM · Dart 3.12.2 (compilado AOT) · 2026-08-24

N = 100

Tiempo Empate

Dart nativo 1.2 µs
FxDart 833 ns

Memoria pico Empate

Dart nativo 16.5 MB
FxDart 16.5 MB

N = 10,000

Tiempo Empate

Dart nativo 147 µs
FxDart 100 µs

Memoria pico Gana FxDart

Dart nativo 17.0 MB
FxDart 15.6 MB

N = 1,000,000

Tiempo Gana FxDart

Dart nativo 12.6 ms
FxDart 11.4 ms

Memoria pico Gana FxDart

Dart nativo 91.0 MB
FxDart 85.1 MB

Las barras son medianas de iteraciones cronometradas repetidas en procesos nuevos por lado (los N pequeños se agrupan por resolución del temporizador). Dos lados a menos del 5% entre sí — o a menos de 0.6 ms, una diferencia que nadie puede percibir — cuentan como empate; las carreras relativas ajustadas se vuelven a medir hasta 5 veces. En una app, cualquier cosa por debajo de unos pocos milisegundos es invisible para el usuario, gane la barra que gane. La memoria es el RSS pico del proceso. La VM de Dart y el dataset son idénticos en ambos lados, así que la diferencia entre las dos barras es lo que retiene el pipeline en sí.