On Saturday, 1 June 2019 at 07:46:40 UTC, Jonathan M Davis wrote:
For the most part though, you don't declare your own version
identifiers. It sometimes makes sense, but usually, version
identifiers are used for versioning code based on the platform
or architecture that it's compiled on. They're really only
intended to be a saner version of #ifdefs, and if you're doing
anything fancy with them, you're really not using them as
intended and are probably going to have problems.
I use versioning pervasively to make features opt-in/opt-out at
compile-time.
Like so, from dub.json:
"versions":
[
"AsAnApplication",
"WithAdminPlugin",
"WithAutomodePlugin",
"WithBashQuotesPlugin",
"WithChanQueriesService",
"WithChatbotPlugin",
"WithConnectService",
"WithCTCPService",
"WithHelpPlugin",
"WithNotesPlugin",
"WithPersistenceService",
"WithPipelinePlugin",
"WithPrinterPlugin",
"WithQuotesPlugin",
"WithSedReplacePlugin",
"WithSeenPlugin",
"WithWebtitlesPlugin"
],
---
module foo;
version(WithFoo):
// ...
Is this recommended against? It's a very convenient way of
enabling and disabling modules outright, since (by default) dub
eagerly compiles everything it sees. I haven't had any problems
with it as of yet, at the very least.