Saldo acumulado de un feed de depósitos
Requisito
Una cuenta abre a cero y recibe siete movimientos — depósitos en positivo, retiradas en negativo. Imprime el saldo tras cada movimiento, una línea por paso. Los datos están en el código; las dos versiones deben imprimir las líneas que aparecen bajo Salida esperada.
Salida esperada
Balance: 250 Balance: 170 Balance: 290 Balance: 250 Balance: 750 Balance: 430 Balance: 520
Lado a lado
RxDart
FxDart
Por qué difieren
Apenas difieren. El estado acumulado es un fold con sus pasos
intermedios expuestos, y ambas bibliotecas llaman a ese fold
scan — RxDart como transformador de stream, FxDart como
operador perezoso portado del mismo linaje Rx. Una acumulación por
movimiento, en orden, en ambos lados.
Las diferencias visibles son detalles de cadencia, no de modelo. El
scan de RxDart toma una semilla y emite un valor por
evento (su acumulador recibe además un índice); el scan
con semilla de FxDart sigue a FxTS y produce primero la semilla misma,
así que el panel usa el scan1 sin semilla — para un saldo
que abre a cero, cada suma parcial es el saldo, y las dos
cadencias encajan exactamente. Más allá de eso, el único residuo es la
entrega: la versión stream recolecta a través de un main
async, la versión pull es una sola cadena síncrona. Un
empate justo — ambos lados dicen el requisito con un único operador.
Benchmark
N = 100
Tiempo Empate
Memoria pico Empate
N = 1,000,000
Tiempo Gana FxDart
Memoria pico Gana RxDart
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í.