[swift-users] Comparing POP to OOP

Jon Hoffman hoffman.jon at gmail.com
Tue Mar 8 18:32:29 CST 2016


> On Mar 8, 2016, at 1:40 PM, Dave Abrahams <dabrahams at apple.com> wrote:
> 
> 
> on Mon Mar 07 2016, Jon Hoffman <hoffman.jon-AT-gmail.com> wrote:
> 
>> 
>> So for the last two hours or so I put myself on a task to create a
>> mutable linked list using value types and to do it in an elegant way
>> (Hey I love challenges and beating my head against the wall).  
> 
> A linked list that conforms to MutableCollection with the right
> efficiency characteristics for linked lists *and* value semantics is a
> tough problem.
> 
> I think under the proposed new indexing model you can just build it on
> top of an Array, though ;-)

But where is the fun in using an Array?  The greater the challenge, the more rewarding it is to overcome it :)  

> 
>> While I have found one working solution so far it is pretty ugly
>> therefore I have to ask myself, that even though it is preferred that
>> we use value types overall, should it be preferred that we use
>> reference types for mutable data structures like this?  
> 
> What do you mean by “like this?”  Array is a mutable data structure; is
> it “like this?”
> 
> You're going to use reference types in the *implementation* of any type
> that has arbitrary growth.  Array uses a reference internally.

Actually we should be able to make a decent stack out of a value type without a reference type behind it.  Something like this:

enum Stack<T> {
    case Empty
    indirect case Node(T, next: Stack<T>)

    mutating func push(value: T) {
        self = .Node(value, next:self)
    }

    mutating func pop() -> T? {
        switch self {
        case .Empty: return nil
        case let .Node(value, next: next):
            self = next
            return value
        }
    }
}

Can use it like this:

var stack = Stack<Int>.Empty
stack.push(1)
stack.push(2)
stack.push(3)
stack.pop()
stack.pop()


> 
>> Trust me, I have not giving up finding an elegant solution yet just
>> wondering your thoughts on that.
> 
> My feeling is that linked lists are almost never the best answer in
> real programs, but if you *really* need their characteristics you
> might want to implement them with reference semantics.
> 

True but linked lists, stacks and queues are good data structures to play with especially when demonstrating what data structures are and how they work.  

> -- 
> -Dave

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160308/b5f2bb52/attachment.html>


More information about the swift-users mailing list