Totales semanales de una serie diaria

Gana FxDart

Requisito

Tres semanas de gasto diario (del 1 al 21 de agosto, guardado en centavos) se enrollan en una línea por semana: week n: $total, con el total convertido a dólares a dos decimales. Los 21 importes están en el código; las dos versiones deben imprimir las tres líneas que aparecen bajo Salida esperada.

Salida esperada
week 1: $83.50
week 2: $89.95
week 3: $91.75

Lado a lado

RxDart

FxDart

Por qué difieren

El ventaneo en sí queda en tablas: bufferCount(7) y chunk(7) son el idioma idéntico para la misma ventana fija, y ambos emitirían una ventana final corta si 21 no dividiera exacto. El trabajo se parte en numerar las ventanas. RxDart no tiene operador con índice, así que la jugada idiomática es reclutar a scan como contador — un record acumulador cuyo único papel es llevar week + 1 junto al búfer. Funciona, pero el fold es un espectador vestido con la ropa de un operador de estado.

El lado pull tiene una palabra hecha a propósito: zipWithIndex empareja cada chunk con su posición de forma perezosa, sin acumulador a la vista, y sumBy pliega los centavos de cada semana a dólares en el mismo gesto. Ese es el patrón recurrente del tier 2 — ambos modelos ventanean bien los datos finitos, pero el vocabulario pull es más ancho exactamente donde la contabilidad (índices, claves, agregados parciales) se encuentra con la ventana. Un operador reutilizado contra uno pensado para esto: el veredicto se lo lleva FxDart.

Benchmark

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

N = 98

Tiempo Empate

RxDart 79 µs
FxDart 3.9 µs

Memoria pico Empate

RxDart 17.0 MB
FxDart 16.5 MB

N = 999,999

Tiempo Gana FxDart

RxDart 652.7 ms
FxDart 41.6 ms

Memoria pico Gana RxDart

RxDart 58.1 MB
FxDart 80.8 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í.