{"schemaVersion":"2.0.0","locale":"en","title":"Array used as a growing shifting FIFO","description":"Rule ID: performance.array-fifo-shifts@1.0.0. Availability below refers to source-scan at product 524fa07e.","htmlUrl":"https://docs.swift-analyzer.com/catalog/performance.array-fifo-shifts/","markdownUrl":"https://docs.swift-analyzer.com/catalog/performance.array-fifo-shifts/index.md","productRevision":"524fa07e0ae4153c84ac12ae9eb6559df89ec2be","catalogRevision":"4558458d","docsRevision":"1f17ba58ab08627e0de898f1442067b09e960b48cd5605d6529e9275f8930d68","channel":"pre-prod","maturity":"experimental","access":"owner-provided-checkout","markdown":"# Array used as a growing shifting FIFO\n\nRule ID: performance.array-fifo-shifts@1.0.0. Availability below refers to source-scan at product 524fa07e.\n\n## V-PERF-04 — Array used as a growing shifting FIFO\n\nArray used as a growing shifting FIFO. It examines repeated work, allocation, traversal, retention, and scheduling cost.\n\n### Availability\n\nNot available in source-scan. There is no source-scan flag to activate this condition.\n\nA separate [experimental source preview](https://docs.swift-analyzer.com/guides/experimental/) recognizes a limited local pattern for this condition:\n\n```text\n\"$ANALYZER\" experimental-scan <path> --rule performance.array-fifo-shifts --format json\n```\n\nUse the terminal from [Installation](https://docs.swift-analyzer.com/get-started/installation/), with ANALYZER set, and replace `<path>` with a Swift file or directory. This preview is not compiler-backed source-scan coverage.\n\n### Example and action\n\nIllustrative pattern only. This is not a complete runnable package or a reproduced source-scan result. Helper APIs and omitted context must be supplied by the application.\n\n```swift\nwhile !queue.isEmpty {\n    process(queue.removeFirst())\n}\n```\n\nHead-index traversal avoids repeated front shifts, but it leaves queue populated and retains processed elements until the storage is released. It is suitable only when those changed postconditions are acceptable. If callers require an emptied queue or prompt release of each element, use an appropriate bounded queue representation instead and measure peak retention. Preserve ordering and mutation behavior during process.\n\n```swift\nvar head = 0\nwhile head < queue.count {\n    process(queue[head])\n    head += 1\n}\n```\n\n### Intended analysis\n\nIntended reasoning: Relate a repeated operation to its input size, consumption and cost assumptions. An intended cost warning needs the loop bounds and actual collection behavior; syntax alone is not a measured runtime regression. Required evidence: cost, multiplicity, collection, allocation, and lifetime facts\n\n### Assumptions and unknown\n\nThe relevant facts must be admitted for the selected immutable build world. Unknown aliases, external effects, unsupported source forms or incomplete consumers can prevent a conclusion. Availability in this workflow is stated above; the illustration does not expand that availability.\n\n### Evidence and interpretation\n\nThe target catalog describes the intended condition. It is not evidence of an active source-scan diagnostic.\n\nHistorical evidence at 4558458d: recovery-required (historical qualification is incomplete and needs further evidence). That evidence has not been requalified for this product revision.\n\n[How we validate checks](https://docs.swift-analyzer.com/concepts/validation/) explains the evidence boundary. [Foundations](https://docs.swift-analyzer.com/concepts/foundations/) separates method assumptions from implementation claims.\n","anchors":["array-used-as-a-growing-shifting-fifo","V-PERF-04","availability","example-and-action","intended-analysis","assumptions-and-unknown","evidence-and-interpretation"]}
