Donât 99% of people donât need the efficiency boost of not having a garbage collector. Instead learn a Functional Programming Language like Scala, OCaml or F#
Suppose we require a keyword â say var â before all binding patterns. This results in having to write things like for (&(var x1, var y1, var z1), &(var x2, var y2, var z2)) in points.iter().tuple_windows() {},
which is quite a bit more verbose than the current for (&(x1, y1, z1), &(x2, y2, z2)) in points.iter().tuple_windows() {}.
Not to mention youâll have to write let var x = 0; just to declare a variable, unless you redesign the language to allow you to just write var x = 0 (and if you do that, youâll also have to somehow support a coherent way to express if let Some(x) = arr.pop() {} and let Some(x) = arr.pop() else {todo!()}).
Suppose we require a keyword â say const â before all value-matching patterns that look like variables. Then, whatâs currently
I completely forgot that unit structs/variants define their own associated consts. I wonder if in patterns the type can be used instead of the associated const though? That might resolve a lot of the headache. Itâd mean changing the way the ident is resolved to looking in the type namespace though.
const <block> already works as a pattern I believe? That could be used instead for constants.
Literals would always work in-place as constant expressions.
I went the âonly let introduces bindingsâ route, and Iâm pretty happy so far:
if (left.next(), right.next())
... is (Some(let l), Some(let r)) { /* use l and r */ }
... is (Some(let l), None ) { /* use l */ }
... is (None, Some(let r)) { /* use r */ }
... is (None, None ) { /* use nothing */ }
}
Interesting perspective. Not sure I agree with most of the suggestions though.
Some of the earlier ones remind me of C#'s records. Were they inspired from them?
Some of the later ones just feel like Go to me.
I like the idea of dropping syntax for ranges. It does feel like the syntax just leads to confusion.
Named parameters are problematic because of parameter names becoming significant to the API. See Pythonâs * and / in parameter lists (like def foo(a, *, b) for example).
Some of the earlier ones remind me of C#'s records. Were they inspired from them?
No, that stuff is much much older.
Named parameters are problematic because of parameter names becoming significant to the API. See Pythonâs * and / in parameter lists (like def foo(a, *, b) for example).
I think the name problem is overblown, you can always have an annotation to facilitate name changes.
azdle@news.idlestate.org
on 03 Sep 15:24
nextcollapse
Iâm curious, have you used Rust much? Most of those changes just feel like ârust should be more familiar to meâ changes.
Also:
As Rust 2.0 is not going to happen, Rust users will never get these language design fixes
Isnât necessarily true for most of your suggestions. Since most of them are just changes to syntax semantics and not language semantics they could be made in an edition.
threaded - newest
I really should learn some Rust đ
Donât 99% of people donât need the efficiency boost of not having a garbage collector. Instead learn a Functional Programming Language like Scala, OCaml or F#
Or both? Functional languages are good to be familiar with, but so is Rustâs strict ownership model. Both lead to better code in all languages.
One mistake they did unfortunately ship though is bind patterns that look like variable names.
As in using consts (or variables you think are consts) as refutable patterns? Yeah this was an oversight Iâm sure.
One option is an edition change requiring a
const
keyword, soRight now they use a lint to try to warn the dev though.
There was a recent langdev Stack Exchange question about this very topic. Itâs a bit trickier to design than it might seem at first.
Suppose we require a keyword â say
var
â before all binding patterns. This results in having to write things likefor (&(var x1, var y1, var z1), &(var x2, var y2, var z2)) in points.iter().tuple_windows() {}
,which is quite a bit more verbose than the current
for (&(x1, y1, z1), &(x2, y2, z2)) in points.iter().tuple_windows() {}
.Not to mention youâll have to write
let var x = 0;
just to declare a variable, unless you redesign the language to allow you to just writevar x = 0
(and if you do that, youâll also have to somehow support a coherent way to expressif let Some(x) = arr.pop() {}
andlet Some(x) = arr.pop() else {todo!()}
).Suppose we require a keyword â say
const
â before all value-matching patterns that look like variables. Then, whatâs currentlyturns into either the inconsistently ugly
or the even more verbose
I completely forgot that unit structs/variants define their own associated consts. I wonder if in patterns the type can be used instead of the associated const though? That might resolve a lot of the headache. Itâd mean changing the way the ident is resolved to looking in the type namespace though.
const <block>
already works as a pattern I believe? That could be used instead for constants.Literals would always work in-place as constant expressions.
I went the âonly
let
introduces bindingsâ route, and Iâm pretty happy so far:.
In addition to that, I have my own list of things Rust should not have shipped with, but did.
Interesting perspective. Not sure I agree with most of the suggestions though.
Some of the earlier ones remind me of C#'s records. Were they inspired from them?
Some of the later ones just feel like Go to me.
I like the idea of dropping syntax for ranges. It does feel like the syntax just leads to confusion.
Named parameters are problematic because of parameter names becoming significant to the API. See Pythonâs
*
and/
in parameter lists (likedef foo(a, *, b)
for example).No, that stuff is much much older.
I think the name problem is overblown, you can always have an annotation to facilitate name changes.
Iâm curious, have you used Rust much? Most of those changes just feel like ârust should be more familiar to meâ changes.
Also:
Isnât necessarily true for most of your suggestions. Since most of them are just changes to syntax semantics and not language semantics they could be made in an edition.
The âdrop the array and slice syntaxâ is just nuts. With 0 justification.