Rant after trying Rust a bit
Jacob Carlborg via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jul 22 23:47:43 PDT 2015
On 2015-07-22 20:47, simendsjo wrote:
> Traits
> ------
> I think the ability to express an interface without buying into
> inheritance is the right move. The alternative in D is specifying the
> behavior as a template and verifying the contract in a unittest for the
> type.
I completely agree and don't really like the approach D has implemented
template constraints. Yeah I know, Andrei will destroy this :)
> Macros
> ------
> I haven't written more than extremely simple macros in Rust, but having
> macros that is possible for tools to understand is a win. Templates and
> string mixins is often used for this purpose, but trying to build tools
> when string mixins exists is probably extremely hard. If D had hygenic
> macros, I expect several features could be expressed with this instead
> of string mixins, making tooling easier to implement.
I completely agree. String mixins are one of the most ugliest features.
> Safe by default
> ---------------
> D is often said being safe by default, but D still has default nullable
> references and mutable by default. I don't see it being possible to
> change at this stage, but expressing when I want to be unsafe rather
> than the opposite is very nice. I end up typing a lot more in D than
> Rust because of this.
Agree.
> Pattern matching
> ----------------
> Ooooh... I don't know what to say.. D should definitely look into
> implementing some pattern matching! final switch is good for making sure
> all values are handled, but deconstructing is just so ergonomic.
Yeah, pattern matching is soooo nice. I've been trying to implement
something similar in D as a library, something like this:
auto foo = Foo();
match!(foo
Foo, (int a, int b) => writeln(a, b);
);
Which kind of works for deconstructing variable pattern. But then you
want to have a pattern where "a" is 1, they it becomes much harder:
match!(foo
Foo, (value!(1), int b) => writeln(b);
);
Or
match!(foo
Foo, 1, (int b) => writeln(b);
);
But now you need to use different syntax for value pattern and variable
pattern and soon everything becomes a big mess.
It will never be as good as proper language support.
> Expressions
> -----------
> This probably also falls in the "too late" category, but
> statements-as-expressions is really nice. `auto a = if ...` <- why not?
I really like, I use it a lot in Scala. The with the combination of
automatically return the last thing in a method and methods not needing
curly braces for single expression methods is really nice:
def foo(a: String) =
if (a == "foo")
1
else if (a == "bar")
2
else
3
> On the breaking part, the
> real issue is the "We're not going to break any code!" stance, while
> each release still breaks every codebase. The effect is that a lot of
> really long-term necessary breaking changes is never accepted - the only
> breaking changes is the unintended breaking changes!
Agree.
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list