[HN Gopher] Unreal Rust ___________________________________________________________________ Unreal Rust Author : ibobev Score : 125 points Date : 2022-09-04 20:30 UTC (2 hours ago) (HTM) web link (maikklein.github.io) (TXT) w3m dump (maikklein.github.io) | Animats wrote: | _This is great, because Unreal is a C++ project that 's not so | easy to just Rewrite In Rust._ | | True. Although rewriting Nanite in Rust would be useful. Nanite | is a very clever data structure for meshes. It's brittle, and | full of internal relative addresses within the data item, so it's | very vulnerable to buffer overflows. If it becomes widely used | outside of UE, it might become something that gets supported in | GPU hardware. | RcouF1uZ4gsC wrote: | > It's brittle, and full of internal relative addresses within | the data item, | | I am not sure how much you would gain by doing this. | | Internal references are one of the things where it is very hard | to express in safe Rust what you want to do (see doubly linked | lists and graphs). You can get around that by using vectors and | indexes, but that is bypassing the borrow checker, and with it, | much of your safety and mutability checks. | amelius wrote: | Yes, Rust is great for tree-like data structures. Add one | non-tree edge to your graph and you're in big trouble. | | This demonstrates the flexibility of GC'd languages, where | you don't paint yourself into a corner so easily. | oconnor663 wrote: | I always want to be careful with phrases like "bypassing | safety checks", because of course the Vec/index pattern is | 100% safe and (like any 100% safe Rust program) will | (approximately) never trigger undefined behavior. But it's | true that what was formerly undefined behavior will still be | a bug, where a stale index accidentally refers to a new | object that happens to get allocated in the same spot. You | can use slabs and generational indexes to catch these bugs, | but I don't know whether the performance cost of generational | indexes is acceptable in this case. | newpavlov wrote: | >Nanite is a very clever data structure for meshes. It's | brittle, and full of internal relative addresses within the | data item, so it's very vulnerable to buffer overflows. | | Using bounds checking is likely to kill performance on such | data structures, while using `get_unchecked` or raw pointers | will keep the issues. | | But even then, I would love to see Nanite implemented in Rust. | hertzrat wrote: | These discussions always remind me of some talks by Jonathan blow | where he argues rust doesn't solve the hard problems he needed it | to. There are podcast episodes with better discussions, but the | main one people link to seems to be this | | I haven't used rust, but I sympathize with his problems with | pointers and learned a lot from the various ways people try to | solve them | | https://m.youtube.com/watch?v=4t1K66dMhWk | [deleted] | Kukumber wrote: | Will it improve iteration time in Unreal? | | Because C++ already is way too slow to compile wich hurts | iteration time, wich is why most people fall back to plain simple | blueprints, and even that can become quite heavy | | Epic is working on a new scripting language that will improve | this | | What Rust brings to game development and how it's better than | C/C++ in that regard? | | Because you don't develop a game the same way, with the same | constraints as a driver for example | [deleted] | [deleted] | pornel wrote: | This is great, because Unreal is a C++ project that's not so easy | to just Rewrite In Rust. | | It's also nice it uses bevy's ECS. It's made to fit Rust's type | system and borrow checking model, and is highly parallel. It's | really awesome how easy it is to distribute work across cores | with it, without risk of heisenbugs thanks to Rust's data-race- | safety guarantees. | | I know game development sees traditional software best practices | as not applicable to them, but then games struggle with | showstopping bugs and single-core performance bottlenecks. I hope | someone will bet on Rust to show that things can be done | differently. | t8sr wrote: | Why do specifically Rust programmers think that people in every | domain are just misguided and waiting for someone to teach them | the right development practices? The sheer hubris... | | The kind of bugs that games mostly struggle with these days | have nothing to do with the stuff Rust is targeting, like | memory safety. They are "business logic" problems with many | interacting systems resulting in unpredictable behavior, buggy | level geometry, or poorly scripted missions not accounting for | all player behavior. How exactly does Rust help with any of | that? | nynx wrote: | I mean, dude, I've seen the C++ written by organizations with | supposedly highly-competent programmers. I think maybe we | should let programmers get a little help from language | designers. | waboremo wrote: | Why would you think that? All of the game developers I've met | don't really view themselves as separate from traditional | software best practices, just that there's a lot more involved | in making a game than people are ever really aware of. They're | also among some of the most talented programmers, the stuff | they have to come up with is insanity sometimes, so it's | certainly not about them not caring about best practices. | | Games aren't struggling because they're written in Unreal's | flavor of C++ (or whatever other currently existing engines and | their respective languages), there are insane deadlines always | being pushed. There is never enough time and never enough | money. Neither of these problems are solved with Rust, at least | not to a substantial degree. | Ygg2 wrote: | > there are insane deadlines always being pushed. | | Higher compilations times aren't all bad | https://xkcd.com/303/ | geenat wrote: | Also excited about the Python dialect coming to Unreal, which | should have a major effect on iteration time. | dagmx wrote: | Could you elaborate on Python dialect? | | Unreal already supports full Python for some stuff. They do | also have a language called Verse in the works but I don't | believe that it has any relationship to Python | mrlonglong wrote: | And I was thinking this was referring to the unreal mode on the | 32 bit x86 processors which would have been very cool if it was | possible with Rust. | [deleted] | forrestthewoods wrote: | Neat! | | I write a lot of C++ plugins that are used in both Unreal and | Unity. I like to think of them as "side loading". They can do | whatever they want, however they want. The API surface that | interacts with either engine is pretty minimal. | | I think "use Unreal as a renderer" is underrated. You could | imagine writing your full simulation logic independent of the | AActor framework and then using Unreal just for rendering. For a | client/server game the server might not use Unreal at all! | | I'm not sure how valuable it is to use Rust but also use Unreal's | framework and blueprints. Bevy + Unreal is a pretty fascinating | combo and how much lifting is done by each side can be done in | lots of ways. | vardump wrote: | I was almost certain this would be about running Rust under DOS | unreal mode, flat 32-bit address space in real mode. | | https://en.wikipedia.org/wiki/Unreal_mode | [deleted] ___________________________________________________________________ (page generated 2022-09-04 23:00 UTC)