On Tue, 19 Aug 2025 at 06:49, Ruslan Semagin <pixel.365...@gmail.com> wrote:

> In general, it seems to me that much of the opposition here comes from a
> general reluctance to introduce *any* new syntax into the language.
>

I think that is a misreading of the responses. They where very specific to
your suggestion. I do not understand how you can possibly come to this
conclusion.

If I try to summarize the proposal clearly, it is nothing more than
> syntactic sugar for a very specific case.
>
> This syntactic sugar:
> 1. Does not complicate the language.


That is, to be clear, categorically untrue. *Every* addition to the syntax
complicates the language, by definition.
You might feel that the complication is justified by the benefit, but it is
a complication.


> 2. Does not break backward compatibility.
> 3. Leaves the choice to the programmer which form to use in a given
> situation.
> 4. Reduces boilerplate in places where the pattern occurs.
> 5. Does not introduce new semantics or unexpected side effects—its
> behavior is exactly that of the explicit loop.
> 6. Can be fully and clearly documented in the language specification, as
> with other small sugars.
>
> It is not a revolutionary change. It is simply an additional, optional way
> of writing code in a specific situation.


I don't think any of these are actually in doubt by anyone. None of these
actually address any of the reasons given, not to introduce this change,
though.


>
>
> вторник, 19 августа 2025 г. в 07:41:31 UTC+3, Ruslan Semagin:
>
>> Bakul Shah,
>>
>> >The other issue is information loss. If the channel is closed *while*
>> ch<-xs... is active, you don't know *how many* elements were passed.
>>
>> The reader has this information, and can also find out at any time how
>> many elements are already in the channel.
>>
>> вторник, 19 августа 2025 г. в 07:09:25 UTC+3, Ruslan Semagin:
>>
>>> Jason, thanks for the reply and advice, but I don't think I wrote
>>> anything about the semantics of channels being ambiguous.
>>> I think your reply is taking the discussion a bit off-track
>>>
>>> вторник, 19 августа 2025 г. в 04:16:20 UTC+3, Jason E. Aten:
>>>
>>>> Obviously channel semantics aren't ambiguous.
>>>>
>>>> Ruslan, channels do require perhaps an hour of careful study
>>>> and memorization to use effectively.
>>>>
>>>> You cannot yolo-code or guess your way to working with channels. There
>>>> isn't anything to build intuition on--nothing prior to compare to.
>>>>
>>>> You simply must memorize the rules for buffered and unbuffered
>>>> channels,
>>>> both naked and inside a select statement. There is a 3x3 table for
>>>> each. See the link below.
>>>>
>>>> It helps to write little programs to test each scenario.
>>>>
>>>> You can see my notes and an exercise that should clear things up pretty
>>>> quickly here.
>>>>
>>>>
>>>> https://github.com/glycerine/thinkgo?tab=readme-ov-file#channel-lifecycle
>>>>
>>>> Best wishes,
>>>> Jason
>>>>
>>>>
>>>> On Monday, August 18, 2025 at 9:28:02 AM UTC+1 Bushnell, Thomas wrote:
>>>>
>>>>> What part of the semantics of a channel are “ambiguous”?
>>>>>
>>>>>
>>>>>
>>>>> *From:* 'Axel Wagner' via golang-nuts <golan...@googlegroups.com>
>>>>> *Sent:* Sunday, August 17, 2025 6:45 AM
>>>>> *To:* Ruslan Semagin <pixel....@gmail.com>
>>>>> *Cc:* golang-nuts <golan...@googlegroups.com>
>>>>> *Subject:* Re: [go-nuts] Slice expansion in channel send statements
>>>>> (ch <- X...)
>>>>>
>>>>>
>>>>>
>>>>> This message was sent by an external party.
>>>>>
>>>>>
>>>>>
>>>>> On Sun, 17 Aug 2025 at 07:14, Ruslan Semagin <pixel....@gmail.com>
>>>>> wrote:
>>>>>
>>>>> What I meant to highlight is the *mental model* programmers already
>>>>> use: when reading `f(xs...)` it is commonly understood as “take all the
>>>>> elements and pass them along.” My thought was that `ch <- xs...` extends
>>>>> that same intuition into channel sends, even though the mechanics differ
>>>>> internally.
>>>>>
>>>>>
>>>>>
>>>>> So the comparison was more about readability and consistency from the
>>>>> user’s perspective
>>>>>
>>>>>
>>>>>
>>>>> I really do not think this is consistent semantically. ch <- x...
>>>>> means, in your suggestion
>>>>>
>>>>>
>>>>>
>>>>> ch <- x[0]
>>>>>
>>>>> ch <- x[1]
>>>>>
>>>>> …
>>>>>
>>>>> ch <- x[len(x)-1]
>>>>>
>>>>>
>>>>>
>>>>> That is not what f(x...) means at all. Functions don't even always
>>>>> range over their varargs - fmt.Printf, for example, really does use its
>>>>> argument as a slice with random accesses.
>>>>>
>>>>>
>>>>>
>>>>> In that sense, `ch <- xs...` is intended as a lightweight, expressive
>>>>> shorthand for a very common loop
>>>>>
>>>>>
>>>>>
>>>>> I also would like to say that in more than ten years of using almost
>>>>> exclusively Go, I think I have written that loop less than ten times. Of
>>>>> course, it all depends on what kind of Go code you write.
>>>>>
>>>>>
>>>>>
>>>>> But I would actually argue that if this is a very common loop to
>>>>> write, we are doing something wrong. I don't think people should use
>>>>> channels directly very often, because they have pretty ambiguous semantics
>>>>> and it tends to be hard to get channel code right. So if people very
>>>>> commonly (commonly enough to justify this language change) use raw
>>>>> channels, that's an indication that there probably is some easier to use
>>>>> primitive of structured concurrency (akin to errgroup.Group) that we are
>>>>> missing and should be adding instead.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> воскресенье, 17 августа 2025 г. в 02:25:47 UTC+3, Ian Lance Taylor:
>>>>>
>>>>> On Sat, Aug 16, 2025 at 1:21 AM Ruslan Semagin <pixel....@gmail.com>
>>>>> wrote:
>>>>> >
>>>>> > I understand the concern about implicit loops and the general bias
>>>>> against them in the language design.
>>>>> > My thought here was that this case might be closer to the existing
>>>>> slice expansion at call sites (f(xs...)). In both cases we’re conceptually
>>>>> saying “apply this operation elementwise.” One is a function call, the
>>>>> other is a channel send.
>>>>>
>>>>> But the function call is not applied elementwise. As I tried to
>>>>> explain, the slice is passed directly, not element by element. See
>>>>> https://go.dev/play/p/R4B1wHZMTuL.
>>>>>
>>>>> Ian
>>>>>
>>>>> --
>>>>> 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.
>>>>> To view this discussion visit
>>>>> https://groups.google.com/d/msgid/golang-nuts/9e3f90a5-5c3f-444f-a2b8-0b93840253d7n%40googlegroups.com
>>>>> <https://groups.google.com/d/msgid/golang-nuts/9e3f90a5-5c3f-444f-a2b8-0b93840253d7n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>> --
>>>>> 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.
>>>>>
>>>>> To view this discussion visit
>>>>> https://groups.google.com/d/msgid/golang-nuts/CAEkBMfHXKxBxUfaWmYJkEdMT6nshYSkd%2B-K0Y45H2PoiRswdCQ%40mail.gmail.com
>>>>> <https://groups.google.com/d/msgid/golang-nuts/CAEkBMfHXKxBxUfaWmYJkEdMT6nshYSkd%2B-K0Y45H2PoiRswdCQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> --
> 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 visit
> https://groups.google.com/d/msgid/golang-nuts/eb580a6d-74ab-4b9b-be94-fcdeb25ad2b1n%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/eb580a6d-74ab-4b9b-be94-fcdeb25ad2b1n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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 visit 
https://groups.google.com/d/msgid/golang-nuts/CAEkBMfFWCShysKmT%2BDEnQPdvacygOEksuVwY3szgynH600DuyQ%40mail.gmail.com.

Reply via email to