Toma hasta el marcador de apagado, inclusive

Empate

Requisito

El feed de eventos de esta noche contiene un marcador SHUTDOWN; todo lo que viene después pertenece a la siguiente ejecución y no debe aparecer en el informe. Conserva cada evento hasta el marcador, este incluido, e imprime cada uno como una línea event:. El feed está en el código; las dos versiones deben imprimir las líneas que aparecen bajo Salida esperada.

Salida esperada
event: boot
event: listen :8080
event: GET /orders
event: GET /health
event: SIGTERM
event: drain connections
event: SHUTDOWN

Lado a lado

RxDart

FxDart

Por qué difieren

El takeWhile corriente tiene un problema de off-by-one para este trabajo: el elemento que rompe el predicado es exactamente el que todavía quieres. Ambas bibliotecas traen el arreglo inclusivo, escrito desde extremos opuestos — el takeWhileInclusive de RxDart sigue mientras no sea el marcador, el takeUntilInclusive de FxDart (el takeUntil de FxTS, renombrado por claridad en Dart) se detiene en el marcador. El mismo corte, con el predicado invertido.

Los modelos hasta coinciden en lo que pasa después. Tras emitir el marcador, RxDart cancela la suscripción aguas arriba, así que los dos eventos rezagados nunca se entregan; FxDart simplemente deja de tirar, así que nunca se producen. Como en la búsqueda de presupuesto de la Parte 1, cancelación y demanda son las palabras de los dos modelos para la misma economía — nada aguas abajo puede saber qué modelo había debajo. Empate, y una pareja de traducción útil que conviene conocer al mover código entre los dos.

Benchmark

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

N = 100

Tiempo Empate

RxDart 23 µs
FxDart 8.0 µs

Memoria pico Empate

RxDart 16.5 MB
FxDart 16.4 MB

N = 1,000,000

Tiempo Gana FxDart

RxDart 182.6 ms
FxDart 104.4 ms

Memoria pico Gana RxDart

RxDart 186.8 MB
FxDart 196.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í.