OP really needs to heed this advice. Modifying things in the cache will cause breakages that will confuse the hell out of you.
OP really needs to heed this advice. Modifying things in the cache will cause breakages that will confuse the hell out of you.
Speaking as an annoying Rust user, you’re being bigoted. I’m annoying, but the vast majority of Rust users are normal people who you wouldn’t even know are using Rust.
Don’t lump all the others in with me, they don’t deserve that.
Best practice when using .unwrap()
in production code is to put a line of documentation immediately above the use of .unwrap()
that describes the safety invariants which allow the unwrap to be safe.
Since code churn could eventually cause those safety invariants to be violated, I think it’s not a bad thing for a blunt audit of .unwrap()
to bring your attention to those cases and prompt to reevaluate if the invariants are still satisfied.
But only if pattern matching were included, otherwise they would be as unpleasant as C++'s std::variant
.
This makes a lot of sense, but the functions were Rust bindings for plain C functions, they weren’t function pointers. Granted I could have put pointers to the function bindings into fields in a struct and stored that struct in the mutex, but the ability to anyhow call the bindings would still exist.
It’s a massive win, and I would question the credibility of any systems programmer that doesn’t recognize that as soon as they understand the wrapper arrangement. I would have to assume that such people are going around making egregious errors in how they’re using mutexes in their C-like code, and are the reason Rust is such an important language to roll out everywhere.
The only time I’ve ever needed a Mutex<()>
so far with Rust is when I had to interop with a C library which itself was not thread safe (unprotected use of global variables), so I needed to lock the placeholder mutex each time I called one of the C functions.
Which is exactly the position that the Rust for Linux devs have understood and accepted for themselves, and yet they still get yelled at (literally, in public, on recordings) by C Linux devs for existing.
Oh and they get snidely told that introducing the Rust language must be a mistake because suggestions to introduce other languages to the kernel turned out to be mistakes and obviously Rust is the same as all those other languages according to C developers who, by their own admission, have never used or learned anything about Rust beyond a superficial glance at some of its syntax (again this was recorded from a public event).
Rust makes sense though.
Yeah the only way it would be that high is if it lumps C and C++ together. But at that point it may be an underestimate.
A better language wouldn’t have any need to use POSIX signals in this way.
I do think that specific point is catering too much to sloppy get-it-done-fast-and-don’t-think developers. It’s true that they are Rust’s most untapped demographic, and the language won’t reach the pinnacle of mainstream usage without getting buy-in from that group, but I really think they’ll be won over eventually by everything else the language and ecosystem offers, and .unwrap()
won’t be such an unreasonable price for them to pay in the long run.
The ideas in the article are great, I’m just a little confused by some aspects of the author’s tone where it sounds like there’s an assumption that the Rust community isn’t interested in expanding the scope of the language to every conceivable use case domain and height.
For the 4 years that I’ve been paying attention the Rust language is advancing faster than I ever thought a language is able to, but more importantly that advancement has been sound and sensible. So far I haven’t seen a language feature make it into Rust stable and thought “Oh no that was a mistake”, even as features roll in at an incredible rate.
Compare that to the C++ ecosystem where I feel like almost every new language feature is arriving very slowly while also being poorly executed (not that I think the ISO committee is doing their job badly; I just think it’s effectively impossible to make new language features in C++ without gross problems so long as you demand backwards compatibility).
I fully expect everything in this very sensible list to make it into the language at a reasonable pace. I don’t object to the “bikeshedding” as much as the author here seems to because I’d appreciate if Rust can avoid painting itself into a corner with bad language design choices the way C++ has. If we’re talking about language ergonomics, I’d rather suffer some tedium now while waiting for a feature to be polished than be stuck in a corner forever in the future because a bad decision was made.
One example I can think of is I’m not convinced that his proposal around kwargs for function arguments is a good thing, at least not without some serious thinking. For example should it support the ability to reduce foo(a, b, x: x)
to just foo(a, b, x)
like what’s done for struct construction? If so then the optional arguments start to look too much like positional arguments and the syntax starts to get questionable to me. On the other hand if that simplification isn’t supported then that becomes inconsistent with other parts of the language. So this is something that I believe requires a lot of serious thought, and maybe the better answer is to have built-in macros for generating builder structs
That being said, the edition system of Rust could afford us some leeway on not being forever trapped with a bad language design choice, but I don’t think we want to rely too much on that.
Considering most JIT compilers for JavaScript are written in C++, I can’t conceive of a reason you couldn’t implement one in Rust.
Is part of your requirement that unsafe
doesn’t get used anywhere in the dependency tree? If so you’d have to take away most of the Rust std
library since many implementations in there have small strategic uses of unsafe
under the hood.
In my entire software engineering career, which spans embedded systems to CAD applications, I’ve never encountered a case where GOTO
is actually needed (but maybe some places where it can be used as a dirty shortcut to save you some lines of code).
As for arbitrary function pointers, if those function pointers are written in Rust then they’ll come with all the safety assurances afforded to Rust code. I suppose if you’re worried about the danger of running ussr-code with unsafe
in it, you could probably have your JIT refuse to compile the unsafe
keyword specifically.
I really don’t think that there is any perfect programming language.
You’d be wrong 🦀🦀🦀🦀🦀
Disclaimer that I have no experience with writing compilers myself, but conceptually I don’t see any obvious reason that someone couldn’t create a JIT compiler for Rust so that it can be treated like a scripting language and do rapid iteration…
I think it’s specifically meant to debunk the idea that meat is the only affordable source of protein-dense food, when in reality there are vegan protein-dense foods that are even more affordable.
That doesn’t conflict with the fact that a well balanced diet is important; it’s just addressing one sticking point that tends to come up in these conversations.
Still much better than C++ templates, and I say that as someone who used to genuinely love C++ template metaprogramming. Admittedly Rust traits+generics are far more limited than C++ templates, but very often I find that to be a positive. The list of things that I feel traits+generics are missing is small and rapidly shrinking.
A good enough compiler would prevent them from happening 🦀
Sorry to be pedantic but Rust only guarantees no data races can happen. It does not prevent race conditions more generally.
Don’t get me wrong, I absolutely love the language for sparing me from the hell that is data races, but the language alone won’t solve race conditions for you.
These graphs only cover the demographic of 18-29 year olds, which historically do lean heavily towards progressive.