With the new GC I really love the trend of understanding memory bandwidth is the bottleneck for many things and the combination of locality and SIMD is a big performance unlock.
> Optimized fmt.Errorf — With the new Go release, this debate should finally be settled. For unformatted strings, fmt.Errorf now allocates less and generally matches the allocations for errors.New. Specifically, fmt.Errorf goes from 2 allocations to 0 allocations for a non-escaping error, and from 2 allocations to 1 allocation for an escaping error […]
Thank you so much!!! I used to always take an extra second to decide which one to use based on the function’s parameter(s), and now I feel like I’m getting that time back, no sarcasm at all. This is a genuinely great improvement.
Oh wow the changes to new() are an enormous ergonomics unlock. ErrAsType will also replace a similar package for me (too bad value errors will still be a thing though, and beginning new type errors still so wordy).
With the new GC I really love the trend of understanding memory bandwidth is the bottleneck for many things and the combination of locality and SIMD is a big performance unlock.
Reminds me of the WAND vs MAXSCORE discussion by turbopuffer: https://turbopuffer.com/blog/fts-v2-maxscore
> Optimized fmt.Errorf — With the new Go release, this debate should finally be settled. For unformatted strings, fmt.Errorf now allocates less and generally matches the allocations for errors.New. Specifically, fmt.Errorf goes from 2 allocations to 0 allocations for a non-escaping error, and from 2 allocations to 1 allocation for an escaping error […]
Thank you so much!!! I used to always take an extra second to decide which one to use based on the function’s parameter(s), and now I feel like I’m getting that time back, no sarcasm at all. This is a genuinely great improvement.
Anton's interactive tour is the best way to read the release notes IMO! As mentioned on Cup o' Go.
Cup ‘o Go? The name is familiar. If yes, love the show and listen to every episode even though I rarely use Go!
I don't use Go often but that's an excellent summary article.
The differences btwn new() and make() is even lesser now. Is the goal is to deprecate make()?
How would you dup := make([]int, 0, len(slice)) then?
The recursive type constraints are excellent.
Fed *bool `json:"is_fed"` // you can never be sure
felt that part
Oh wow the changes to new() are an enormous ergonomics unlock. ErrAsType will also replace a similar package for me (too bad value errors will still be a thing though, and beginning new type errors still so wordy).
Wow, big release. I wonder if it was AI facilitated?