Not original commenter but I think jackric already alluded to the increased cynicism that develops from clickbait. Personally, when I see so many ppl giving up honest and nuanced statements/opinions for hyperbole in order to gain views/likes, it's disappointing.
I also thought regex seemed overkill and didn't feel like adding an extra crate to my Cargo.toml. Luckily for the days I attempted I was able to get by on just the split method for str's[0] which was nice and concise. So for your regex example you could also do:
// #1 @ 916,616: 21x29
let parts: Vec<&str> = l.split(['@', ',', ':', 'x'].as_ref()).collect();
let x = parts[1].trim().parse::<i32>().expect("x as i32");
let y = parts[2].trim().parse::<i32>().expect("y as i32");
let w = parts[3].trim().parse::<i32>().expect("width as i32");
let h = parts[4].trim().parse::<i32>().expect("height as i32");
The next step could be to remove `.collect()` and use `.next()` for each subsequent part. Zero allocations!
let mut parts = l.split(&['@', ',', ':', 'x'][..])
.flat_map(|s| s.trim().parse::<i32>().ok());
let x = parts.next().expect("x as i32");
let y = parts.next().expect("y as i32");
let w = parts.next().expect("width as i32");
let h = parts.next().expect("height as i32");
> and didn't feel like adding an extra crate to my Cargo.toml
Why not? cargo makes it extremely easy to add new crates. The hardest part is figuring out what dependency you want, but once you know what it is, adding it is really easy.
Totally agree, cargo makes it easy. Honestly it’s just that the level of laziness is so high when I’m programming on something personal after work that even having to switch to chrome to check a version number on crates.io will be avoided.
You might be interested to know that cargo can do that for you
$ cargo search regex
regex = "1.1.0" # An implementation of regular expressions for Rust. This implementation uses finite automata and gua…
regex-automata = "0.1.5" # Automata construction and matching using regular expressions.
…
The docs are a tad misleading but the important piece is to look at the signature. The `where P: Pattern<'a>` portion states that split needs a type that implements the Pattern trait. If you follow the link to the Pattern trait then at the bottom you'll see a section[0] listing types implementing the trait (&[char] being one) and therefore can be passed into split. Hope that helps!
If you think of it more like “how do I want to handle something bad happening?” instead of “what category does this fall under?” then I believe electrograv‘s point of not being clear-cut becomes more clear.
For example in rust most code that can fail will return a Result and thus the compiler forces you to handle that. However, that code can just as easily panic and behave like an uncaught exception would (thread exiting). An example would be the division operator and the array index operator. Both division-by-zero and out-of-bounds errors can certainly be handled by using a Result but in this case the Rust developers made a decision to use panic. Are these both exceptions bc they are handled like a typical uncaught exception or are they errors bc it’s conceivable to handle them just like a failed file open?
There’s a great Welcome to Macintosh podcast episode[1] that interviews Jim Reekes about this history, highly recommend it. Fun fact, in addition to the iconic startup sound Jim is also responsible for the camera shutter sound on iPhones.
Hmm I’m seeing the opposite. The last graph shows Google’s hash table outperforming in all but a few places, including at 400k. Perhaps you mixed the axes up, lower is better here.
I also just want to comment that skepticism to high claims is good but your comment seems a bit too harsh. Briefly looking at his post where he goes into his “fastest hash table” it’s quite long, very detailed and has similar graphs. That doesn’t seem under-researched to me.
> Hmm I’m seeing the opposite. The last graph shows Google’s hash table outperforming in all but a few places, including at 400k.
You're exactly right, General Pizza. I was trying to say that the Google table was faster, even though the author claimed that his or her table was "fastest" without qualification.
Thanks for pointing that out; I'll leave my post as it is so yours continues to make sense in context.
Hmm, I've got both Bluetooth File Exchange.app and Bluetooth Explorer.app on my mac which are both from Apple and I think what you're looking for. Not sure if they came default or when I downloaded the bluetooth dev kit years ago. I remember using it to transfer mp3s onto a ZTE bar phone back in the day.
> From what I understand, the definition of a transpiler is one which almost exclusively performs syntax-syntax transforms, and doesn't delve into the semantics with e.g. dataflow or control flow.
A counter example to this is the typescript compiler which some might describe as a transpiler. It does sophisticated control flow analysis to, for example, make sure all branches of an if statement return the same type.
Exactly. Some of the points just seem ridiculous and make me wonder what this person expected to get out of the book. For example:
> Halliday’s character combines the worst traits of Elon Musk, Mark Zuckerberg and Kim Dotcom.
Do you think its purpose is to inspire you to be a better person? Since when are fiction books self help books? Since when are perfect characters the most interesting ones?
https://podcasts.apple.com/us/podcast/the-haskell-interlude/...