Wouldn’t you normally pass a consumer or collector function into the interator
code? Then you only write the iterator once, and it is hidden.
Similar to how the sync.Map.Range() works.
Barring that, I don’t see how
for(i:=c.Iterator();i.HasNext();) {
v := i.Next()
}
is that much more difficult to use - especially since you state it is a custom
iteration anyway?
> On Oct 25, 2018, at 1:51 PM, Eric S. Raymond <[email protected]> wrote:
>
> Jan Mercl <[email protected]>:
>> The 'obvious' way is not something I'd consider. The 'concise' way works
>> today, provided iterator function returns a slice or a map.
>
> Yes, but returning a slice (eager evaluation) is exactly what I want to avoid.
>
> The context: the repository where my Python version hit a performance wall
> has 259K events in it. It's the history of the GNU Compiler Collection.
>
> A very common thing for my code to need to do is to iterate over all events
> of a
> certain type - most often Commits, representing changes to filesets - so that
> it can select a subset to be passed to mutator code.
>
> I want to be able to say "for i, c := range repo.commits() {do_something(c)}",
> but without iterators this requires constructing an intermediate slice of
> commits only inside the commits() fuction, then passing that back to the
> range loop.
>
> That's annoying. Often I'm only going to use a small handful of those
> pointers.
> With eager list evaluation, Go's memory manager gets hammered as though I were
> going to use the entire list every time.
>
> Remember that I'm doing this translation to improve performance. I'm
> unavoidably
> going to do a lot of allocations when deserializing the repisitory into its
> in-memory attributed-graph form, but after that I really want to keep heap
> churn to the bare mimimum required by the surgical operations.
> --
> <a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
>
> My work is funded by the Internet Civil Engineering Institute:
> https://icei.org
> Please visit their site and donate: the civilization you save might be your
> own.
>
>
> --
> 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 [email protected].
> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.