일별 시리즈에서 주간 합계

FxDart 승

요구사항

3주치 일별 지출(8월 1–21일, 센트 단위로 저장)이 주당 한 줄로 말려 올라갑니다: week n: $total, 합계는 소수점 두 자리 달러로 환산합니다. 21개의 금액은 아래 코드에 있으며, 두 버전 모두 예상 출력 아래에 표시된 세 줄을 출력해야 합니다.

예상 출력
week 1: $83.50
week 2: $89.95
week 3: $91.75

나란히 보기

RxDart

FxDart

차이가 나는 이유

윈도잉 자체는 차이가 없습니다: bufferCount(7)chunk(7)은 같은 고정 윈도우에 대한 동일한 관용구이고, 21이 나누어떨어지지 않았다면 둘 다 짧은 꼬리 윈도우를 내보냈을 것입니다. 작업은 윈도우에 번호 매기기에서 갈라집니다. RxDart에는 인덱스 연산자가 없으므로, 관용적인 수는 scan을 카운터로 차출하는 것입니다 — 유일한 역할이 버퍼 옆에 week + 1을 실어 나르는 것뿐인 누산기 레코드. 동작은 하지만, 그 fold는 상태 연산자의 옷을 입은 구경꾼입니다.

pull 쪽에는 그 목적을 위해 만들어진 단어가 있습니다: zipWithIndex가 각 청크를 그 위치와 지연 방식으로 짝짓고 — 누산기는 어디에도 없습니다 — 같은 호흡에 sumBy가 각 주의 센트를 달러로 접어 냅니다. 이것이 반복되는 티어 2 패턴입니다 — 유한 데이터의 윈도잉은 두 모델 모두 잘하지만, 부기(인덱스, 키, 부분 집계)가 윈도우와 만나는 바로 그 지점에서 pull 어휘가 더 넓습니다. 용도 변경된 연산자 하나 대 의도된 연산자 하나: 판정은 FxDart에게 갑니다.

벤치마크

Apple M1 Max, RAM 32 GB · Dart 3.12.2 (AOT 컴파일) · 2026-08-18

N = 98

시간 무승부

RxDart 79 µs
FxDart 3.9 µs

최대 메모리 무승부

RxDart 17.0 MB
FxDart 16.5 MB

N = 999,999

시간 FxDart 승

RxDart 652.7 ms
FxDart 41.6 ms

최대 메모리 RxDart 승

RxDart 58.1 MB
FxDart 80.8 MB

막대는 사이드별로 새 프로세스에서 반복 측정한 중앙값입니다(작은 N은 타이머 해상도를 위해 배치 처리). 두 사이드가 서로 5% 이내이거나 — 사람이 지각할 수 없는 차이인 0.6ms 이내이면 — 무승부로 칩니다. 상대 차이가 근소한 경우는 최대 5회까지 다시 측정합니다. 앱에서는 어느 막대가 짧든 몇 밀리초 이하의 차이는 사용자에게 보이지 않습니다. 메모리는 프로세스 최대 RSS입니다. Dart VM과 데이터셋은 양쪽이 동일하므로, 두 막대의 차이가 곧 파이프라인 자체가 붙들고 있는 양입니다.