When it comes to IDEs and things like refactoring and autocomplete, I could never get along with Visual Studio. I mean, the fact that you need Resharper in addition to Visual Studio which costs a lot by itself, is kind of a red flag. Java IDEs have been much more productive for quite some time and I especially like IntelliJ IDEA, being from the same people that provide you with Resharper.
Also, doing games development in C# doesn't make sense to me, C++ (maybe in combination with a scripting language like Lua) being the defacto standard for games. And if you are an independent that values productivity, C# has approximately the same drawbacks as Java. And there are successful games out there that make use of it, like RuneScape, Puzzle Pirates or Minecraft.
I mean, if you value productivity over runtime efficiency and want something that runs on top of a VM, might as well get something out of it, like portability.
C# is actually heavily used by Indies because its the language for Microsofts XNA Toolkit. Many successfull XBLA indie titles (Supermeatboy, Braid, Bastion etc) have been created using it. Using MonoGame you can also bring the games to Linux/OSX/iOS/Android and other consoles (http://monogame.codeplex.com/).
Furthermore the highly popular Unity Game Engine offers C# as its scripting language which is the language of choice for every bigger and serious project because huge projects written in Javascript are alot more pain to maintain.
Part of this is Visual Studio excellent features (you dont necessarily need Resharper).
So there actually is alot of C# in game development these days, mostly used as the Scripting language while the engine and APIs are written in C++.
I think you're confusing "xbox live arcade" with "xbox live." You don't have to create games with XNA to get them on xbox live. I specifically remember C++ code in Indie Game: The Movie (for Super Meat Boy). And I'd bet money that Jonathan Blow, the creator of Braid, prefers C++ over C#.
This isn't to say C# isn't a viable option on consoles. I believe FEZ is all C#...that game is incredible, from an art design standpoint at least. It did have visible garbage collection pauses though.
C/C++ + scripting (Lua, <My own scripting language>) is a killer combination, which won't go anywhere for decades for shear performance reasons.... (Theory : you can always get more performance by using optimised, hand-tuned C/C++ code)
Coming back, proprietary technologies used in $$$ video games, support only windows operating system. Visual Studio can be one of the reasons too.
> Also, doing games development in C# doesn't make sense to me ...
Why not? Not everyone is doing the next Crysis.
> I mean, if you value productivity over runtime efficiency and want something that runs on top of a VM, might as well get something out of it, like portability.
Why don't people learn about compiler design? languages != implementation
Are you aware that Mono also compiles to native code or that .NET on Windows Phone 8 is also compiled to native code?
Having said that, given the prevalence of Windows on the games industry, many studios have migrated their C++/MFC tooling to C#/Windows Forms/WPF, even AAA studios.
Compiling to native code != Performance. Haskell compiles to native code too (ghc)....
Good Graphics and Physics, where required needs performance. As the hardware is improving day by day, our demands are increasing two folds. Just think about the performance we would need, to render the real world as is !!!
We are going towards virtual reality. We need something with very fast optimised runtime.
Some games does not require cutting edge Graphics. Use anything there....
Funny that you say that, I am old enough to have discussed the same issue about Forth vs Assembly, C vs Assembly, C vs C++ and many others language performance issues.
Fact is that eventually the optimizers for the given compiler get good enough for the task at hand and people move on.
Most intensive graphics and physics are already being done on the GPU anyway and there are quite a few ways to target them as well.
Though, GPUs are meant for highly specialized number-crunching, they doesn't have direct access to system memory. One also gets additional latency transferring data between RAM and GPU memory.
Also, GPU is a temporary technology. Wait for some time, and see CPUs getting more GPU like.
Hmm, I always saw each of them as an answer to completely different problem, so I have hard time contemplating this scenario.
How exactly would CPU be more like GPU? What would happen to branching and out of order execution pipelines? Do you see today's complex superscalar cores so cheap and small in the future that you could have thousands of them on single die? What other way is there get vector computations to work as well as scalar computations on same hardware? Would you rather have few superscalar cores and a lot of SIMD's around it? Or do you envision a completely new architecture?
I'm just trying to get a picture of how this would be done. Any reading material would be welcome.
> Though, GPUs are meant for highly specialized number-crunching, they doesn't have direct access to system memory. One also gets additional latency transferring data between RAM and GPU memory.
Yes they do when shared memory is used, not all GPUs have dedicated memory.
Even the PS4 will have shared memory between CPU and GPU systems.
> Also, GPU is a temporary technology. Wait for some time, and see CPUs getting more GPU like.
This is Intel's wish because their GPUs suck, I don't think it will happen.
Runtime inefficiencies are no excuse to use a lower level language - if I had a language that let me write a 2d platformer game in 3 days but pushed every player's computer to their limit, I would use it.
In addition, considering there's languages out there with much, much greater runtime inefficiencies of languages like python being used in the client/server side of massively complex games like Eve Online, there's a lot more that should be taken into consideration when choosing a language other than raw speed.
I'm not sure how portability would be in favor of Java for game development. The number of gaming platforms Unity will run C# on is awesome: http://unity3d.com/unity/multiplatform/ . What can I use to get Java running on the PS3, Xbox 360, and Wii U? As for personal taste, I'd argue C# has a better gaming ecosystem (SlimDX, XNA, MonoGame, the list goes on) and is generally more nicely designed. Interop between C++ and C# is also head and shoulders above most of the other interop options -- the full proper mixed mode debugging straight out of the box is a godsend, and the performance is top notch.
C++ might be an old workhorse for AAA titles needing the best of performance out of the platforms they're targeting (a very specific case), but aside from the loss of productivity, there's plenty of places C++ won't reach: Not everyone has native client, and writing your game as an ActiveX component is easily going to scare people off.
C# is definitely more portable than Java when it comes to games nowadays. You can target all the (big) mobile platforms (WP, iOS, Android) as well as the usual Windows/Mac/Linux. It's also used for Xbox Live Indie and Playstation Mobile games.
Also, doing games development in C# doesn't make sense to me, C++ (maybe in combination with a scripting language like Lua) being the defacto standard for games. And if you are an independent that values productivity, C# has approximately the same drawbacks as Java. And there are successful games out there that make use of it, like RuneScape, Puzzle Pirates or Minecraft.
I mean, if you value productivity over runtime efficiency and want something that runs on top of a VM, might as well get something out of it, like portability.