Static constructor
SealabJaster
sealabjaster at gmail.com
Thu Jan 7 01:55:07 UTC 2021
On Wednesday, 6 January 2021 at 17:05:02 UTC, ludo wrote:
> ...
Using a static class like this seems to mostly be a design
decision.
i.e. instead of using something like
```
openalGetMutex();
// OR
OpenAL openal = ...;
openal.getMutex();
// OR I guess even this
g_openal.getMutex();
```
They specifically want the interface to look like:
```
OpenAL.getMutex();
```
So in otherwords, this class is essentially being used as a
unique namespace for all of the other functions. Another way to
look at it is just a singleton without a `.instance` getter.
As for some of the other stuff, Associative Array literals in D
can't actually be used at compile-time (at least, last time I
tried), so they have to be created inside of the static
constructor.
Next is the mutex. `Object` is the base class that every class in
D will implicitly inherit from, like in C# for example. Object
has a `.monitor` field which is basically just a mutex, so is
used with multi-threading synchronisation. I find it a bit odd
that they're just returning an object instead of a Mutex (module
core.sync.mutex), but I'm sure there's a reason why.
(The README of this project states that this is a resurrection of
some old project, and even refers to D as "Digital Mars", so this
code may or may not have been built on a very old version of D
originally.)
A better explanation of the monitor field can be found:
https://forum.dlang.org/post/op.vqi9vrqueav7ka@steve-laptop
Hope this answers some questions.
More information about the Digitalmars-d-learn
mailing list