December 05, 2004
The state of the art
Before delving too deeply into the potential possibilities of using higher-level languages in games, I'm going to attempt to analyze what the current state of the art is in this area. I'm not going to consider the exceptions like Humongous or Naughty Dog. I'm going to try and focus on which languages the majority of teams are using and where they are applying them. Obviously every team is going to do things differently and I have only worked in two studios over the past 5 years so this can't all come from my first hand experience. There is a lot of information available on the Internet and clues as to what other teams are doing can be found on various industry mailing lists. I am going to focus on console games because that is what I am most familiar with.
So I think everyone will agree that the primary language is C or C++. C++ has probably taken the lead these days. The majority of programmers in the industry are, I think, using C or C++ as their exclusive imperative language for game code. There is a little more diversity when it comes to tools. In particular, I have noticed increased use of C#.
We see the most variety when it comes to non-imperative languages, most commonly schema languages. These are XML or other structured text files that describe the format of the game data structures. They are used to help the game code bind to it's data, whether loaded from a file or pulled over a network or whatever. They are also frequently used to specify how the data should be presented to designers in their level editing tool and to drive the level editing tool when it saves the data. These languages are usually proprietary languages designed specifically for use with a particular engine.
Many teams have some kind of special purpose state machine language, usually some kind of proprietary structured text syntax. It is also common to code state machines directly in C or C++.
A lot of teams allow technical designers to customize game behavior using some kind of scripting language like Lua or Python or a graphical waypoint or flow-chart language. In most cases this is entirely the domain of the designer. The programmers do not use the design language, unless they are responsible for dealing with C++ / design language bindings.
Schema languages are also sometimes used to automatically generate bindings between scripting languages and C++.
I will add to this page as I gain a better overall understanding of the languages we currently use.
So I think everyone will agree that the primary language is C or C++. C++ has probably taken the lead these days. The majority of programmers in the industry are, I think, using C or C++ as their exclusive imperative language for game code. There is a little more diversity when it comes to tools. In particular, I have noticed increased use of C#.
We see the most variety when it comes to non-imperative languages, most commonly schema languages. These are XML or other structured text files that describe the format of the game data structures. They are used to help the game code bind to it's data, whether loaded from a file or pulled over a network or whatever. They are also frequently used to specify how the data should be presented to designers in their level editing tool and to drive the level editing tool when it saves the data. These languages are usually proprietary languages designed specifically for use with a particular engine.
Many teams have some kind of special purpose state machine language, usually some kind of proprietary structured text syntax. It is also common to code state machines directly in C or C++.
A lot of teams allow technical designers to customize game behavior using some kind of scripting language like Lua or Python or a graphical waypoint or flow-chart language. In most cases this is entirely the domain of the designer. The programmers do not use the design language, unless they are responsible for dealing with C++ / design language bindings.
Schema languages are also sometimes used to automatically generate bindings between scripting languages and C++.
I will add to this page as I gain a better overall understanding of the languages we currently use.