So trivially we could do something along these lines to “solve it” in swift-corelibs-foundation instead of polluting the swift standard library with objective-c-isms on Linux.
internal class NSAutoreleasePool { fileprivate static var _current = NSThreadSpecific<NSAutoreleasePool>() internal static var current: NSAutoreleasePool { return _current.get() { return NSAutoreleasePool() } } var depth: Int = 0 var objects = [[AnyObject]]() fileprivate override init() { } fileprivate func push() { objects.append([AnyObject]()) depth += 1 } fileprivate func pop() { objects.removeLast() depth -= 1 } func add(_ object: AnyObject) { objects[depth - 1].append(object) } } public func autoreleasepool(_ code: () -> ()) { NSAutoreleasePool.current.push() code() NSAutoreleasePool.current.pop() } > On Nov 2, 2016, at 12:23 PM, Philippe Hausler via swift-users > <swift-users@swift.org> wrote: > > So there are issues we have in swift-corelibs that suffer(leak) because we > don't have ARPs on Linux. It would be super nice to have a retain until scope > end concept for swift core libs where autorelease would be an accessor in > unmanaged that would retain the object until the arp ends scope. > > Sent from my iPhone > > On Nov 2, 2016, at 10:17 AM, Jordan Rose <jordan_r...@apple.com > <mailto:jordan_r...@apple.com>> wrote: > >> >>> On Nov 2, 2016, at 09:42, Joe Groff via swift-users <swift-users@swift.org >>> <mailto:swift-users@swift.org>> wrote: >>> >>>> >>>> On Nov 1, 2016, at 6:40 PM, Bernardo Breder via swift-users >>>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >>>> >>>> Hello, >>>> >>>> I want to create a mini http server project and execute at Ubuntu 15. The >>>> Xcode compile and access the function "autoreleasepool", but when i >>>> compile the same code at Ubuntu, this function not found >>>> >>>> For example, i can compile the code above at Xcode: >>>> >>>> while true { >>>> autoreleasepool { >>>> var test: Data = "HTTP/1.1 200 OK\r\nContent-Length: >>>> 1\r\n\r\na".data(using: .utf8)! >>>> } >>>> } >>>> >>>> But when i try to compile at Ubuntu: >>>> >>>> git@breder:~$ cat main.swift >>>> import Foundation >>>> >>>> while true { >>>> autoreleasepool { >>>> var test: Data = "HTTP/1.1 200 OK\r\nContent-Length: >>>> 1\r\n\r\na".data(using: .utf8)! >>>> } >>>> } >>>> >>>> git@breder:~$ swiftc main.swift >>>> main.swift:4:5: error: use of unresolved identifier 'autoreleasepool' >>>> autoreleasepool { >>>> ^~~~~~~~~~~~~~~ >>> >>> Autoreleasepools are an ObjC compatibility feature. They aren't necessary >>> in standalone Swift. >> >> But they are necessary in Swift programs on Apple platforms (that don’t use >> RunLoop, anyway). Philippe, what do you think? What’s the right way to write >> cross-platform code that doesn’t use RunLoop or dispatch_main for an >> implicit autorelease pool? >> >> (/me remembers +[NSAutoreleasePool drain] from the ObjC-GC days) >> >> Jordan > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users