Globals /singletons


#1

whats the best way to do these… I have some code thats unfortunately messy due to slotting into frameworks that break my prefered ‘pass everything from above’ setup, by requiring you to submit argument-less functions for it to work with (yuck),

I’ve ended up making static mut g_foo:Option=None, where I cache the values; those are accessed through unsafe blocks…

… is there a safe abstraction in the stdlib for this sort of thing?


#2

There is always https://github.com/rust-lang-nursery/lazy-static.rs that you can use but in general I would recommend to try to not use globals / singletons.


#3

I would recommend to try to not use globals / singletons.

sure, I hate them :slight_smile:
unfortunately I sometimes find myself interfacing with things that simply don’t let you work any other way (‘pass a main loop function which has no args to some C based frame work that will call it’)

the anti-globals mentality is ceratinly one of the things I like most about rust


#4

C APIs that doesn’t let you specify a user data pointer is really annoying :frowning:


#5

right. It’s not the fact that it’s C that is at fault … it’s C used in an especially annoying way.

I’ve worked with people in real life who resist the ‘no globals’ idea, but that might be less common in our present concurrent/parallel world.


#6

Yeah. I want to clarify also my statement was meant for C based callback APIs. For callbacks one should always allow a user pointer otherwise the user of the API will have to resort to using global vars (if state is needed which is very common)