On Tuesday, December 29, 2020 at 1:21:04 PM UTC-5 k.alex...@gmail.com wrote:

> I'd like to solicit some input from the community regarding a decision 
> that could reduce the effort required in crowdsourcing.
>
> After thinking carefully about the loopclosure vet check 
> <https://github.com/golang/tools/blob/master/go/analysis/passes/loopclosure/loopclosure.go>,
>  
> it seems to me that any time it reports an issue, there actually is an 
> issue. That has also been the case for everything I've seen GitHub Vet 
> report from loopclosure thus far.
>
> What loopclosure does is find instances where a range loop variable is 
> used inside a goroutine or defer statement. My understanding is that, in 
> every case, this raises the potential for a race-condition between updating 
> the range loop variable and reading from it within the body of the 
> goroutine. So unless I'm missing something, it seems to me that there is 
> not any need for a human to double-check loopclosure results.
>

Technically, I believe a range loop variable can be used in a goroutine 
safely. A very contrived example: https://play.golang.org/p/jgZbGg_XP6S . 
In practice I can not see much use for this kind of pattern, but it does 
exist. 
 

>
> So my plan -- unless someone comes up with something I have missed -- is 
> to omit loopclosure findings from the crowdsourcing effort. Once this 
> change is made, loopclosure findings will be kept on disk, but not uploaded 
> to GitHub for crowdsourcing.
>
> It's worth mentioning that there are issues which loopclosure misses which 
> VetBot is able to find, and the community's effort will still be needed to 
> help sift through false-positives once the project has stabilized.
>
>
> On Sun, Dec 20, 2020 at 12:08 PM K. Alex Mills <k.alex...@gmail.com> 
> wrote:
>
>> Hello Gophers!
>>
>> During a Q&A session at this year's GopherCon, some members of the Go 
>> language team indicated a willingness to modify the behavior of range 
>> loops <https://github.com/golang/go/issues/20733> *if* we can be 
>> reasonably certain that the change will not cause incorrect behavior in 
>> current programs. To make that determination, a large collection of 
>> real-world go programs would need to be vetted. If we can find that, in 
>> every case, modifying the compiler behavior does not lead to an undesirable 
>> outcome, we will have strong evidence that the change may only have a small 
>> impact.
>>
>> I've been working on a project to gather and crowdsource data for that 
>> sort of analysis. It has reached a point where I think that it's time to 
>> share it with the Go community.
>>
>> The GitHub Vet Project <https://github.com/github-vet> performs static 
>> analysis on public Go repositories hosted on GitHub in order to better 
>> understand the impact of this proposed language change 
>> <https://github.com/golang/go/issues/20733>. It consists of two bots. 
>> VetBot crawls GitHub to snippets of code it thinks could be interesting, it 
>> reports it as an issue in a separate repository 
>> <https://github.com/github-vet/rangeloop-pointer-findings>, for humans 
>> to analyze via crowdsourcing. TrackBot 
>> <https://github.com/github-vet/bots/tree/main/cmd/track-bot> manages the 
>> crowdsourcing workflow.
>>
>> At this point, all of the features I think are necessary for the 
>> project's success have been implemented. But I am only one Gopher, and so I 
>> would like to a) make the community aware of the project and b) ask the 
>> community to help review it in three ways:
>>
>> 1) Test out TrackBot and the project instructions by actually 
>> crowdsourcing through the issues found so far 
>> <https://github.com/github-vet/rangeloop-pointer-findings>.
>> 2) Review the output 
>> <https://github.com/github-vet/rangeloop-pointer-findings/issues> and 
>> raise concern if anything that I claim ought to be excluded 
>> <https://github.com/github-vet/bots/tree/main/cmd/vet-bot#2-run-static-analysis>
>>  
>> is somehow making it through.
>> 3) Static analysis experts: review the analyzers 
>> <https://github.com/github-vet/bots/tree/main/cmd/vet-bot> and 
>> ruthlessly question anything that could lead to a false negative. I don't 
>> think anything exists, but one pair of eyes is often wrong, and there are 
>> many folks on this list with (much) more expertise than me.
>>
>> One final thing. The crowd-sourcing workflow I've designed relies on the 
>> opinion of experts to help estimate the reliability of the community 
>> assessment. In order for that to work, I need the help of some Go experts 
>> who are willing to commit some time to reviewing the findings. If you'd 
>> like to participate in this way, first, read the TrackBot documentation 
>> <https://github.com/github-vet/bots/tree/main/cmd/track-bot> to 
>> understand what being an expert entails. If you're still interested, email 
>> me with the subject line 'GitHub Vet Expert' and include your GitHub 
>> username and a brief outline of your experience with Go.
>>
>> It's my hope that this project can provide some data that can help to 
>> move Go forward. To that end, I'm also interested in any and all feedback 
>> and suggestions. Contributions are also welcome 
>> <https://github.com/github-vet/bots/issues>.
>>
>> Thanks for reading,
>>
>> K. Alex Mills, Ph.D
>>
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/72281283-6824-4396-abd2-0dcb2b08ad62n%40googlegroups.com.

Reply via email to