NSMutableArray does provide O(1) insertion and removal from the start and the 
end of the array 
(http://ciechanowski.me/blog/2014/03/05/exposing-nsmutablearray/). 

I think the reason Swift doesn't use this design is because it stores the data 
in a contiguous block of memory. 

Elia Cereda

> Il giorno 18 set 2017, alle ore 04:48, Jon Shier via swift-users 
> <swift-users@swift.org> ha scritto:
> 
>       Yes, it seems to fly in the face of protocols as they exist in Swift at 
> the moment. Given the inability of protocols to guarantee performance 
> characteristics, breaking conformant types like this seems like a bad way to 
> try and fulfill a separate axis of concern. Wouldn’t a better idea be to move 
> things like popFirst(), and other methods requiring O(1) performance, to a 
> separate protocol? I’m also pretty sure it’s possible to implement popFirst 
> in O(1) for an Array, but Swift’s Array isn't generally very fast, at least 
> compared to C / C++.
> 
> 
> 
> Jon
> 
>>> On Sep 17, 2017, at 9:45 PM, Rick Mann via swift-users 
>>> <swift-users@swift.org> wrote:
>>> 
>>> 
>>> On Sep 17, 2017, at 03:25 , Quinn The Eskimo! via swift-users 
>>> <swift-users@swift.org> wrote:
>>> 
>>> 
>>> On 15 Sep 2017, at 21:35, Vladimir.S via swift-users 
>>> <swift-users@swift.org> wrote:
>>> 
>>>> … for me it is very strange decision to disallow a method because it is 
>>>> 'expensive'.
>>> 
>>> That’s pretty normal for Swift standard library protocols, which define not 
>>> just the behaviour of the routine but expected performance.  `popFirst()` 
>>> is expected to be O(1) and that’s not possible with `Array`.
>>> 
>>> The rationale behind this decision is, I believe, related to generic 
>>> algorithms.  If I write generic code that uses `popFirst()`, I can only 
>>> guarantee the complexity of my code if I can rely on `popFirst()` being 
>>> O(1).  If someone implements `popFirst()` as O(n), my generic algorithm 
>>> might go from O(n^2) to O(n^3), which is quite a change.
>>> 
>>>> On 16 Sep 2017, at 01:44, Rick Mann via swift-users 
>>>> <swift-users@swift.org> wrote:
>>>> 
>>>> Is the compiler looking at the name "pop" and adding additional 
>>>> constraints (and then spewing a bogus error message)?
>>> 
>>> I’m not sure what’s going on here mechanically but, yes, the error message 
>>> is bogus.  This is exactly what SR-5515 is talking about.
>>> 
>>> If I were in your shoes I’d call this method something other than 
>>> `popFirst()`.  This falls under my standard “if you change the semantics, 
>>> change the name” rule.  Your implementation of `popFirst()` doesn’t conform 
>>> to the semantics of `popFirst()` — it’s O(n) because `removeFirst()` is 
>>> O(n) — and thus you want to avoid calling it `popFirst()`.
>> 
>> All right, I'm happy to change the name to "safeRemoveFirst()", but I'm a 
>> bit irritated that there's an implicit performance constraint based on the 
>> name alone, without any obvious decorator syntax.
>> 
>> 
>> -- 
>> Rick Mann
>> rm...@latencyzero.com
>> 
>> 
>> _______________________________________________
>> 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
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to