[OT] What are D's values?
notrealemail at gmail.com
Tue Oct 5 00:51:26 UTC 2021
On Tuesday, 5 October 2021 at 00:11:29 UTC, Paul Backus wrote:
> On Monday, 4 October 2021 at 23:10:27 UTC, Tejas wrote:
>> Can you please list any resources on DbI?
>> I've been finding it pretty hard to grasp, and I only managed
>> to find a few videos by Andrei on the subject.
>> Even the d-idioms website doesn't have much.
>> Any text sources would be really appreciated.
>> Thank you for reading!
> Design by introspection is when you have templated code
> "customize" itself based on the specific type(s) it's
> instantiated with.
> One place DbI is used a lot is in `std.range`. For example,
> here's how `std.range`'s documentation describes the return
> value of `retro`:
>> Type: auto
>> A bidirectional range with length if r also provides a length.
>> Or, if r is a random access range, then the return value will
>> be random access as well.
> Source: https://phobos.dpldocs.info/std.range.retro.html#returns
> Notice those "if" clauses. The return value has a `.length`
> property **if** the original range, `r`, has a `.length`
> property. That's DbI.
> How is it done? Internally, `retro` uses introspection features
> like `__traits` and `is()` expressions to check what properties
> `r` has, and uses `static if` to customize its own
> implementation based on the result of those checks.
Is that seriously all there is to it? I see Andrei saying in his
talks that `static if` doubles the design space covered, that DbI
can tackle combinatorial explosion.
Can DbI really help with software that gets complex exponentially?
I guess a couple case studies will be nice.
I've been putting it off, but maybe it's time I ignore the
"experimental" smell of `checkedint` and `allocator` and actually
study the underlying code.
I'm genuinely having trouble comprehending how a bunch of compile
time queries help reduce the complexity of software constructs
exponentially... (maybe because I'm conflating it with **lines of
code** metric, thinking that DbI will somehow make a 100_000 line
program writable in a couple thousand lines)
More information about the Digitalmars-d