Why people dislike global variables so much while I find them so convenient?

rempas rempas at tutanota.com
Tue Jan 25 11:37:54 UTC 2022


On Tuesday, 25 January 2022 at 10:22:17 UTC, Ola Fosheim Grøstad 
wrote:
> Harder to debug

How?

> Harder to reason about as your program grows

What does this mean? No, I'm not joking, I truly don't get it. Do 
you mean "reason" as the reason they exist and what they do?

> Harder to scale your program to higher degree of concurrency

Why? What's the difference between having a variable in a global 
space vs passing a pointer and having to difference it when it 
comes to concurrency? In both cases, you need to check if what 
you are trying to use is already in use (unless you don't care, 
lol!).

> If you use globals you should keep them local to one 
> object-file and limit access to accessor functions to make it 
> easier to debug your code.

I mean, if you keep them local to an object file that they lose 
their bigger advantage. How many functions will be in this file 
compared to the whole project? So we don't win much.

> If you only use globals because you want to have fewer 
> parameters then the common approach is to instead use a 
> context-object and pass that as single parameter.

Yeah but in that case, I will have to create an object and use 
pointers. And also use a pointer for this object and have to 
dereference it every time. So yeah, the runtime performance will 
not be happy about that...

> Unfortunately, D made the mistake of making thread-local the 
> default, and claimed this was a great improvement. Thread local 
> globals are basically something you only want to use in runtime 
> and framework "kernel" like code. That gets you an additional 
> layer of issues, including performance.
>
> If you use globals, make sure you either mark them 
> appropriately so that you don't get thread local globals.

How can I do that?


More information about the Digitalmars-d mailing list