The Buffer is to avoid allocations, not to work around a stateless
Collator. This could be clarified perhaps.

On Mon, Jun 13, 2016 at 8:52 PM, Sugu Sougoumarane <sou...@google.com>
wrote:

> I think the Go norm of assuming that things are not thread-safe unless
> stated otherwise makes sense.
> In this particular case, the function required the caller to provide a
> buffer to fill. That gave the impression that the Collator was stateless.
> It's possible that others could also get misled.
>
> On Monday, June 13, 2016 at 9:49:14 AM UTC-7, Michael Jones wrote:
>>
>> Hmm… Not sure about repetitavely saying that specific data should not be
>> accessed concurrently. Better may be to say that nothing (generally) should
>> be accessed concurrently; that concurrency is accessed by a few special
>> mechanisms that hide the concurrency behind a reasoned, reliable facade of
>> sequential operation. This is already said in several ways so maybe rather
>> than saying it for each data item and each API element, we should encourage
>> self-study in the literature.
>>
>> Perhaps there should be a “The Go Mindset” document for background on the
>> intellectual heritage behind Go’s concepts in concurrency. The history is
>> essential and it is sobering to think that not everyone is intimately
>> familiar with it. When I read the Go documentation, several computer
>> science heroes and their original papers are on my mind:
>>
>> C. A. R. Hoare (“Tony Hoare”), inventor of Quicksort and essential to Go,
>> the expositor of Communicating Sequential Processes, with collaboration by
>> Edsger Dijkstra:
>>
>> Communicating Sequential Processes (this is THE paper of all papers)
>> http://spinroot.com/courses/summer/Papers/hoare_1978.pdf
>>
>> A Model for Communicating Sequential Processes
>> http://ro.uow.edu.au/cgi/viewcontent.cgi?article=1013&context=compsciwp
>>
>>
>> Per Brinch Hansen wrote an early book (1977), “The Architecture of
>> Concurrent Programs” that was important to me as a tutor. It teaches the
>> design complex concurrent systems as a loosely coupled ensemble of
>> sequential components connected safely by a minimal rigorous infrastructure
>> of *channels*, *send*, *receive*, and *select*.
>>
>> Architecture of Concurrent Programs (Google Book Search
>> <https://books.google.com/books?id=0KVQAAAAMAAJ&q=The+Architecture+of+Concurrent+Programs&dq=The+Architecture+of+Concurrent+Programs&hl=en&sa=X&ved=0ahUKEwiJ08yIs6XNAhUHfVIKHQPhAgAQ6AEIHjAA>
>> )
>> Per Brinch Hansen
>>
>> The Origin of Concurrent Programming (Google Book Search
>> <https://books.google.com/books?id=c__lBwAAQBAJ&pg=PA3&dq=The+Origin+of+Concurrent+Programming&hl=en&sa=X&ved=0ahUKEwiCkv3Ps6XNAhVEXlIKHeDKBRUQ6AEIHjAA#v=onepage&q=The%20Origin%20of%20Concurrent%20Programming&f=false>)
>> RECENT!
>> Per Brinch Hansen
>>
>>
>> These are the fundamental technical preparation to approach Go’s
>> concurrency concepts. It is helpful to read them not only for the insights
>> but also for the confusions. (Things murky to brilliant people are often
>> the “X” in a treasure map, with Euclid’s fifth postulate being the ultimate
>> example.)
>>
>> Another great "background for Go” text is a book by a friend of mine, Dr.
>> Fred Brooks of UNC and formerly of IBM. He is famously the author of The
>> Mythical Man Month but his magnum opus for me is the book, The Design of
>> Design: Essays from a Computer Scientist. There is no better book on
>> design—or rather, the science of meta design—in the world. The closest
>> rivals would be books on city design and urban architecture.
>>
>> The Design of Design: Essays from a Computer Scientist (Google Book
>> Search
>> <https://books.google.com/books?id=0qG4TQi-e-4C&printsec=frontcover&dq=fred+brooks+design&hl=en&sa=X&ved=0ahUKEwjRjK2RtaXNAhVUMFIKHRN9BzYQ6AEIHjAA#v=onepage&q=fred%20brooks%20design&f=false>
>> )
>> Frederick P. Brooks Jr.
>>
>>
>> One lesson from Dr. Brooks is the notion that “total design” leads to
>> efficient solutions but rigid systems not well suited to change while
>> “loose design” anticipates change, extension, and revision. (I am
>> paraphrasing here but the ideas are his.) Examples of loose design might be
>> LEGO with modular parts or in the Go context, channels and garbage
>> collection which together make “send and forget” possible, the pair of
>> which makes an arbitrary graph of independent communicating processes
>> workable and in fact, generally desirable over a carefully conceived
>> asynchronous program, such as a cleverly tuned game engine.
>>
>> Perhaps a list of references and suggestions of lessons to be learned
>> would be good as a link from the Go website.
>>
>> Michael
>>
>> On Jun 13, 2016, at 8:43 AM, Sam Whited <s...@samwhited.com> wrote:
>>
>> On Mon, Jun 13, 2016 at 10:18 AM, roger peppe <rogp...@gmail.com> wrote:
>>
>> No Go type should be assumed to be safe for concurrent use unless
>> explicitly
>> documented otherwise (or obviously safe, for some definition of
>> "obvious").
>>
>>
>> I think that's what I said? Either way it seems like there's no harm
>> in being explicit.
>>
>> —Sam
>>
>> --
>> Sam Whited
>> pub 4096R/54083AE104EA7AD3
>> https://blog.samwhited.com
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to golang-nuts...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to