197
I love Rust (lemmy.blahaj.zone)
you are viewing a single comment's thread
view the rest of the comments
[-] 2xsaiko@discuss.tchncs.de 1 points 3 hours ago

The bingo one actually uses crossbeam channels instead of mutexes, so that's nice. I haven't looked too closely at it though.

I don't think you can do too much about the Spectrum one if you want to keep the two threads, but here's what I would change related to thread synchronization. Lemmy doesn't seem to allow me to attach patch files for whatever reason so have an archive instead... https://dblsaiko.net/pub/tmp/patches.tar.bz2 (I wrote a few notes in the commit messages)

Just to give the reason for Rc in the current project. I’m reading in a M3U file and I’m going to be referencing it against an Excel file. So in the structure for the m3u file, I have two BtreeMaps, one for order by channel number and one by name. Each containing references to the same Channel object.

So basically it's channels indexed by channel number and name? That one is actually one of the easy cases. Store indices instead:

struct Channels {
  data: Vec<Channel>,
  by_number: BTreeMap<u32 /* or whatever */, usize>,
  by_name: BTreeMap<String, usize>,
}

// untested but I think it should compile
fn get_channel_by_name(ch: &Channels, name: &str) -> Option<&Channel> {
  Some(&self.data[*ch.by_name.get(name)?])
}
this post was submitted on 15 Nov 2024
197 points (93.8% liked)

Programmer Humor

32472 readers
610 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS