Los últimos tres errores
Requisito
Del log del servicio de esta mañana, quédate solo con las líneas
ERROR e imprime las tres últimas, la más
antigua primero. Los datos están en el código; las dos versiones deben
imprimir las líneas que aparecen bajo Salida esperada.
Salida esperada
ERROR timeout contacting registry ERROR registry unreachable ERROR checksum mismatch on chunk 7
Lado a lado
RxDart
FxDart
Por qué difieren
«Las tres últimas» tiene un coste estructural que ningún operador
puede esquivar: no puedes saber que un elemento está entre los tres
últimos hasta haber visto el final. Por eso ambos lados
almacenan — una ventana de tres huecos en la que cada
nuevo error entra empujando y de la que el más antiguo cae — y ambos
la vuelcan solo cuando la fuente termina. El takeLast de
RxDart no emite nada hasta que llega el evento done; el
takeRight de FxDart mantiene la misma ventana mientras
drena el iterable hasta el agotamiento. El mismo algoritmo,
ajustado a la palabra de cada modelo para «no hay más elementos».
Aguas arriba de eso, where y filter son
intercambiables. La única nota de modelo que merece hacerse: en un
stream sin límite takeLast no emite jamás — «las tres
últimas» solo tiene sentido para fuentes que terminan, territorio
nativo para un iterable finito y un caso especial para un stream. En
este log acotado ambos expresan el trabajo directamente, así que el
veredicto es un empate.
Benchmark
N = 100
Tiempo Empate
Memoria pico Empate
N = 1,000,000
Tiempo Gana FxDart
Memoria pico Empate
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í.