Open swift-ci opened 3 years ago
Issue Description:
The following examples need to be wrapped inside autoreleasepool / try autoreleasepool in order for the memory to be freed afterwards:
myString.replacingOccurrences(of: "[eo]", with: "l", options: .regularExpression, range: nil) try Data(contentsOf: URL(fileURLWithPath: "myFile"))
This should not be necessary. And the effect of having memory leaks when not using autoreleasepool may come as a big surprise for beginners, since autoreleasepool is not even mentioned in the Swift book.
Furthermore, using autoreleasepool is not platform independent, and you then need to use something like the following for platform-independent code: https://github.com/apple/swift-docc/blob/38acdaddf610be6b943d82f0d9da628384784a81/Sources/SwiftDocC/Utility/FoundationExtensions/AutoreleasepoolShim.swift.
The issue seems to be a recurring topic, see e.g.:
https://bugs.swift.org/browse/SR-185
https://bugs.swift.org/browse/SR-5280
Also see the discussion on https://forums.swift.org/t/the-role-of-autoreleasepool-in-swift-and-thoughts-about-memory-management-in-swift/52976.
Please correct the discussion link to another link (without the dot at the end). https://forums.swift.org/t/the-role-of-autoreleasepool-in-swift-and-thoughts-about-memory-management-in-swift/52976/15
Environment
Swift 5.5. on macOS 11.6Additional Detail from JIRA
| | | |------------------|-----------------| |Votes | 0 | |Component/s | Compiler, Foundation | |Labels | Bug | |Assignee | None | |Priority | Medium | md5: 75073759b3ea284a15da01390ca1c4b7Issue Description:
The following examples need to be wrapped inside autoreleasepool / try autoreleasepool in order for the memory to be freed afterwards:
myString.replacingOccurrences(of: "[eo]", with: "l", options: .regularExpression, range: nil)
try Data(contentsOf: URL(fileURLWithPath: "myFile"))
This should not be necessary. And the effect of having memory leaks when not using autoreleasepool may come as a big surprise for beginners, since autoreleasepool is not even mentioned in the Swift book.
Furthermore, using autoreleasepool is not platform independent, and you then need to use something like the following for platform-independent code: https://github.com/apple/swift-docc/blob/38acdaddf610be6b943d82f0d9da628384784a81/Sources/SwiftDocC/Utility/FoundationExtensions/AutoreleasepoolShim.swift.
The issue seems to be a recurring topic, see e.g.:
https://bugs.swift.org/browse/SR-185
https://bugs.swift.org/browse/SR-5280
Also see the discussion on https://forums.swift.org/t/the-role-of-autoreleasepool-in-swift-and-thoughts-about-memory-management-in-swift/52976.