site banner

Friday Fun Thread for January 31, 2025

Be advised: this thread is not for serious in-depth discussion of weighty topics (we have a link for that), this thread is not for anything Culture War related. This thread is for Fun. You got jokes? Share 'em. You got silly questions? Ask 'em.

2
Jump in the discussion.

No email address required.

Well, I've been switching back and forth between Windows 10 and Linux Mint for a few weeks now. Windows for work, and Linux for pleasure. I stopped trying to have steam share a steam library between both OS's. For one, Linux and Windows kept fighting over whether the linux or windows versions of the games should be installed. Second, I saw a lot of posts about how Linux eventually corrupts NTFS drives if you try to use them for anything other than simple data storage. So that's a thing I guess.

I've been playing Doom 2016 in Linux thanks to Proton, and it's pretty OK. Every now and again pulling up the menu tanks the framerate, but not consistently. Outside of that it runs fantastic. Because I'm a fucking nerd, I got some simple C programming with SDL set up, as well as a Rust dev environment because I decided I need to learn that. I hate it. It disagrees with all my sensibilities about "talking computer", and thus far I find it's constructs around "borrowing" references silly and contrived, especially in light of being able to assign unsafe sections of code that ignore it's memory safety rules. I guess it assumes you'll be responsible with that, but it feels like a half measure to me, and no replacement for actual skill. All the same, since I mostly work on government contracts, a day may come where it's a requirement.

Anyways, Linux seems like a super viable alternative to Windows these days thanks to Proton. If my work didn't require windows, I'd try to shift over to it entirely. But since a local instance of IIS is essential in my day to day work, that's incredibly unlikely.

It disagrees with all my sensibilities about "talking computer", and thus far I find it's constructs around "borrowing" references silly and contrived, especially in light of being able to assign unsafe sections of code that ignore it's memory safety rules. I guess it assumes you'll be responsible with that, but it feels like a half measure to me, and no replacement for actual skill.

lol, I'll put this in hardcore WoW terms: many imagine skill as being able to stylishly finesse your way out of thorny situations; anyone who's ever succeeded at this game mode knows the real skill is not getting yourself into bad situations in the first place. For example, Xaryu -- professional WoW streamer and many-time rank-1 PVP gladiator -- died in the harpy cave in an extremely stylish way. In his next run, did he learn how to super-skill the harpy cave even betterer? Well, yes, in the truly high-IQ way: he decided going in there was a terrible decision in the first place and he wouldn't do so this time. He hit 60 on that character.

This is the difference between a C++ developer mindset and a Rust developer mindset. It is the humility to accept that you are, in fact, not skilled enough to get it right all the time, so you should stop playing with fire in the first place.

This is the difference between a C++ developer mindset and a Rust developer mindset. It is the humility to accept that you are, in fact, not skilled enough to get it right all the time, so you should stop playing with fire in the first place.

I think that argument just isn't supported by the evidence of 40 years of computers more or less working just fine. People are skilled enough to just get it right enough of the time. I think arguments otherwise are just Rust fanatics pretending the history of computer can be broken up into Pre-Rust and Post-Rust eras.

The problem is that suddenly, thanks to the internet, literally every single line of code needs to become a hardened attack surface. "Exploits" didn't matter in a pre-internet age, and I also question how much Rust will really address them. I doubt at the end of the day a Windows written increasingly in Rust will prove more secure than a Windows written in C. I think Rust is necessitated more by the falling skill level of corporate programmers than anything else, and I also doubt it will remediate that problem. If anything treating Rust as a panacea for a lack of skill will only make the problems worse. Less buffer overflow exploits perhaps, still plenty of attack surface for malicious actors to abuse.

All that is an aside though to my dislike of Rust, which I'm only learning for professional reasons. I said it disagrees with my sensibilities about "talking computer", and let me elaborate on that.

I want to bit-fuck the hardware I paid for however I wish. I want to bend over my mechanical slave and force it to do my bidding without a single complaint. I have friends who gravitate towards LISP or Go, I gravitate towards assembly. I want to be at the metal with a big spiked club, with the CPU to afraid to talk back. Because I don't tolerate backtalk from my machines.

I mean, the person reverse-engineering the Mac M1 GPU and building a Linux driver for it is doing so in Rust. I don’t know how much more bare-metal you can get than that.

Rust isn’t about gaining safety by being far from the hardware, the way memory managed languages with runtimes are; it’s about giving the systems programmer a mental model that actually has some degree of engineering sense behind it. You seem to have the impression that C++’s danger is what makes it an appealing tool, but the danger is to the user not accomplishing their intended goal, not to an enemy: it’s a kitchen knife which is all blade and no handle. Moar blaDe doesn’t make the knife better at cutting food into sizes and shapes you want for your sandwich.

And disdain for C++ long predates Rust. If you need to copy your opinions from someone high-status, I’ll defer to Linus Torvalds on the matter.

While I do find the fanaticism around Rust offputting, especially considering how gay it is, the language itself is actually grounded in a better theoretical foundation than its legacy competitors.

the language itself is actually grounded in a better theoretical foundation than its legacy competitors

Something every single functional language has, technically correctly, claimed.

There is a reason why functional languages are created- usually an obsession with safety and mathematical purity over all else; that reason is also inextricably linked to why every other language just takes the parts of those languages that enhance one's ability to reason imperatively about the code and leaves the rest.

You seem to have the impression that C++’s danger is what makes it an appealing tool

Inbuilt disdain of "computer says no because reasons" not enough? But then, that depends on thinking that "shipping product that works well enough" is more important than "mathematically correct, but your competition beat you to market by a month", and because Rust is developed by those who emphasize the latter, and not the former, it's going to make compromises in development speed for that safety (which is why everyone tends to bitch about the borrow checker).

Rust is not a replacement for C++. Rust is a replacement for Ada.

Inbuilt disdain of "computer says no because reasons" not enough?

What exactly are you arguing against here? Error messages at compile time? There’s plenty of interpreted languages that crash at runtime if that floats your boat.

Presumably, such people enjoy removing the annoying "check engine" light and just waiting for their engine to start smoking.

that "shipping product that works well enough" is more important than "mathematically correct, but your competition beat you to market by a month"

I don’t believe this is even a real dichotomy, at least in the Rust vs mainstream language sense. (Obviously if you’re formalising something in Lean4, that’s going to be comically inefficient compared to just building it, but that’s so far from the Rust vs C++ land it’s not even relevant.) The reason companies are fond of mainstream languages has nothing to do with engineering, it has to do with the availability of replacement labor. It doesn’t matter what technical properties the mainstream language has; what matters is that it’s mainstream.

which is why everyone tends to bitch about the borrow checker

I’m going to out myself as much crazier than anyone may have expected, but: the borrow checker is the least-inspired part of Rust and the language would be better without it entirely. The reasons Rust is good are because it actually has sane primitive types, non-ambiguous syntax, algebraic data types, parametric polymorphism, a non-busted standard library, and perhaps most importantly: cargo.

The borrow checker paradigm is basically a half-baked bastardization of linear types, and the way it’s done has some serious theoretical deficiencies that basically mandate leaky abstractions. But I’m not going to babble about that here.

The borrow checker paradigm is basically a half-baked bastardization of linear types

The types aren't even linear is the worst part.

My personal favorite:

https://github.com/Speykious/cve-rs

The comical part is they try to act like this is some minor compiler bug that can be fixed and not a core problem with the type theory (or lack thereof) itself.

Unsoundness of this sort would be fine if Rust portrayed the type checker as a mere tool to assist a well-intentioned author in reasoning; but it’s portrayed as an authority capable of guaranteeing memory safety, and you’re expected to submit yourself to it.