News for hackers. Stuff that matters.
Re:Futurelock: A subtle risk in async Rust by mjevans on Friday October 31, 2025 @10:24PM (#45778767)
In my view, the major design sin was not _forcing_ failure into the outcome list.

.await(DEADLINE) (where deadline is any non 0 unit, and 0 is 'reference defined' but a real number) should have been the easy interface. Either it yields a value or it doesn't, then the programmer has to expressly handle failure.

Deadline would only be the minimum duration after which the language, when evaluating the future / task, would return the empty set/result.

Re:Futurelock: A subtle risk in async Rust by danielheath on Saturday November 01, 2025 @12:21AM (#45779231)
Does that imply a lot of syscalls to get the monotonic clock value? Or is there another way to do that?
Re:Futurelock: A subtle risk in async Rust by mjevans on Saturday November 01, 2025 @12:34AM (#45779274)
If the scheduler is doing _any_ sort of accounting at all to figure out any remote sort of fairness balancing at all, then whatever resolution that is probably works.

At least for Linux, offhand, popular task scheduler frequencies used to be 100 and 1000hz.

Looks like the Kernel's tracking that for tasks:

https://www.kernel.org/doc/html/latest/scheduler/sched-desig...

"In CFS the virtual runtime is expressed and tracked via the per-task p->se.vruntime (nanosec-unit) value."

I imagine the .vruntime struct field is still maintained with the newer "EEVDF Scheduler".

...

A Userspace task scheduler could similarly compare the DEADLINE against that runtime value. It would still reach that deadline after the minimum wait has passed, and thus be 'background GCed' at a time of the language's choice.

Re:Futurelock: A subtle risk in async Rust by jitl on Saturday November 01, 2025 @02:13AM (#45779597)
The issue is that no scheduler manages futures. The scheduler sees tasks, futures are just a struct. See discussion of embedded above: there is no “kernel esque” parallel thread
Re:Futurelock: A subtle risk in async Rust by muvlon on Saturday November 01, 2025 @06:54AM (#45780705)
On Linux there is the VDSO, which on all mainstream architectures allows you to do `clock_gettime` without going through a syscall. It should take on the order of (double digit) nanoseconds.
Re:Futurelock: A subtle risk in async Rust by kibwen on Saturday November 01, 2025 @09:14AM (#45781407)
> Deadline would only be the minimum duration after which the language, when evaluating the future / task, would return the empty set/result.

This appears to be misunderstanding how futures work in Rust. The language doesn't evaluate futures or tasks. A future is just a struct with a poll method, sort of like how a closure in Rust is just a struct with a call method. The await keyword just inserts yield points into the state machine that the language generates for you. If you want to actually run a future, you need an executor. The executor could implement timeouts, but it's not something that the language could possibly have any way to enforce or require.

Re:Futurelock: A subtle risk in async Rust by riking on Monday November 03, 2025 @09:57PM (#45807010)
Rust's no_std does not have access to a reliable clock.