152 karma · joined November 17, 2016
The only thing this guy was doing was making it so customers don't have to download the iso on a USB or CD themselves, and recycling e-waste in the process.
I run Fedora on an XPS 13. I've never run into #1 or #2. I hit super+L by habit before closing the screen so I don't know about #3, but closing it while typing this comment put it to sleep. I've only reinstalled the OS once to get rid of the built in Ubuntu in favor of Fedora for #5. For #6 I haven't had it crash on me, but I have been RAM-swapped to death after having too many Firefox tabs and Docker builds at once. The only audio/network/charging problem I've run into is that Spotify doesn't bind to the keyboard Play/Pause events.
I'm pretty sure the use case of this is more akin to an electron replacement, and not a production web server. So the user would just download and run the binary, and interact with the app from their browser.
For static-linking the sqlite3 library, if you're using rusqlite you can just specify the bundled feature in Cargo.toml.
``` [dependencies.rusqlite] version = "your-version-number" features = ["bundled"] ```
Now if this was a production server having to service thousands of clients than the sendfile optimization becomes much more important.
Still, I agree that Rust's syntax approaches C++ level of complexity at times. I find that writing actual statements and expressions is simple enough, but writing structs, lambdas, and function definitions requires knowing how to specify types, type bounds (if using generics), lifetimes (if using references), and Fully Qualified Syntax (for referencing types/items in other modules). And that's before actually having to come to terms with the borrow checker.
For what it's worth, once you get over the initial learning curve the cognitive burden goes down. Rust's syntax, to me, is actually visually distinctive enough that it's easy to parse out types, expressions, declarations, etc. from just a quick glance.
Also, this assumes that you ascribe to the anti-natalism viewpoint, which to me seems like as much of a thought experiment as nihilism.
That being said, some of these optimization techniques completely took me by surprise. Defining the sort function as a cache lookup that converts the sorting template to a string and then builds an anonymous function out of that string which is finally used as the exported function seems, to me, like an extremely roundabout way to achieve inlining the comparator. And the argument-count adapter having such high overhead on V8 seems like something that should generate a warning for the developer.
The cache analysis and algorithmic improvements seemed fairly straight forward, but when you're at the point of having to manually implement memory buffers to alleviate GC pressure, you're diving below the level of abstraction that the language itself provides you. At that point, I think the argument to switch to a language designed to operate at that level of abstraction holds some sway.
For small scale applications, I 100% agree. Sqlite3 is so easy to back up and configure.