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

Ali Çehreli acehreli at yahoo.com
Tue Jan 25 15:47:12 UTC 2022


On 1/25/22 01:53, rempas wrote:

 > people dislike global variables

The situation is much better in D because I suspect what you call global 
is D's module-scope and thread-local.

(Note: I don't want to argue whether thread-local by default was a good 
decision or not but I certainly take full advantage of the ease of 
thread-local variables in D.)

So, module-scope variables are just fine: std.parallelism uses a default 
ThreadPool object, std.stdio functions use stdout, in this case a truly 
global object, etc.

 > When I have a variable that I must pass down to 5-6
 > functions, I find it much easier to make it global rather than having it
 > been passed in all the functions that need it.

I've used that method once, which I mentioned at this point during a 
presentation:

   https://youtu.be/dRORNQIB2wA?t=2946

Both you and I realize that a module is an object and in our case there 
is a single object of it. That works.

When you need more than one object (more than one context), then you 
move all those variables to a user-defined type and they become proper 
member variables.

 > global variables can mess me up

Otherwise, as everybody else told, global variables can be very dangerous:

 
https://www.safetyresearch.net/toyota-unintended-acceleration-and-the-big-bowl-of-spaghetti-code/

That report mentions "thousands of global variables", all of which I bet 
started as "what can go wrong?"

Ali



More information about the Digitalmars-d mailing list