Now I'm going to divide languages into two groups, with a grouping I feel is pretty safe to make:
- On one hand you have unmanaged languages. Those are ones that are generally considered "lower level".
- They almost always have pointers.
- They compile down to assembly (or are written in it).
- They are generally extremely fast when run, with little overhead when carefully programmed in.
- They are also very unsafe. You can scribble over memory almost anywhere. You can corrupt your stack and crash on returning from a function. You can many times walk off the end of arrays and lists and crash. I generally program in these at work, and some bugs can take days to sort out.
- Good examples include: C, C++, and assembly
- On the other hand you have managed languages. The are the ones that are generally considered "high level"
- They never have pointers, unless dealing with unmanaged code
- They generally compile to a virtual machine or are interpreted
- They are slower they the equivalent unmanaged code. How much depends on the language and what your doing
- They are generally "safe". You get exceptions for doing incorrect things like walking off arrays and such. If you don't catch that exception, your program will still die, but you'll get a nice stack trace.
- There are many example, the most common include Java, Python, Ruby, C#
- What languages you know - People generally lean towards languages they know for their "fun" projects. Others enjoy the chance to learn something new
- Speed vs. Portability vs. Speed of Development
- All things being equal, C is the fastest and most portable. However, it's also the easiest to shoot yourself in the foot with. It also doesn't have a standard Graphics and Input Output library.
- Other languages come with portable graphics libraries, but may be too slow. Also note, that most roguelikes are turn based, so speed is in general less of a concern
- Syntax and language - Sometimes the language itself is not suited for what you want to do with it or is hard to read and write.
- Library - Sometime there is a library you really want to use for your roguelike, but it can only be used in a given language
- Note, with many languages, it is possible and sometimes easy to call other languages. C# gives P/Invokes (see libtcod-net), and Java the JNI for example.
- Ideological - Some people choose languages to write in based upon a philosophy or outlook.
- Some people reject Java due to it being "too slow", with too slow based upon Java from the 90's on machines twice as slow as today
- Some people reject C# due to distrust in Microsoft and fear of lawsuits, even though there is a open source implementation of it and the lawsuits could only matter if your using the interop libraries.
However, Java is a good language as well, with many successful roguelikes written in it. Python is another language I enjoy to write in, and has multiple good toolkits to write roguelike in (libtcod, pygame, wcurses).
What I'm not saying here is that unmanaged languages are bad. C is the mothertongue of roguelikes. C++ is very popular as well. I use both at work daily. I'm just saying is that for turn based, and low graphic real time games, the benefits may not out weight the costs.