On Tuesday, 29 March 2022 at 14:00:20 UTC, jmh530 wrote:
>On Tuesday, 29 March 2022 at 13:49:41 UTC, Max Samukha wrote:
>[snip]
Nice! I didn't know it'd been added to object.d.
Same.
I can't recall, but in the examples where they have imported!"std.XXX".YYY, am I right that it all of XXX for that declaration?
imported!"XXX".YYY
imports the symbol YYY
from the module named XXX
. It doesn't use selective imports (although I think it could with opDispatch
), so the whole module named XXX
will be imported. XXX
could be std.algorithm.iteration
, but also mir.ndslice
, vibe.core.net
, or any other module from a D library (of course, assuming you have that third-party library installed somehow, say with Dub).
In the case of Phobos, there's a convenience module called std
that publicly imports most of Phobos, so you simply say imported!"std".map
, instead of imported!"std.algorithm".map
, or imported!"std.algorithm.iteration".map
. Of course, importing the whole Phobos will make your compilation slower, but for now that's the price to pay for a bit of convenience.
Even though some regard import std;
as an anit-pattern, I think it's a nice feature and it's the compiler's job to make it fast (e.g. assuming the Phobos source files rarely change, the compiler could generate an import cache file to make look ups faster).