D's hidden function calls getting crazier.
Hors
ho at rs.com
Fri Oct 27 13:37:14 UTC 2023
On Friday, 27 October 2023 at 12:53:32 UTC, duckchess wrote:
> On Friday, 27 October 2023 at 12:46:37 UTC, Hors wrote:
>> On Friday, 27 October 2023 at 12:40:39 UTC, duckchess wrote:
>>> On Friday, 27 October 2023 at 12:38:10 UTC, Hors wrote:
>>>> [...]
>>>
>>> why do you need to know if it is a function call?
>>
>> Because it kills D's "fast", you may think you just accessing
>> a normal variable but in fact you just calling a lot
>> functions, it can hurt performance. Also for years, obj.val
>> means a variable amd obj.m() means a function. There is no
>> good reason to change that
>
> if they can get inlined, they are, so it doesn't really change
> anything.
>
> also there absolutely is a good reason for this.
>
> if you have code
> ```d
> struct Foo {
> int x = 5;
> }
>
> Foo foo;
> writeln(foo.x);
> ```
>
> but later realize that you need to have x be a function for any
> reason, then you don't have to update your sourcecode
> everywhere. like this:
>
> ```d
> struct Foo {
> int _x;
> int x( = 5) { assert(_x > 0); return _x;}
> }
>
> Foo foo;
> writeln(foo.x);
> ```
It can be useful in some rare cases. But sometimes it does more
harm than good, like string operations
```
str.toLower
```
calls toLower function which makes a new string every time you
use it. So it's incorrect to tell everything can be solved with
inline functions
More information about the Digitalmars-d
mailing list