Alinea el pronóstico con los datos reales

Empate

Requisito

Un pronóstico de temperatura a cinco días está junto a lo que el sensor midió realmente. Empareja las dos series posición a posición e imprime una línea por día: pronóstico, real y la diferencia con signo a un decimal. Los datos están en el código; las dos versiones deben imprimir las líneas que aparecen bajo Salida esperada.

Salida esperada
day 1: 21.0 forecast vs 20.6 actual (-0.4)
day 2: 22.5 forecast vs 23.1 actual (+0.6)
day 3: 23.0 forecast vs 23.0 actual (+0.0)
day 4: 24.5 forecast vs 25.2 actual (+0.7)
day 5: 22.0 forecast vs 21.4 actual (-0.6)

Lado a lado

RxDart

FxDart

Por qué difieren

El emparejado posicional es simétrico entre los modelos y ambas bibliotecas lo traen: zipWith combina el enésimo evento de un stream con el enésimo de otro, zip empareja los enésimos tirones de dos iterables. Ambos se detienen en el lado más corto, ambos conservan el orden por construcción. La función de formateo se comparte literalmente, así que los paneles difieren solo en cómo las dos series se elevan a un pipeline.

Los modelos sí esconden maquinaria distinta bajo el nombre compartido. El zipWith de stream es un pequeño motor de coordinación: dos suscripciones vivas, un búfer de un hueco para el lado que vaya por delante, y pausa/reanudación para impedir que un productor rápido desborde a uno lento. El zip de iterables son dos iteradores avanzados al unísono — el tirón del consumidor es la sincronización, así que no hay nada que almacenar y nadie a quien pausar. Con dos listas fijas nada de esa maquinaria llega a ejercitarse, y exactamente por eso este es un empate: elige la versión que coincida con el lugar donde tus series viven de verdad.

Benchmark

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

N = 100

Tiempo Empate

RxDart 88 µs
FxDart 46 µs

Memoria pico Empate

RxDart 16.6 MB
FxDart 16.4 MB

N = 1,000,000

Tiempo Gana FxDart

RxDart 799.0 ms
FxDart 461.3 ms

Memoria pico Empate

RxDart 206.6 MB
FxDart 215.4 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í.