Używanie C ++ 11 do wieloplatformowego rozwoju silnika gry


18

Uwaga: To nie jest pytanie „podaj swoją opinię” na temat C ++ 03 i C ++ 11.

Nasz silnik gry, napisany w C ++ 03, został zaprojektowany do kompilacji w systemach Windows, OSX i iOS. Wsparcie dla systemu Linux jest planowane w (bardzo) bliskiej przyszłości. Nasze doświadczenie jest ograniczone, jeśli chodzi o konsole, dlatego zadaję to pytanie.

Obecnie zastanawiamy się, czy przejście na C ++ 11 i użycie niekompatybilnych funkcji standardu C ++ 11 może stanowić problem w najbliższej przyszłości, gdy będziemy musieli przenieść nasz silnik na dowolną konsolę obecnej generacji (być może kompilatory obsługiwane przez niektóre konsole nie obsługują jeszcze C ++ 11? Nie wiemy ...).

Tak więc, twórcy gier, którzy mają doświadczenie na wielu platformach i konsolach, czy uważasz, że powinniśmy trzymać się C ++ 03, dopóki nie pojawi się nowa generacja konsol i większość osób przełączyła się na standard C ++ 11 (czy już?). A może większość konsol korzysta z kompilatorów / support (VC ++, GCC lub wariantów?), Które już obsługują funkcje C ++ 11?


1
Moja wiedza jest nieco nieaktualna, więc nie opublikuję tego jako odpowiedzi, ale moje wcześniejsze doświadczenia z kompilatorami konsolowymi są takie, że masz szczęście, jeśli pasują one do starego standardu, nie mówiąc już o nowym.
— Kylotan

1
Jakie funkcje i dlaczego są tak ważne, że rozważasz użycie standardu, który nie jest w pełni wdrożony nawet na najpopularniejszych platformach programistycznych?
— snake5

4
@ snake5: auto, lambda's, alias szablonu, delegacja c-tor. Te funkcje nie tylko sprawią, że nasz kod będzie bardziej czytelny / łatwy w konserwacji, ale również zwiększą wydajność. Samo słowo kluczowe auto jest jedną z rzeczy, za którymi bardzo tęsknię, kiedy przechodzę z C ++ 11 na C ++ 03. Inne funkcje, takie jak szablony variadic, chociaż są bardzo wydajne i mogą zdecydowanie poprawić kod, możemy się obejść (i nie są do tej pory zaimplementowane przez kompilator VC ++).
— Samaursa

Dodając do tego, co skomentował Kylotan, w pełni zgadzam się z jego opinią, a nawet dodaję konkretny przykład z mojego doświadczenia. Jeśli zamierzasz rozszerzyć ten silnik na platformę Android, co można zrobić za pomocą C ++, będziesz miał zły czas, ponieważ funkcje C ++ są niekompletne w NDK. Nie będziesz w stanie korzystać z nowego standardu, a nawet niektóre rzeczy z poprzedniego będą wadliwe.
— Grimshaw

1
@DevilWithin, bez żadnych problemów korzystam z kilku funkcji C ++ 11 w Android NDK.
— notlesh

Odpowiedzi:


19

Jeśli polegasz na swoim kodzie, aby płacić za jedzenie i schronienie, i potrzebujesz obsługiwać wiele platform na nieznanych przyszłych platformach (lub może być konieczne, aby w przyszłości obsługiwać różne platformy), zaprojektuj swój kod, aby polegał na grupa poprawnego przestrzegania przez nieznanych autorów kompilatorów najnowszych standardów językowych jest niebezpieczna (i powiedziałbym, nieodpowiedzialny). Jest to niebezpieczne dla ciebie, a zatem również niebezpieczne dla twoich podopiecznych.

Jeśli jesteś gotów podjąć takie ryzyko ze względu na auto, to na wszelki wypadek idź na całość. Ale nie zamierzam ci tego robić.

Ponieważ z mojego doświadczenia wynika , że przejście na wiele platform, szczególnie na konsole , najlepiej osiągnąć poprzez dążenie do najniższego wspólnego mianownika, co do którego masz pewność, że będzie działać praktycznie wszędzie, nie polegając na wszystkich najnowszych funkcjach języka Whiz-Bang. Jeśli któregoś dnia będziesz musiał przenieść się na platformę, która ich nie obsługuje, musisz przepisać swój system od nowa. Czy stać Cię na płacenie pensji / czynszu, dopóki tak się stanie?


4
+1 za to (i resztę postu, ale za to): „poleganie na pewnej grupie nieznanych autorów kompilatorów poprawne przestrzeganie najnowocześniejszych standardów językowych jest niebezpieczne”. Eksperymentowanie z najnowszymi zabawkami jest zawsze zabawne, polegając na nich nie tyle.
— NoobsArePeople2

2
Zawsze bardzo zależy mi na udzieleniu tych „ostrożnych” odpowiedzi, szczególnie gdy wyraźnie nie są to, co chce usłyszeć oryginalny plakat. Ale widziałem duże błędy kompilatora na konsolach zbyt wiele razy w mojej karierze, abym mógł swobodnie wchodzić na nowe standardy językowe w projekcie międzyplatformowym. Konieczność przepisania kodu, aby obejść problemy w kompilatorze, nigdy nie jest fajna, szczególnie, gdy jesteś w terminie.
— Trevor Powell,

Nie zamierzam głosować za tym, ale nowy standard C ++ to znacznie więcej niż cukier składniowy, taki jak słowo kluczowe auto.
— vdaras

1
@TrevorPowell, powiedziałeś, że ryzyko, które by podjął, było ze względu na słowo kluczowe auto, gdy w nowym standardzie C ++ są znacznie ważniejsze i podstawowe funkcje. Niektóre z nich, takie jak odniesienia do wartości, należy wziąć pod uwagę przy rozważaniu ryzyka.
— vdaras

2
@ TrevorPowell dlatego powiedziałem, że post nie jest warty głosowania w dół pomimo wszelkich moich argumentów na ten temat. Uważam, że jest to dobry post, chciałem tylko wyjaśnić, że nowy standard C ++ ma kilka bardzo ważnych funkcji i rozważenie jego zastosowania nie będzie dotyczyło drobnych rzeczy, takich jak auto.
— vdaras

6

Jeśli chcesz wykonać nieco więcej pracy, możesz przyjrzeć się rozwiązaniom refrakcyjnym. W clang dzieje się obecnie kilka interesujących rzeczy. Powinno być możliwe użycie słowa kluczowego auto, uruchomienie go przez refaktor, który znajdzie wszystkie zastosowania tego słowa, rozwiąże je dla ciebie i wyśle ​​kod, a następnie skompiluje z dowolnym, co chcesz.

Ale to oznacza mniej czasu na pracę nad grą.

Istnieje również potencjał niektórych dodatkowych funkcji, na przykład odbicia. Możesz utworzyć klasę i automatycznie wygenerować listę wszystkich właściwości do sprawdzenia w czasie wykonywania. Może być bardzo przydatny do tworzenia skryptów, tworzenia edytorów gier i tak dalej. EDYCJA: Sprawdź clreflect .

http://cppnow.org/session/refactoring-c-with-clang/

http://www.youtube.com/watch?v=mVbDzTM21BQ

http://clang.llvm.org/docs/Tooling.html

http://clang.llvm.org/docs/RAVFrontendAction.html


Bardzo interesujące; czy próbowałeś tego sam do tego (lub podobnego) celu?
— Jonas Byström

Jeszcze nie, postanowiłem poczekać, aż będzie trochę lepiej rozwinięty, ale ostatnim razem, gdy naprawdę się temu przyjrzałem, było to tylko w svn.
— David C. Bishop

Bardzo interesujące (+1)
— Samaursa

Przypomina mi to coś w rodzaju Pythona, 2to3ale na odwrót i jest o wiele bardziej niesamowite, ale prawdopodobnie trudniejsze w użyciu. Człowieku, o ile lepiej może być auto?
— Steven Lu
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.