Commit Graph

85 Commits

Author SHA1 Message Date
Guillaume Lessard c878730bda [stdlib] switch away from old @lifetime annotations 2026-05-22 18:10:50 -07:00
Guillaume Lessard e4db90b222 [stdlib] improve doc-comments for span and bytes properties 2026-05-07 10:29:01 -07:00
Doug Gregor 453277eb74 Mark the various with* functions as @safe
Functions like withUnsafeBufferPointer are, by themselves, safe to
call. It's only the operations on the unsafe pointers passed into the
closure that are the safety issue.

This was the intent spelled out in SE-0458 but was not fully realized
in the library.

Fixes rdar://174519372.
2026-04-16 22:37:54 -07:00
Guillaume Lessard 56f11c1dbd Merge pull request #86571 from glessard/rdar155660454-array-plus-outputspan-followups
[stdlib] followup to #83657
2026-01-20 15:50:31 -08:00
Guillaume Lessard 6daf99b77a [stdlib] add explicit preconditions 2026-01-15 12:51:54 -08:00
Guillaume Lessard 94f5f2d1f5 [stdlib] doc-comment corrections 2026-01-14 16:44:52 -08:00
Guillaume Lessard e334d9c1de Merge pull request #83657 from glessard/rdar155660454-array-plus-outputspan
[stdlib, SE-0485] Array functions with OutputSpan
2026-01-14 14:30:05 -08:00
Guillaume Lessard 58b0e565f0 [stdlib] preserve items appended until a thrown error 2026-01-13 15:00:49 -08:00
Guillaume Lessard 9e54b6ff3c [stdlib] improve explanatory comment 2025-12-27 19:05:15 -08:00
Guillaume Lessard d9ea401943 [stdlib] consolidate defer blocks 2025-12-27 19:05:15 -08:00
Guillaume Lessard 3330461baa [stdlib] address some repetition 2025-12-27 19:05:15 -08:00
Guillaume Lessard e5147d1e55 [stdlib] tweak availability for SwiftCompatibilitySpan 2025-12-27 19:05:15 -08:00
Guillaume Lessard 08163e96ad [stdlib] fix doc-comment style 2025-12-27 19:05:15 -08:00
Guillaume Lessard dc022a57a6 [stdlib] add SE-0485 ContiguousArray.append with OutputSpan 2025-12-27 19:05:15 -08:00
Guillaume Lessard ccc22ecd01 [stdlib] add SE-0485 Array and ContiguousArray inits 2025-12-27 19:05:15 -08:00
Rick van Voorden 048091d6f2 [stdlib] array identical
Co-Authored-By: Ben Rimmington <me@benrimmington.com>
2025-12-08 17:39:01 -08:00
Guillaume Lessard d1f7140357 [stdlib] apply the legacy ABI pattern to 3 functions 2025-08-12 16:15:13 -07:00
Guillaume Lessard 3a963a6957 [stdlib] generalize Array(unsafeUninitializedCapacity:initializingWith:) 2025-07-25 09:29:19 -07:00
Guillaume Lessard 5d4c445347 [stdlib] some span properties are more available 2025-06-30 17:13:35 -07:00
Guillaume Lessard f97961a86f [stdlib] fix _makeMutableAndUniqueUnchecked() 2025-06-30 16:05:00 -07:00
Guillaume Lessard 4927c0c1c8 [stdlib] improve more accessor declarations 2025-06-26 14:57:21 -07:00
Meghana Gupta ceb3264e40 Disable runtime cow verification for mutableSpan property 2025-04-30 13:38:51 -07:00
Meghana Gupta ef1e94577f Revert "Merge pull request #80540 from swiftlang/revert-80452-lifetimeinout"
This reverts commit 6eaa07a880, reversing
changes made to e75ee3f4cf.
2025-04-04 09:50:13 -07:00
Artem Chikin 39e1791b67 Revert "Add support for inout lifetime dependence" 2025-04-04 09:00:09 -07:00
Meghana Gupta f4a980d62d Update stdlib 2025-04-03 17:32:09 -07:00
Allan Shortlidge 322443d91d stdlib: Address StrictMemorySafety warnings in Array related code. 2025-03-31 16:43:01 -07:00
Guillaume Lessard 107b38f9e0 [stdlib] add mutableSpan to array types 2025-03-27 16:55:05 -07:00
Guillaume Lessard ecebaa591e [stdlib] move span properties of array types
…to a more logical spot in each of their files
2025-03-27 14:52:08 -07:00
Guillaume Lessard 940628a23a [stdlib] add newly-required unsafe annotations 2025-03-10 15:20:51 -07:00
Guillaume Lessard 7bbb8348e3 [stdlib] add span properties to array types 2025-03-10 08:51:56 -07:00
Doug Gregor 22eecacc35 Adopt unsafe annotations throughout the standard library 2025-02-26 14:28:01 -08:00
Hamish Knight f1e4fb27de Revert "Add an overload of append(contentsOf:) on Array that takes a Collecti…"
This reverts commit b71f768128.
2024-12-17 16:23:16 +00:00
David Smith b71f768128 Add an overload of append(contentsOf:) on Array that takes a Collection instead of a Sequence, and use it to accelerate wCSIA-compatible Sequences (#77487) 2024-12-13 23:11:35 -08:00
Doug Gregor 8760b7caad Consistently use @usableFromInline and remove redundant @inlinables 2024-08-16 13:03:07 -07:00
Doug Gregor 4d037ce6ef Adopt typed throws for withUnsafeMutableBufferPointer 2024-08-16 11:13:19 -07:00
Doug Gregor 5c07fd9502 Adopt typed throws in withUnsafeBufferPointer.
Part of rdar://131405937.
2024-08-16 11:13:18 -07:00
Kuba Mracek 829967436e [embedded] Simplify AnyObject/Builtin.NativeObject split in arrays by using a typealias 2023-09-16 13:21:46 -07:00
Kuba Mracek ae2e903574 [embedded] Build an initial embedded Swift standard library
This isn't a "complete" port of the standard library for embedded Swift, but
something that should serve as a starting point for further iterations on the
stdlib.

- General CMake logic for building a library as ".swiftmodule only" (ONLY_SWIFTMODULE).
- CMake logic in stdlib/public/core/CMakeLists.txt to start building the embedded stdlib for a handful of hardcoded target triples.
- Lots of annotations throughout the standard library to make types, functions, protocols unavailable in embedded Swift (@_unavailableInEmbedded).
- Mainly this is about stdlib functionality that relies on existentials, type erasure, metatypes, reflection, string interpolations.
- We rely on function body removal of unavailable functions to eliminate the actual problematic SIL code (existentials).
- Many .swift files are not included in the compilation of embedded stdlib at all, to simplify the scope of the annotations.
- EmbeddedStubs.swift is used to stub out (as unavailable and fatalError'd) the missing functionality.
2023-09-16 12:38:46 -07:00
Lucy Satheesan ff76106177 [stdlib] don't copy array contents on removeAll(keepingCapacity: true) 2023-05-24 07:52:39 -07:00
Erik Eckstein 5d43f75173 stdlib: force inlining of ContiguousArray.endIndex and ContiguousArray._getCount
This let the optimizer generate efficient code for generic array loops (note that generic functions are not inlined by default).
Note that the same change is not done for `Array` because this might increase code size due to Array's bridging code.

rdar://108746069
2023-05-03 15:07:37 +02:00
Nate Chandler cda365ca8d [stdlib] Collection types are eagerMove.
Types that have "value semantics" should not have lexical lifetimes.
Value types are not expected to have custom deinits. Are not expected to
expose unsafe interior pointers. And cannot have weak references because
they are structs. Therefore, deinitialization barriers are irrelevant.

rdar://107076869
2023-03-30 11:04:47 -07:00
Karoy Lorentey 7cbadf2c8d [stdlib] _modify: Ensure cleanup is always executed
Cleanup code in _modify accessors will only run reliably if it is put in a defer statement.

(Statements that follow the `yield` aren’t executed if the yielded-to code throws an error.)
2022-09-06 21:15:58 -07:00
Erik Eckstein 97424b76f4 stdlib: Don't check for overflows when adding 1 to Array.count
That addition can not possibly overflow. If Array.count would be Int max, the allocation of the array buffer would have failed way before.
2021-11-29 09:41:05 +01:00
Doug Gregor 353daabf8d Replace UnsafeSendable with @unchecked Sendable in the standard library. 2021-11-12 07:56:10 -08:00
Kuba (Brecka) Mracek 404badb49a Introduce SWIFT_ENABLE_REFLECTION to turn on/off the support for Mirrors and reflection (#33617) 2021-09-08 13:08:13 -07:00
Karoy Lorentey 48fa06b7f9 [stdlib] ContiguousArray & ArraySlice: Stop swapping self in wUMBP
Implements https://github.com/apple/swift/pull/38867 for ContiguousArray and ArraySlice -- these have the same unnecessary swapping logic.
2021-08-16 14:27:24 -07:00
Doug Gregor 9579390024 [SE-0304] Rename ConcurrentValue to Sendable 2021-03-18 22:48:20 -07:00
Karoy Lorentey 0836707303 [stdlib] Deprecate MutableCollection._withUnsafeMutableBufferPointerIfSupported (#36003)
* [stdlib] Deprecate MutableCollection._withUnsafeMutableBufferPointerIfSupported

In Swift 5.0, [SE-0237] introduced the public `MutableCollection.withContiguousMutableStorageIfAvailable` method. It’s time we migrated off the old, underscored variant and deprecated it.

The default `MutableCollection.sort` and `.partition(by:)` implementations are currently calling this hidden method rather than the documented interface, preventing custom Collection implementations from achieving good performance, even if they have contiguous storage.

[SE-0237]: https://github.com/apple/swift-evolution/blob/master/proposals/0237-contiguous-collection.md

* [test] Update tests for stdlib behavior changes

* Update stdlib/private/StdlibCollectionUnittest/CheckMutableCollectionType.swift

Co-authored-by: Nate Cook <natecook@apple.com>

* Update stdlib/private/StdlibCollectionUnittest/CheckMutableCollectionType.swift

Co-authored-by: Nate Cook <natecook@apple.com>

* Apply suggestions from code review

Co-authored-by: Nate Cook <natecook@apple.com>

* [test] LoggingMutableCollection: Fix logging targets

* [stdlib] Fix warning by restoring original workaround

Co-authored-by: Nate Cook <natecook@apple.com>
2021-02-26 11:32:27 -08:00
Doug Gregor 1a1f79c0de Introduce safety checkin for ConcurrentValue conformance.
Introduce checking of ConcurrentValue conformances:
- For structs, check that each stored property conforms to ConcurrentValue
- For enums, check that each associated value conforms to ConcurrentValue
- For classes, check that each stored property is immutable and conforms
  to ConcurrentValue

Because all of the stored properties / associated values need to be
visible for this check to work, limit ConcurrentValue conformances to
be in the same source file as the type definition.

This checking can be disabled by conforming to a new marker protocol,
UnsafeConcurrentValue, that refines ConcurrentValue.
UnsafeConcurrentValue otherwise his no specific meaning. This allows
both "I know what I'm doing" for types that manage concurrent access
themselves as well as enabling retroactive conformance, both of which
are fundamentally unsafe but also quite necessary.

The bulk of this change ended up being to the standard library, because
all conformances of standard library types to the ConcurrentValue
protocol needed to be sunk down into the standard library so they
would benefit from the checking above. There were numerous little
mistakes in the initial pass through the stsandard library types that
have now been corrected.
2021-02-04 03:45:09 -08:00
Matt Zanchelli be13b470aa Fix typos
becuase -> because
preceeds -> precedes
initalizer -> initializer
intialize -> initialize
libary -> library
notfication -> notification
reciever -> receiver
collecton -> collection
exlcusive -> exclusive
techincal -> technical
compatability -> compatibility
setps -> steps
accomodate -> accommodate
brakcet -> bracket
fraciton -> fraction
programm -> program
concequently -> consequently
ecoding -> encoding
timeIntervalforSelfEnd -> timeIntervalForSelfEnd
2020-12-21 18:44:03 -05:00