Sounds like a good plan. On Sun, Nov 25, 2018 at 8:24 PM Russtopia <rma...@gmail.com> wrote:
> Sure. I just found it a very interesting 'corner' of the language I have > run up against. > However, I do have what I think is an ingenious solution which > unfortunately cannot fit in the margin of this email :). It's actually > working rather well for my purposes, and I've proposed it already to the > author of go-callvis. We'll see where it goes. > > I think given the Go philosophy of keeping the language itself simple, a > convention for annotating goroutines (and defer blocks which also show up > in graphvis in the same manner) via comments might be best. A > post-processing tool to catch these comments and fix up the graphviz .dot > output is already showing promise in achieving what I am after. > > -Russ > > On Sun, 25 Nov 2018 at 20:13, Michael Jones <michael.jo...@gmail.com> > wrote: > >> just saying the we could make it so. the full name (for a func local var) >> would be funcName_varName_instanceNumber in some formatting. >> >> i think you're up against a "go attitude" decision here but it could help >> support the tooling spirit...would be nice to see the list if these at exit >> to quickly spot leaking >> >> On Sun, Nov 25, 2018 at 8:05 PM Russtopia <rma...@gmail.com> wrote: >> >>> Perhaps I misunderstand what you suggest, but I tried >>> >>> func A() { >>> ... >>> descriptivelyNamedGoroutine := func() { >>> ... >>> } >>> ... >>> descriptivelyNamedGoroutine() >>> ... >>> >>> Alas, the 'dot' tool used by go-callvis doesn't seem to obtain any >>> additional info from this. The resulting diagram still just labels the >>> goroutine A$1. >>> Perhaps a limitation of go-callvis itself; I've mailed the author with >>> this issue to see what he/she thinks about it. >>> >>> >>> On Sun, 25 Nov 2018 at 16:36, Dan Kortschak < >>> dan.kortsc...@adelaide.edu.au> wrote: >>> >>>> A way around that might be to use the name of the variable that holds >>>> the anonymous function, defaulting to func#n when it's a func literal. >>>> This should be able to be gleaned from the analysis. >>>> >>>> On Sun, 2018-11-25 at 16:04 -0800, Russtopia wrote: >>>> > That still doesn't address what I'm getting at -- it doesn't give a >>>> > semantically meaningful name to the goroutines, in stack traces, >>>> > source >>>> > code, or in code visualization tools such as graphviz diagrams. >>>> > >>>> > What does that goroutine actually *do*? Is it a worker for some >>>> > specific >>>> > purpose, does it read from stdin and forward to a pty/socket, does it >>>> > wait >>>> > for data on some channel, does it sleep until a particular event >>>> > occurs and >>>> > then reboot the box ... ? 'EnclosingFunc$1', 'EnclosingFunc$2' aren't >>>> > very >>>> > useful names for documentation and the current Go syntax allows no >>>> > specification of this by naming the goroutine itself, short of moving >>>> > it >>>> > completely out of the scope of the enclosing named function, and >>>> > losing the >>>> > benefits of a closure. >>>> > >>>> > I guess what I'm getting at is that goroutines can't be named for >>>> > what they >>>> > *mean* or *do*. Comments can of course explain this within the source >>>> > code, >>>> > but I think there would be a concrete benefit to defining a >>>> > convention for >>>> > comment-tagging goroutines, in provide this foothold for external >>>> > documentation tools; or, perhaps even better, a way to actually name >>>> > goroutines like how GCC allows named, nested functions. This could >>>> > even >>>> > improve the readability of stack traces could it not? >>>> > >>>> > I've already devised a 'comment above each goroutine' hack, plus a >>>> > post-processing tool (basically a sed script) to massage the output >>>> > of the >>>> > graphviz 'dot' data, where I place info above each goroutine so it >>>> > can be >>>> > renamed in the output diagram. That addresses the naming issue within >>>> > graphviz diagrams for me, for now. >>>> > >>>> > >>>> > On Sun, 25 Nov 2018 at 15:28, Dan Kortschak <dan.kortschak@adelaide.e >>>> > du.au> >>>> > wrote: >>>> > >>>> > > >>>> > > That package doesn't introspect on running code, so a goroutine >>>> > > name is >>>> > > not necessary. go-callvis could label the anonymous functions by >>>> > > their >>>> > > filepath:line number or something else. >>>> > > >>>> > > On Sun, 2018-11-25 at 15:12 -0800, Russtopia wrote: >>>> > > > >>>> > > > I recently tried out a go tool for outputting code structure >>>> > > > visualization >>>> > > > using graphviz -- https://github.com/TrueFurby/go-callvis >>>> > > > >>>> > > > I found that goroutines are just labelled <enclosing function>$1 >>>> > > > or >>>> > > > similar >>>> > > > by go-callvis. I could of course be wrong, but my thinking is >>>> > > > that >>>> > > > this is >>>> > > > not really a shortcoming of graphviz, but rather a lack of >>>> > > > support >>>> > > > for >>>> > > > naming goroutines within the language itself as goroutines are >>>> > > > also >>>> > > > 'unnamed' in this sense within stack traces. It would aid in >>>> > > > understanding >>>> > > > the purpose of goroutines within a structure diagram if >>>> > > > goroutines >>>> > > > could be >>>> > > > named somehow. >>>> > > > >>>> > > > I was hoping there was a way within Go to give goroutines >>>> > > > meaningful >>>> > > > names >>>> > > > in such a way that graphviz-like tools could pick up on it and >>>> > > > make >>>> > > > meaningful annotations. >>>> > > > >>>> > > > The runtime would, I suppose, also have to suffix a goroutine ID >>>> > > > to a >>>> > > > goroutine's name, since calling a function that contained >>>> > > > goroutines >>>> > > > repeatedly would result in multiple instances of each goroutine. >>>> > > > >>>> > > > >>>> > > > On Fri, 23 Nov 2018 at 22:36, <alex.besogo...@gmail.com> wrote: >>>> > > > >>>> > > > > >>>> > > > > >>>> > > > > Debugging. For example, if I have a deadlocked request I might >>>> > > > > want >>>> > > > > to >>>> > > > > attach with a debugger and find where exactly it's stuck. >>>> > > > > >>>> > > > > Right now this is complicated, you have to examine stacks of >>>> > > > > all >>>> > > > > goroutines to find the correct one. >>>> > > > > >>>> > > > > On Friday, November 23, 2018 at 9:24:42 PM UTC-8, Andrei Avram >>>> > > > > wrote: >>>> > > > > > >>>> > > > > > >>>> > > > > > >>>> > > > > > What's the need for this? >>>> > > > > -- >>>> > > > > 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. >>>> > > > > >>>> -- >>>> CRICOS provider code 00123M >>>> >>>> -- >>> 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. >>> >> >> >> -- >> >> *Michael T. jonesmichael.jo...@gmail.com <michael.jo...@gmail.com>* >> > -- *Michael T. jonesmichael.jo...@gmail.com <michael.jo...@gmail.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+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.