Ogeon

joined 1 year ago
[–] Ogeon@programming.dev 13 points 2 weeks ago

A relatively cheap PC with Factorio and you are set. You won't spend much on food either, so win-win.

[–] Ogeon@programming.dev 13 points 1 month ago (1 children)

Reject C, return to assembly. Structured programming is the true oppression our generation never talks about.

[–] Ogeon@programming.dev 5 points 3 months ago (1 children)

That's silly. Luckily, I don't think this was the same situation. This was at a university and they had classes with other languages. The beginner classes were split into two variants, where some students (mostly CS students) learned C, and other students (economy, etc.) learned Python. I suppose they figured it was more useful to them or something.

[–] Ogeon@programming.dev 19 points 3 months ago (4 children)

I was a teacher's assistant in beginner's programming at university for a bit. I expected them to learn C, which I knew enough of, but I got assigned to a group that learned Python instead. I had never used Python at the time. I ended up having to speed learn it while trying to teach it, to not be completely useless.

[–] Ogeon@programming.dev 2 points 4 months ago (1 children)

A closure may/will try to capture by reference, so it may hold references to the calling function's scope. For example, this would want to hold a reference to x:

let x = 0;
std::thread::spawn(|| x += 1);

It's as if you had a struct like this:

struct MyClosure<'a> {
    x: &'a mut i32,
}

That makes the closure non-'static, since it holds non-'static references. The usual solution is to use the move keyword, to hint that you want it to move by default, or to use scoped threads. But yeah Send and 'static depend on the captures.

Am I correct in guessing that you handle is of Gontian origin?

Yes! 😁 I picked it when I used to play Tibia (15-20 years ago!), and it stuck with me since then. The correct spelling was already taken, so I modified it a bit. This name is usually available.

[–] Ogeon@programming.dev 2 points 4 months ago* (last edited 4 months ago) (3 children)

Your guess is correct, it should be understood as

F: ( FnOnce() -> T ) + Send + 'static
T: Send + 'static

The FnOnce() -> T is syntax sugar for FnOnce<(), Output = T> and the bounds after apply to F. That's also why T has separate bounds. They aren't propagated or inherited. It's just an ambiguous looking syntax, but T + Trait + 'lifetime isn't a valid syntax for applying bounds to T (unless I missed something).

The type F may be a closure over values from the calling thread. It has to be possible to send these values to the spawned thread, hence F needs Send + 'static. When the thread is done with its work, it returns a value of type T that gets passed back via JoinHandle<T>, so T needs Send + 'static too.

I hope this cleared things up a bit.

[–] Ogeon@programming.dev 11 points 4 months ago

That's definitely part of "the deal" with MIT and Apache. The other end of it is that they shouldn't really expect to get anything more than what the authors are willing to give.

[–] Ogeon@programming.dev 1 points 5 months ago

Right, there may be too many unknowns involved. 🤔

[–] Ogeon@programming.dev 18 points 5 months ago (4 children)

Option<T> has a From<T> implementation that lets you write Option::from($file_path).map(|path| path.to_string()) to accept both cases in the same expression.

https://doc.rust-lang.org/std/option/enum.Option.html#impl-From%3CT%3E-for-Option%3CT%3E

[–] Ogeon@programming.dev 12 points 5 months ago

Zooming in? In this economy?!

 

The maintainer here! Feel free to ask questions. I know especially CAM16 can feel a bit abstract if you aren't in the loop, but I will try to answer what I can. I have tried my best to explain the concepts in the docs, but it can always be better.

 

Just to reiterate what the linked blog post mentions; this isn't a bug with Iced, specifically, but seemed to have been brought into light by having Iced 0.12.0 among the dependencies. Many variants of this bug has been reported to the Rust compiler repository and some seem to be fixed by the next trait resolver.

 

Hey, folks! Here's another update for Palette, the color crate I'm maintaining. Feel free to let me know if you have any questions or feedback! I will do my best to answer.

 

I suppose I should start posting updates here too. 😁

view more: next ›