On Sun, Feb 27, 2022 at 6:33 PM robert engels <reng...@ix.netcom.com> wrote:

> I disagree that it wont be formally published - or at least have knobs to
> turn to control it - otherwise it will be nearly impossible to make the
> determination of when your generic’s usage will result in a performance
> penalty.
>

This doesn't seem substantially different from escape analysis. Where there
is also no spec or any other formal description, but just a flag to log
decisions.
I would expect generics to work similar in that regard.


> This probably won’t matter for 95% of the code - but it if does matter -
> your only solution would be to always avoid generics and roll your own -
> which defeats the purpose.
>
> I can see build labels controlling the generation options.
>
> On Feb 26, 2022, at 5:51 PM, Ugorji Nwoke <ugo...@gmail.com> wrote:
>
> To your direct questions, the answer is a mix of both: C++ style where the
> generic block is a template and code is essentially generated for each type
> known at compile time with static dispatch, and java-like where it is
> similar to an interface call with dynamic dispatch. The compiler will
> strike the right balance of binary size, compile time and execution speed.
> To follow its heuristics rules (which will likely not be formally published
> to prevent people from depending on it), you might have to stay close to
> the development for that.
>
> On Friday, February 25, 2022 at 5:15:47 AM UTC-5 markus....@gain.pro
> wrote:
>
>> Correction:
>>
>> - it must be possible to express that T is comparable (so that you can
>> use map[K]V, were K must be comparable)
>> - it must be possible restrict T to a concrete list of types (f.e. min(a,
>> b T) T must be possible to write)
>>
>> On Friday, February 25, 2022 at 11:13:01 AM UTC+1 Markus Heukelom wrote:
>>
>>> I think the consensus in the Go community is to refrain from comparing
>>> Go language features with other programming languages. Rationale ~:
>>>
>>> - it is highly contentious
>>> - it is very difficult to answer, it's like asking "is purple more blue
>>> or more red"
>>> - no matter the answer, it will not help you a lot to write better
>>> programs or be more productive in Go
>>>
>>> However, maybe your real question is more like "what are/were the
>>> guiding principals for generics in Go?".   As far as I understand, generics
>>> in Go follow the same principles as other language features in Go:
>>>
>>> - compilation should be very fast, but trade-offs are allowed so it does
>>> not need to be maximally fast
>>> - language features should be as orthogonal as possible, but trade-offs
>>> are allowed so they don't need to be maximally orthogonal
>>> - it should be a simple as possible but no simpler
>>> - ...
>>>
>>> For generics this has resulted in:
>>>
>>> - exotic use-cases are not supported (for example having an integer
>>> *constant* as *generic parameter*, such as you see in C++ fixed size matrix
>>> templates, is not supported)
>>> - it must be possible to express that T is comparable (f.e. min(a, b T)
>>> T must be possible to write)
>>> - it must be possible restrict T to a concrete list of types
>>> - it must be possible to restrict T to a type with method set that
>>> equals that of some interface (I *personally* think this violates the
>>> principle of orthogonality too much and will lead to confusion and design
>>> debate)
>>>
>>> Of course, neither list is exhaustive and is only my personal
>>> understanding of things.
>>>
>>> -Markus
>>>
>>> On Wednesday, February 23, 2022 at 9:41:14 PM UTC+1 Jason E. Aten wrote:
>>>
>>>> Back in 2009, Russ wrote a blog on generics, talking about the
>>>> tradeoffs in providing generics:
>>>>
>>>> "The generic dilemma is this: *do you want slow programmers, slow
>>>> compilers and bloated binaries, or slow execution times? " -- *
>>>> https://research.swtch.com/generic
>>>>
>>>> I haven't had the bandwidth to follow the generics detailed
>>>> discussions.  I was just curious, at a high level, for creating a mental
>>>> model of Go's generics: which approach was taken?
>>>>
>>>> Thanks!
>>>>
>>>> J
>>>>
>>>
> --
> 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/8edf65b3-f499-4446-908e-8e35d3070739n%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/8edf65b3-f499-4446-908e-8e35d3070739n%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 on the web visit
> https://groups.google.com/d/msgid/golang-nuts/D2355A50-46F9-475B-8651-5C7B117DFB2D%40ix.netcom.com
> <https://groups.google.com/d/msgid/golang-nuts/D2355A50-46F9-475B-8651-5C7B117DFB2D%40ix.netcom.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 on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAEkBMfHthjk9Oj5GemTRxXoeYgvOeR_hkism8og3YtWtvoJRVQ%40mail.gmail.com.

Reply via email to