Fact checking for my talk
ZombineDev via Digitalmars-d
digitalmars-d at puremagic.com
Sun Aug 14 11:57:14 PDT 2016
On Sunday, 14 August 2016 at 18:17:58 UTC, Enamex wrote:
> On Sunday, 14 August 2016 at 18:05:12 UTC, ZombineDev wrote:
> [...]
>> OTOH, they're used in more places in their standard library,
>> than mixins are used in Phobos, because of the lack of
>> variadic templates, because in Rust you can't generalize over
>> mutability, like you can in D with `inout` and also because of
>> the stupidly designed trait system (e.g. see [9]).
>
> I'm confused by your example. How exactly is Rust's trait
> system 'stupidly designed'?
Ok, maybe it's a matter of taste and opinion, but I consider them
to be bad design (idea-wise, not implementation-wise) because
they're sort of the opposite of DbI and compile-time duck-typing.
Maybe they fit nicely in Rust's world but they're definitely
something I would want NOT to use. Concepts/traits are useless
when you have DbI, because you can implement them in a library if
you need dynamic dispatch (e.g. std.range.InputRangeObject,
std.experimental.allocator.allocatorObject, std.typecons.wrap,
etc.).
> [...]
>> From my understanding of Rust macros, they're kind of like the
>> AliasSeq algorithms in std.meta (because they're declarative),
>> but instead of operating on sequences (e.g. template arguments
>> lists) they operate on Rust's AST (e.g. statements and
>> expressions).
>
> The AliasSeq algorithms are defined recursively for obvious
> reasons, but they rely on branching and a lot of obviously not
> declarative code in their definition. :?
> and a lot of obviously not declarative code
Like what?
They're definitely not imperative (e.g. in-place mutation is not
possible), so I consider them to be declarative. The fact you can
call any imperative D function at CT as the conditional
expression is just a nice coincidence.
> [...]
>> [9]:
>> https://github.com/rust-lang/rust/blob/master/src/libcore/slice.rs#L804
More information about the Digitalmars-d
mailing list