That is a good reason as to why putting timeouts and cancellation in the “context” always felt wrong to me. These are per request notions - and creating a new context to specify them seems off. But as I mentioned in the other post, without a concept of security context it doesn’t matter much - just throw anything and everything into the context and pass it around. 

On Feb 21, 2024, at 4:33 AM, 'Sean Liao' via golang-nuts <golang-nuts@googlegroups.com> wrote:


On Wed, Feb 21, 2024, 00:36 Sam Vilain <s...@vilain.net> wrote:

Alright, well thanks for your input.

I do think these questions can be answered; exploring the use cases in a proposal format should hopefully show that the impact of closures would not normally be an issue.  Possibly the worst case is if you had a library to some external service, and at some low layer you're using a closure, well you might need to refactor that if you wanted to add cross–service tracing support.  But to be honest, it's probably better that the state you're depending on is captured in a struct instead of being scattered about loosely in a scope as with a closure.  And the common practice in Go is to return types that satisfy interfaces, not function references that you blind call.

I think I will submit a proposal, but please don't take that to imply that I think you're "wrong, or mistaken".  Your concerns are legitimate and the proposal should answer them cleanly.  In the proposal format, hopefully the "litigation", or more exploration of possible uses and abuses of the system, along with performance concerns, can be addressed.  I don't want to be dismissive of them, I just want to understand them.

I had a brief look on the Golang issues in Github and could not find any prior proposals along this line using "context" and "dynamic scope" as search terms, so I'll submit this as a "new" proposal for now.

Thanks again, and truly—thanks for responding, >100% better than people who just rolled eyes and marked thread as read.

Cheers,
Sam

On 2/20/24 3:35 PM, Axel Wagner wrote:
If I may quote myself:

> And no matter which choice you make for the language - it means that if the programmers wanted the other, they'd have to jump through annoying hoops and get confusing and hard to debug problems.

Having a mechanism to get one or the other semantic doesn't change the fact that it's easy to choose wrongly by accident, as long as the effect is implicit. In fact, the mechanism you propose (AIUI) seems extra confusing: Having a function value sometimes create a new dynamic scope and sometimes not, is weird and seems like a recipe for frustration.

But really, convincing me isn't really the point, which is why I'm not super invested in litigating this (otherwise I might try to come up with realistic examples, for instance. Or explain further why I'm still not sure that this can be implemented efficiently). I'm just re-stating what, in the past, where the reasons why things like this have been rejected. In order to predict what I would consider a likely outcome of a proposal like this.

If you think I am wrong or misunderstanding you, you can always file a proposal to get a more official response.

On Tue, Feb 20, 2024 at 8:18 PM Sam Vilain <s...@vilain.net> wrote:
On 2/17/24 1:32 AM, Axel Wagner wrote:
On Sat, Feb 17, 2024 at 2:09 AM Sam Vilain <s...@vilain.net> wrote:
I would argue that the matter can be simply decided by choosing the calling stack, not the destination stack.
 
I agree that this is *one choice*. But the point is, that *sometimes* you'd want one and *sometimes* the other. And no matter which choice you make for the language - it means that if the programmers wanted the other, they'd have to jump through annoying hoops and get confusing and hard to debug problems. So if you want to justify either choice, you have to make an argument that it is so overwhelmingly more common what people would want, that the cost of running into these problems is small enough to be justified by the benefit.

I think that's a hard case to make.

Alex, I agree that there are cases where you might prefer one versus the other.  However, you cut out the part of my reply where I pointed out it was possible to choose semantics by either returning a closure (context is the source stack) or a bound method (context is the destination stack).  Both of these values can be used interchangeably, as they have the same type, func ..., and so the caller does not need to care whether the function they are calling uses the calling context or the original context.  Were you not convinced by the argument?

Sam

-- 
Sam

--
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/aec85a83-9497-469c-8369-2c9e60d0ca05%40vilain.net.

--
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/CAGabyPpcxiexqPqmcFT-RNP8KZv5p8vUFw1%3DHfMwE87puCcGQg%40mail.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.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/A3F9D79D-B287-4047-9775-522475B9850D%40ix.netcom.com.

Reply via email to