digitalmars.D.learn - rgba.ptr[0] vs rgba[0]
- visitor (11/11) Nov 23 2020 Hi all,
- Adam D. Ruppe (11/14) Nov 23 2020 The .ptr[0] skips bounds checking.
- visitor (4/19) Nov 23 2020 indeed because of the the static length and constant index, it
Hi all, I would like to know why in the code below, rgba.ptr[0] is used instead of rgba[0] and allowing the method to be safe float[4] rgba = 0; ref inout(float) r() inout pure trusted { pragma(inline, true); return rgba.ptr[0]; } why not : ref inout(float) r() inout pure safe { pragma(inline, true); return rgba[0]; } avoid an allocation maybe ? Thanks for your time.
Nov 23 2020
On Monday, 23 November 2020 at 17:34:27 UTC, visitor wrote:Hi all, I would like to know why in the code below, rgba.ptr[0] is used instead of rgba[0] and allowing the method to be safeThe .ptr[0] skips bounds checking. Since this example is static length with a constant index it shouldn't matter anyway; the compiler can see it is obviously in bounds and skip it too. But if there's any runtime value there's a bounds check with `foo[0]` and that can be surprisingly expensive in certain situations. So `foo.ptr[0]` skipping that can give a nice performance boost. Just without bounds checking the code is obviously trusting the programmer... hence trusted is required instead of safe.
Nov 23 2020
On Monday, 23 November 2020 at 17:39:09 UTC, Adam D. Ruppe wrote:On Monday, 23 November 2020 at 17:34:27 UTC, visitor wrote:indeed because of the the static length and constant index, it was puzzling me ... Thanks Adam for clarificationHi all, I would like to know why in the code below, rgba.ptr[0] is used instead of rgba[0] and allowing the method to be safeThe .ptr[0] skips bounds checking. Since this example is static length with a constant index it shouldn't matter anyway; the compiler can see it is obviously in bounds and skip it too. But if there's any runtime value there's a bounds check with `foo[0]` and that can be surprisingly expensive in certain situations. So `foo.ptr[0]` skipping that can give a nice performance boost. Just without bounds checking the code is obviously trusting the programmer... hence trusted is required instead of safe.
Nov 23 2020