If you write `_ = s[10]` and len(s)<11, that line will panic. So after that
line, the compiler can assume that len(s)>=11 and omit bounds check for
smaller indices.
That is, if you write

f(s[0])
f(s[1])
…
f(s[10])

That will be 11 bounds checks, as depending on what exactly len(s) is, a
different line must panic. But if you write

_ = s[10]
f(s[0])
f(s[1])
…
f(s[10])

That will be 1 bounds check, as only one of the lines *can* panic - the
first.

On Sun, 13 Oct 2024 at 08:24, Nico Braun <rainbowst...@gmail.com> wrote:

> Hi, I was under the impression that this, ` _ = s[10] `, happens at
> compile time. But that probably doesnt make sense. We dont know the length
> of all slices at compile time.
>
> Then, what is this actually improving? Does the compiler see there will be
> a bound check, so it doesnt produce instructions for more bound checks? So
> the assembly or bytecode will be smaller.
> On Friday 11 October 2024 at 08:34:00 UTC+2 tapi...@gmail.com wrote:
>
>> On Thursday, October 10, 2024 at 11:51:02 AM UTC+8 Nico Braun wrote:
>>
>> Hi, recently I became very self aware of potential performance
>> implications my code might have.
>>
>> In go there are a few key concepts, like escape analysis and bound
>> checks. If you check the standard library, you can see it was coded with
>> micro optimizations.
>>
>> For example, disabling bound checks in some methods, by doing something
>> `like _ = s[10]`.
>>
>>
>> The line is not a no-op. It makes bound checks in advance to remove more
>> checks.
>>
>>
>>
>> Or trying to use function arguments that they will likely end up on the
>> stack and not on the heap, by playing the escape analyzer. I.e. pass buffer
>> to io.Reader. Or sometimes, dont pass interface because it is hard for the
>> compiler to understand that the interface doesnt escape.
>>
>> I wonder, if I code like this, is this considered premature optimization.
>> Or is more like good habbit?
>>
>>
>> --
> 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/66f9b041-1857-470f-b6c3-ce91a6126c01n%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/66f9b041-1857-470f-b6c3-ce91a6126c01n%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/CAEkBMfHZyjTb6We1GLZaD2P05K35%2BAXFk6mRUdCcnJycVA2OtQ%40mail.gmail.com.

Reply via email to