mirror of
https://github.com/apple/swift.git
synced 2026-06-20 15:42:51 +02:00
44 lines
1.5 KiB
Markdown
44 lines
1.5 KiB
Markdown
# Performance Hints (PerformanceHints)
|
|
|
|
## Overview
|
|
|
|
The `PerformanceHints` diagnostic group provides opt-in guidance for identifying
|
|
language constructs and code patterns that carry non-obvious runtime performance
|
|
costs. The diagnostics are intended to help developers writing
|
|
performance-critical code make informed decisions about the abstractions they
|
|
use and to surface hidden costs that may not be apparent from the source code
|
|
alone to a non-expert Swift programmer.
|
|
|
|
This diagnostic group is **off by default**. It can be enabled as warnings with
|
|
`-Wwarning PerformanceHints`, or escalated to errors with `-Werror
|
|
PerformanceHints`.
|
|
|
|
## Sub-groups
|
|
|
|
The `PerformanceHints` group contains the following sub-groups, each of which
|
|
can also be enabled or controlled independently:
|
|
|
|
- <doc:existential-type>: Warns on use of existential types (`any Protocol`),
|
|
which incur heap allocation, reference counting, exclusivity enforcement, and
|
|
dynamic dispatch overhead.
|
|
|
|
- <doc:return-type-implicit-copy>: Warns when functions or closures return
|
|
`Array` or `Dictionary` values, which leads to implicit heap-allocated copies
|
|
of the collections.
|
|
|
|
- <doc:untyped-throws>: Warns on untyped `throws` declarations, where the use of
|
|
`any Error` incurs a heap allocation on each `throw`.
|
|
|
|
For example, to enable only the `UntypedThrows` checks as warnings:
|
|
|
|
```
|
|
-Wwarning UntypedThrows
|
|
```
|
|
|
|
Or to enable all performance hints as errors but keep `UntypedThrows` as a
|
|
warning:
|
|
|
|
```
|
|
-Werror PerformanceHints -Wwarning UntypedThrows
|
|
```
|