CppCon 2014: Nicolas Fleury 'C++ in Huge AAA Games'

preview_player
Показать описание

--
Video games like Assassin's Creed or Rainbow Six are among the biggest code bases with a single static linking. Iteration-time is critical to develop a great game and keeping a complete compilation-time of a few minutes is a constant challenge. This talk will explain the C++ usage reality at Ubisoft Montreal for huge projects. Ideas will be shared regarding performance, debugging and iteration time.
--
Nicolas Fleury has been in video game industry for over 10 years, working as a Technical Architect on projects like Prince of Persia and currently on Rainbow Six: Siege. Before working in the game industry, he worked in computer assisted surgery, speech recognition and telecoms.
--

*-----*
*-----*
Рекомендации по теме
Комментарии
Автор

Looking at performance constraints game engine cores usually face they ARE the most extreme circumstances. Everyone/thing teaching c++ is using sentences like "don't do X, unless you really have to". I came to realize that gamedev and especially engine cores fall into the "unless you really have to" clause regularly. The hardware doesn't care about how elegant or extendable some code is. As he said - if they have to choose between performance and something else they will choose performance.

ChrisAverageYT
Автор

i see it's not just me that hates using the term 'vector' for 'dynamic arrays' (i've always said this is annoying in source code who's most common low level type is a 'vector' holding xyz)

walterbz
Автор

i find a good pattern for singletons is the prefix them with "The" so Logger becomes TheLogger, and OneToRuleThemAll becomes TheOneToRuleThemAll!. i feel you can still have multiple managers. but thats just me

DanielJamesCollier
Автор

This is my way of programming, i always chose performance over elegance. Any day! Great talk btw!

tatoforever
Автор

I had trouble with understanding this guy. I dont know if that was because he was not targetting microphone enough, or something else.

bartekordek
Автор

Plenty of tricks revealed, just what you wanted to learn!?.
Sometimes hard to follow what he says, this could be improved.
Gamedeveloping can be challenging: #37:30

t
Автор

25:40 Really, is the Microsoft Compiler really that stupid to not load the variable into a register (like even back in 2014)?

theIpatix
Автор

These guys actually decided that distributed caching of builds was an easier problem than incremental builds. Damn

sebastianmestre
Автор

- 13:50, do you get 2 arrays at the same class? 1 template and other not?
- 17:50, doesn't C++ supposed to not include what you hadn't use? Wasn't it the goal of _"remove the file extension of your headers"_?
- 19:40, does the "90/10 principle" mean 10% of the code being called 90% of the time, or that the 10% of the code costs 90% of the performance?
- 20:20, this is surprising good news! I used to thought AAAs had to plan a "macro vision" of the performance costs, at the beginning of each project, being almost tied down to that till the end.
And I suppose (now) that you do all that without using assembly language, right?
- 32:50, "95% of the time", hm... I have been guessing that 70% could be enough, for the sake of balancing "speed vs memory" consumption.
You also mention stack or static, I'm not sure which. Anyway, I didn't understand what the array had to do with whichever of them.

MrAbrazildo
Автор

Singletons are basically globals, that introduce a lot of hard dependencies, and makes redesigning/refactoring much harder. Generally regarded as a code smell unless used in the most extreme of circumstances.

NitrousUK
Автор

What Static Code Analysis tool do they use @5:59?

mikevasiljevs
Автор

Pronounce tips (I'm brazilian, so don't blame me for mistakes):

Use the french R for both english H and R. It will sound gross, but much more understandable.
Omitting letters is the worst thing to do, sounding harder to listen, even for non-native speakers.

MrAbrazildo
Автор

Definitely don't agree with that generalization.
For example on our target we have radio and it is absolutely "unreasonable"(to say it politely) to pass it around when you know for sure you have only 1 instance of it.
Every module on the system that needs to talk to radio can access it through that instance. It is called "design", has nothing to do with inexperienced developers.

You'd choose an awful design just because the other way is easier/more elegant?

aliancemd
Автор

I'm pretty sure that his nickname among his friend is "Nick Fury".

gaborhorvath
Автор

So, when are we gonna get rid of header files?
Hahahahaha. Joke's on us.

origamibulldoser
Автор

20:39, a classical advantage of the row-major property of C. I am starting to suspect that all this C++ complexity is caused by not reading the C manual.

pedromiguelareias
Автор

Singletons aren't used for performance though. Unless the code is so bad there's "train wrecks" in the code with needless dereferencing. There's no inherent performance benefit to the Singleton pattern. It just makes it easier to grab dependencies, rather than pass them around to those that need it and have to think about who is observing/owning what. Imho, it's primary use is making use of the code easier for less skilled coders.

coran
Автор

Playing Rainbow Six Siege in the foreground, lol

kim
Автор

Depends what you consider good design. You seem to, like many, believe good design is what is easiest to code. I however am a believer that good design is something which can be used/changed for something for which it was not originally intended, in the spirit of code reuse. The example you give cannot be changed to fit another purpose. You cannot reuse that code for something else. You would have to throw it all away, and start from scratch.
Also the singleton would be the "easier" option.

coran
Автор

Until C++ came along, **less lines of code == less bugs**. Unfortunately with C++'s hidden behavior it became a lot more difficult to judge "code complexity".

MichaelPohoreski