Hacker News new | ask | show | jobs
by tyleo 64 days ago
I really want to like bevy but compile times are slow and the output binaries are huge.

I built a few games in WASM and was shocked to see many of the bevy variants larger than the Unity versions.

There’s definitely a market for rust game engines but it seems that no one’s hit the sweet spot yet.

2 comments

I hear Rust being slow to compile is their biggest gripe, but really - look at what you’re gaining for the slowdown!

Bevy gives you a very nice ECS to model your app but compilation can be slower than hand crafted code, while not using it gives you tonnes more code and the complexities that come with it, just to compile faster?

I don’t know what you mean by, “just to compile faster.” Compiling fast is critical to game development. There’s no formula for fun so you have to iterate extensively.

I also don’t think that other solutions are “tonnes more code.” Any code will explode in size if poorly written. The same is true for bevy.

I swear I have only heard about ECS and people trying to show off how good the ECS is when it comes to Bevy, never about an actual game.
"There are more rust game engines than rust games" - Confucius
"The claim which is made without proof can be dismissed without proof" - Big Brain
What are some notable rust games?
Here is ten games in bevy engine

https://youtu.be/50g3eSrSM6Q

Rust has like 2-3 game engines and a bunch of bindings.

Bevy gives you a very nice ECS

That's a single data structure. People say binaries start at 50 MB for a hello world program and 700 MB for the debug binaries.

https://old.reddit.com/r/bevy/comments/16wcixk/cant_figure_o...

It's a single data structure that contains your entire game though? The whole point of the ECS is that literally everything uses the same data; it's like if you modeled every object in the world with one struct that has an optional field for every piece of data that could exist. I'm not saying that necessarily makes the tradeoff worthwhile, but calling it a "single data structure" is a bit reductive.
It's a single data structure that contains your entire game though?

Are you asking?

but calling it a "single data structure" is a bit reductive.

No it isn't. It's like a tiny database. Depending on how someone implements it, it could use arrays, hash maps and b-trees. There is no universe where this means a binary that does nothing should be 50 megabytes.

> It's like a tiny database.

No it isn't. It also handles system management and concurrency, basically the main loop of your application.

I also would be cautious of assigning the blame of the binary size onto the data structure on its own.

I would say yes it’s like a tiny database but as well as all the other things your added. And I think that’s a good thing, because it does this at the type level!

I’m actually seeing if I can build a parser using bevy_ecs just because the way their state machine works, it looks like it would be fun

system management

What does that mean?

concurrency

Some data structures and databases deal with concurrency.

Compile times are my biggest struggle, too. I'm vibecoding Bevy with parallel agents, and the bottleneck is often compiling the changes on my 7950X, not getting Codex to write them.

As far as file sizes go, I'd be really interested in how a Rust compiler that didn't monomorphize so much would perform. Right now you have to modify the source code to write polymorphic generic functions, but it doesn't strictly have to be that way (at least as far as I can see).

I wouldn't use Bevy for a web only game either, especially while it's still single threaded on WASM.

Bevy website has some tips for improving compile times, have you tried them out?
Yes, absolutely. I did that before vibecoding too, as rapidly editing and testing is so crucial.

The way Bevy's internal state is so easily saved and loaded is convenient for this.