Dlaczego Rust nie nadaje się do GameDev?

Dlaczego Rust nie nadaje się do GameDev?

Wątek przeniesiony 2024-07-26 14:50 z Rust przez Marooned.

Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:minuta
  • Postów:6623
4

@Programator_: Rust nadał się do wskrzeszenia Gamedevu :] https://ruffle.rs/


🕹️⌨️🖥️🖱️🎮
K1
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 15 godzin
  • Postów:47
1

@Programator_: Według mnie może chodzić o dostępność bibliotek. Większość rozwiązań jest oparta na C++. Ten język jest dość mocno zakorzeniony w branży i minie mnóstwo czasu zanim zostanie zastąpiony przez coś innego. Poza tym korzyści jakie wynikają z zastosowania Rusta nie będą niwelować problemu z tworzeniem wielu rzeczy od nowa. Po prostu C++ jest sprawdzony i posiada wiele sprawdzonych rozwiązań, zaś użycie Rusta może być ryzykowne i kosztowne. Warto również dodać, że Rust jest znacznie mniej popularny od C++ i znacznie ciężej znaleźć programistów znających go. Dla większości producentów jest po prostu nieopłacalny.

Rust sam w sobie nie jest gorszy od C++, ale C++ jest bardziej popularny oraz jest wiele sprawdzonych technologii opartych na nim.


"C sprawia, że łatwo jest sobie strzelić w stopę. Z C++ jest to trudniejsze, ale za to w razie czego odstrzelisz sobie całą nogę"- Bjarne Stroustrup.
"A w C# jest to prawie niemożliwe, ale w razie czego strzelisz sobie w łeb" - Ja
Wniosek: im wyższy poziom abstrakcji, tym rzadziej występują błędy, lecz tym większe niosą konsekwencje
several
  • Rejestracja:ponad 15 lat
  • Ostatnio:około godziny
1

Uuuu, przez sugerowanie, że rust się do czegoś nie nadaje narażasz się na gniew rusto seksualnych wyznawów z reddita.

Czy naprawdę Rust 1.80 jest wolniejszy o 30% od C++?

W uśrednionych zastosowaniach ogólnych - nie. I rust i C++ możesz wyskalować by osiągnąć taki perf jaki potrzebujesz. Czasem koszt czasowy osiągnięcia pożądanej wydajności jest korzystniejszy dla C++ bo przez wiele lat dorobił się bibliotek, które przyspieszają sprawę, no i zawsze możesz sobie zejść do C.


edytowany 2x, ostatnio: several
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8399
0

Jest taka strona, gdzie są linki do bibliotek GameDev w Rust:
https://arewegameyet.rs/
choć nie wiem, na ile aktualna.

Według mnie może chodzić o dostępność bibliotek.

Myślę, że pod kątem samej dynamiki ekosystemu, to Rust to taki trochę jak JavaScript sprzed dziesięciu lat (porównuję dynamikę ekosystemu, a nie technologię!).

Ekosystem JS teraz się już ustabilizował mniej więcej, ale w JS też kiedyś wymyślali różne rzeczy, a potem wychodziły z mody i ciągle zostawały zastępowane. I nie było jednego standardu, a jak był, to był toporny (teraz w Rust zdaje się Bevy jest popularny, próbowałem coś w tym robić, ale dla mnie to strasznie ciężkie jest. Masę zależności, żeby zrobić HelloWorld).

A w Rust nawet jak jest modna biblioteka do gier/grafiki, to za kilka lat przestaje być modna/utrzymywana.

Dlaczego Rust nie nadaje się do GameDev?

Jak jesteś indie hobbystą, to wszystko się nadaje do GameDev, w czym ci się wygodnie pisze (chociaż Rust ma duży próg wejścia).


edytowany 4x, ostatnio: LukeJL
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:około 9 godzin
2
Spine napisał(a):

@Programator_: Rust nadał się do wskrzeszenia Gamedevu :] https://ruffle.rs/

nic wielkiego bo dawno jest coś takiego w javascript / typescript:
https://awayfl.org/
https://swf2js.com/en/
awayfl działa jakby płynniej i wygląda jakoś lepiej - jakby ruffle nie miało wygładzania krawędzi (testowałem side to side na pobranych z https://ruffle.rs/demo animacjach).
Zużycie procesora identyczne, zużycie pamięci 2x mniejsze na korzyść rusta - ruffle 115MB, awayfl 230MB

Programator_ napisał(a):

Czy naprawdę Rust 1.80 jest wolniejszy o 30% od C++? Macie jakiś rzetelny benchmark?

Wątpię, natomiast czy ma to jakiekolwiek znaczenie? Poza jakimiś symulacjami i może grami AAA gdzie wykorzystuje się możliwości sprzętu do końca to może ma ale większość gier ma minimalne zużycie CPU i większość się dzieje na GPU.
Pamiętam kilkadziesiąt lat temu jak się bawiłem w pascalu na komputerze z procesorem 16MHz który spokojnie płynnie ogarniał na ekranie 10000 jednostek (kropek) z jakąś tam prostą logiką.


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
edytowany 5x, ostatnio: obscurity
several
  • Rejestracja:ponad 15 lat
  • Ostatnio:około godziny
2

ale większość gier ma minimalne zużycie CPU i większość się dzieje na GPU

Jeśli mówimy o high endowych gierkach AAA to zużycie CPU jak najbardziej ma znaczenie i UE jest właśnie krytykowany przez fakt, że nie potrafi w pełni wykorzystać obecnej technologii przez co łatwo nadziać się na czkawki w postaci spadków FPS albo brakujących klatek. Był to jeden z tematów gdy CDPR ogłosił że przechodzi na UE, bo ichniejszy RedEngine w Cyberpunk fantastycznie potrafił wykorzystać CPU i nie zamierzają wykorzystywać UE bez własnych modyfikacji właśnie z tego powodu.

ps. Screenshot z cyberpunku pokazujący jak że potrafi działać płynnie gdy ma dostepne tylko intelowe e-cores.

screenshot-20240808143808.png

https://x.com/CapFrameX/status/1705949917976445181



edytowany 3x, ostatnio: several
Zobacz pozostałe 12 komentarzy
Wibowit
miałem na myśli numbe i jaxa - aa dobra, no faktycznie są biblioteki do pythona generujące natywny kod. tak czy siak, z tym jitem to chodziło mi głównie o tiered compilation, a więc przy pierwszym uruchomieniu shadera jest on kompilowany bardzo szybko (to minimalizuje przestoje przy pierwszym uruchomieniu), ale do mało wydajnego kodu, a potem jest odpalany i jednocześnie (równolegle do wykonywania shadera) kompilowany z lepszymi optymalizacjami, a potem mniej zoptymalizowany shader jest wyrzucany i zastępowany lepiej zoptymalizowanym. myślę, że to byłoby kiedyś wykonalne.
GO
@Wibowit: właśnie nie znam kompilacji shadera, ale kod typu libgccjit, się łatwo kompiluje, shadery mają swój pipeline do GPU, trzeba kiedyś to zrozumieć tak żeby w dyskusji potem móc się kłócić, bo tak to nie wiem dokładnie jak działają, chodź programowałem wiele razy, jedna funkcja, która dla każdego pixela się uruchamia bez pętli całą tablicę jednocześnie przejdziesz, jako parametry idx i idy bierze tylko.
Wibowit
ja już klepałem compute shadery hobbystycznie (implementowanem algorytmy sortowania na gpu), więc co nieco wiem jak działają. jednak nie schodziłem niżej niż opencl c (openclowa wersja języka c), więc nie znam szczegółów implementacyjnych i ograniczeń sprzętu, więc nie wiem jakie jest prawodpodobieństwo, że tiered compilation kiedyś wejdzie.
GO
@Wibowit: shadery się łatwo programuje, piszesz raz kod, który w funkcji dostaje x i y i masz przewidzieć dla danego pixela wartość, dzięki czemu jedna funkcja jest na tysiącach rdzeni wykonana i jednocześnie jeden shader dla każðego pixela się wykona jest to mega efektywne, ale za to ciężko się programuje, te pipeline co dodali w UE i Unity to jednak robią robotę, łatwo wiele zjawisk łączyć.
several
problem z unreal engine 5 jest też taki, że wykorzystuje pierdylion różnych shaderów Nie tylko. Jeśli wierzyć komentarzom na YT to CDPR zamierza całkowicie zrezygnować z domyślnego streamingu danych, które w UE nazywają WorldPartition, który zawiera takie systemy jak LOD i temu podobne. Z innych, podobno system aktorów również jest nie wydajny przy większych projektach.
Boski
  • Rejestracja:prawie 6 lat
  • Ostatnio:15 dni
  • Postów:131
1

Popatrzcie też pod kątem ludzi, bo to raczej ważne. Prowadzicie firmę, zatrudniacie od lat wielu specjalistów. Wchodzi boom, rzucamy c++ na rzecz rusta, bo jest szybszy.

  • Programiści żeby się przestawić będą potrzebować z roku. Żeby wyspecjalizować w niuansach kolejnych paru lat.
  • Zatrudnić nowych, rustowych? To też problem. W gd rozwiązuje się specyficzne zagadnienia, czy to graficzne czy algorytmiczne.
  • Zrobić stop na rok? Raczej mało kogo na to stać.

Nawet łatwiejszy a trudny przypadek - piszę w c# więc mogę wskoczyć na hop do backendu stronek? No nie - nie znam się na bazach, zabezpieczeniach sieciowych, dockerach itd.

edytowany 1x, ostatnio: Boski
LukeJL
Programiści żeby się przestawić będą potrzebować z roku - to jest jeden z powodów, dla którego nowe języki programowania zwykle zdobywają popularność powoli, latami (czy nawet dekadami). Poczekajmy z 5-10 lat. Z czasem pewnie coraz więcej będzie programistów Rusta i nie będą musieli się przestawić, bo będą go znać.
SE
  • Rejestracja:7 miesięcy
  • Ostatnio:7 miesięcy
  • Postów:12
0

Chciałbym żeby Rust miał taką prostą składnię jak Hylo, Vale. Do tego Hylo skopiował bezpieczeństwo pamięci z Rusta tylko dodał do tego mniejszą i prostszą składnię.
https://docs.hylo-lang.org/language-tour/functions-and-methods
https://vale.dev/

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)