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
> <[email protected]> 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 <[email protected]
> <mailto:[email protected]>> wrote:
>
>>
>>> On Nov 2, 2016, at 09:42, Joe Groff via swift-users <[email protected]
>>> <mailto:[email protected]>> wrote:
>>>
>>>>
>>>> On Nov 1, 2016, at 6:40 PM, Bernardo Breder via swift-users
>>>> <[email protected] <mailto:[email protected]>> 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
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________
swift-users mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users