Re: Ehud Shapiro's promise based Queue in the browser

Mark Miller <[email protected]>
Newsgroups gmane.comp.lang.e.general
Message-ID <[email protected]>
On Fri, May 8, 2009 at 3:57 PM, Tyler Close <[email protected]> wrote:
> To test my web_send promise implementation, I made an AJAX interface
> to the weird promise based Queue implementation that supports popping
> values before they've been added. [...]


For reference, at
src/esrc/org/erights/e/examples/concurrency/makeQueue.emaker in the E
distribution contains an E implementation of this idea together with a
bit of updoc:


---------------------
#!/usr/bin/env rune

pragma.syntax("0.8")

# Copyright 2002 Combex, Inc. under the terms of the MIT X license
# found at http://www.opensource.org/licenses/mit-license.html ................

/**
 *
 */
def makeQueue() :near {
    def [var qhead, var qtail] := Ref.promise()
    def cons(elem, next) :near {
        def pair {
            to getElem() :any { return elem }
            to getNext() :any { return next }
        }
        return pair
    }
    def enqueue(elem) :void {
        def [nextHead, nextTail] := Ref.promise()
        qtail.resolve(cons(elem, nextHead))
        qtail := nextTail
    }
    def dequeue() :any {
        def result := qhead <- getElem()
        qhead := qhead <- getNext()
        return result
    }
    return [enqueue, dequeue]
}


    ? pragma.syntax("0.8")

    ? def makeQueue := <import:org.erights.e.examples.concurrency.makeQueue>
    # value: <makeQueue>

    ? def [enq, deq] := makeQueue()
    # value: [<enqueue>, <dequeue>]

    ? enq(3)
    ? def x := deq()
    # value: <Promise>

# Wait a moment

    ? x
    # value: 3

    ? def y := deq()
    # value: <Promise>

# Wait a moment

    ? y
    # value: <Promise>

# Yup, still unresolved

# Messages to promises build up future dependency chains in a natural way:

    ? def z := y <- add(7)
    # value: <Promise>

    ? enq(4)

# Wait a moment

    ? y
    # value: 4

    ? z
    # value: 11
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.