10 karma · joined April 17, 2026
> macOS emits x86-64 AT&T assembly
Seems like an obvious issue given that Apple makes no x86 machines, hasn't for three years, and plans to sunset Rosetta 2 in one year. The whole conceit of this "Freelang" project is that it has no "magic", and then incredibly just a bit further down the README states it has a stop-the-world mark/sweep garbage collector. That is quite magical, no? After reading the GitHub I confess I don't even understand what "magic" the authors are even complaining about. Honestly it seems like it's basically the same concept as Go, vibe-coded, with more pretense, worse syntax, and without the benefit of Google engineering.
You could implement the same functionality in Rust, using a custom target JSON without any libstd/libc. I've done so. It just requires that you accept some limitations and build your own abstractions around unsafe syscalls.
Web/server frameworks have to bind to a runtime because they have to make decisions about how to connect to a socket. Hyper is sufficiently abstract that it doesn't require any runtime, but using hyper directly provides no framework-like benefits and requires that you make those decisions and provide a compatible socket-like implementation for sending requests.
To spawn a future on tokio, it has to implement `Send`, because tokio is a work-stealing executor. That isn't the case for monoio or other non-work-stealing async executors, where tasks are pinned to the thread they are spawned on and so do not require `Send` or `Sync`, so you can use Rc/RefCell.
Moreover, the way that async executors schedule execution can be _different_. I have a small executor I made that is based on the runtime model of the JS event loop. It's single-threaded async, with explicit creation of new worker threads. That isn't a model that can "slot in" to a suite of traits that adequately represents the abstraction provided by tokio, because the abstraction of my executor and the way it schedules tasks are fundamentally different.
Any reasonably-usable abstraction for the concept of an async runtime would impose too many constraints on the implementation in the name of ensuring runtime-generic code can execute on any standard runtime. A Future, for better or worse, is a sufficiently minimal abstraction of async executability without assuming anything about how the polling/waking behavior is implemented.