284 karma · joined July 11, 2018
You will hear people say "Hail Satan!" a lot, but it's meant more in the sense of what Satan stands for from the Satanic viewpoint, which is, among many other things, primarily freedom and knowledge.
I do believe in their tenets myself, I think they're remarkably well distilled principles. I think the first and fourth tenets are especially important for the current times.
I think what you'll find a lot of Satanists believe is "an it harm none, do what ye will", and you'll find that they take that principle more seriously than others who espouse that, such as Wicca.
Open source still has lots of life left in it, but copyleft licenses are now increasing in importance, and the days of letting it slide when a company violates your license are now gone.
To decide on what license you want, ask yourself, do you want this to improve software as a whole, or do you want this to improve FOSS? Does the image of proprietary software benefiting from your work soothe or anger you? Nowadays, it's becoming increasingly important to choose the latter. If you don't care what happens, you can license it as MIT or something. There are still valid cases for that.
For example, it is possible to make the borrow checker accept self-referential structures, but nobody has done the immovable type etc work required for that. Which means, for non-trivial data structures, you need to either reach for unsafe or Rc/Arc. I write a lot of very multithreaded code, so for me it's almost always Arc, which means paying for atomics. And since the Drop trait takes an exclusive &mut reference, you must use fugly nested structs to prevent UB if you have shared mutable pointers you need deleted automatically.
I'd recommend learning Rust, but I'd also strongly recommend that you willfully push the limits of the language. Rust needs to be stretched out to accommodate more contemporary programming constructs, and you can help with that. Also, stay away from the core team and organization, they're poisonous as hell. I'd recommend donating to gccrs to help alternate implementations.
On the positive side, you do still end up with an awful lot of zero-cost safe code, and Rust is pretty nice to work in once you actually understand it.
For very large projects, however, I advise against it. The dynamic type system bites you a lot in my experience. I prefer static typing.
REEEEEEEEEEEEEEEEEEEEEEE!!!!!!!!
/s
Sadly I've come to much the same conclusion as this article. Nobody has any idea what the fuck they're doing, especially the people who think they do. I certainly don't know wtf I'm doing.
Me: Stupid? Probably not quite, at least in most ways. Lazy? Guilty. Possibly insane? Remove the "possibly".
It's been obvious for years, at least to anyone in my circle. Even my boss has said as much. We can feel it in our bones. Things are getting worse, not better, and it's accelerating.
We did this to ourselves, with our own greed and indifference, and now it's time to reap our rewards. Even now, rich nations are hoarding vaccines for themselves.
We have learned nothing and we will learn nothing, until it is too late.
If you want full control and easier interfacing with the OS, C++ is probably a little better, but Rust is definitely a little easier to work with once you learn the language.
You don't seem to understand the concept of undefined behavior. What I'm trying to say is that even if rustc generates the correct output, the code could still officially be declared UB, just as it is now in debug mode. If it breaks logic that relies on the exclusivity of &mut, well, that's what UB does, it breaks things.
It is entirely an optimization option.
You're right that I think it would be nice if you could have multiple &muts created from raw pointers, but I'm not asking for that. The reason these things are issues at all is because Rust uses these references for things like RAII (e.g. &mut self in drop()), and there's no way to use raw pointers instead. If Rust provided a way to use raw pointers more easily in the places you need them, this would be a non-issue. But right now, the unsafe/safe boundary is very dangerous in Rust, so dangerous that I'm uncomfortable working in it even though I've worked in C and C++ for over a decade, and it's entirely a self-inflicted wound by the Rust devs.
The truth of the matter is that I'm horrified by stacked borrows and what it represents, because it will make unsafe code extremely painful to write and extremely brittle. Rust needs a way to opt-out of these aggressive optimizations, like every other systems language ever has had for the majority of their lifespans. A function attribute would be acceptable, but the truth is, Rust is not open to any such enhancements for unsafe code. They seem hell-bent on enforcing "safety" on deliberately unsafe code, even if it breaks that code in subtle ways.
EDIT: I have no interest in arguing further. This is a hopeless and frankly rather disheartening topic for me. Rust has brought out more strong emotions from me than any other language I have ever used. I suppose why it matters to me is because I see such potential in Rust, and I feel it's being taken down the wrong path. But, that's just my opinion.
Yeah that was me I'm afraid. That said, I strongly disagree that -fno-strict-aliasing changes language semantics in an appreciable way, since using it to deliberately circumvent the aliasing rules still wouldn't be sanctioned by Rust. You'd just have a predictable, mostly acceptable form of "UB" rather than whatever glitter the compiler feels like farting into your face. If I was asking for a flag that broke existing code, I'd understand, but since this change is totally backwards compatible, I don't understand the objection.
I guess I can take comfort in the fact that having kids with a little extra chönk isn't that big of an issue.