As already mentioned C++ is the base to add other languages like C#, Java,…
Now you have different layers that you can choose for your preference and purposes
As already mentioned C++ is the base to add other languages like C#, Java,…
I am totally with you.
C++ is the language to go for if you are interested in:
e) beauty - yes! it is beautiful language which so much possibilities that no other (current) language can compare or even come close to.
And may I just say that gaming industry is the industry where every “tick” matters and C++ is simply unbeatable where it comes to performance.
If someone asks me why do I prefer C++ over anything else I simply reply:
If I have a choice between ferrari and ford fiesta and the likes why on earth would I choose anything but ferrari?
And just to post short disclaimer:
No modern language compares favorably to C++, in any respect really. C++ is the most powerful, the most flexible modern language, and now after getting updates and hard work from ISO commitee and new C++14 update on horizon and another major update foreseen for 2017 this is simply the language every professional game programmer should go for.
This is awesome, thanks everyone for the information. Good to know all the C++ classes I have been taking in my Game Programming degree won’t go to waste.
The main problem with C++ is that programmers think too highly of themselves, run out of talent, and introduces multiple memory stomps that other guys have to spend time tracking down and resolving.
I do believe C# is the future going forward without a doubt. But for now, C++ is still king of performance and memory management. I think it’s a great idea for the core of the engine to be written in C++ but game code can be higher level (byte code, etc)
Where Epic Games went wrong in the past was UnrealScript. Which kept me away from UDK. It couldn’t be debugged, couldn’t rapid prototype, took awhile to compile, etc. It had all the disadvantages of a scripting language and none of the bonuses lol
I wouldn’t necessarily say that they went wrong with UnrealScript. It was a language that was a bit more straight forward than quite a few languages. Also because of UnrealScript, I was able to jump right into the C++ code quite comfortably. I would be quite lost if I didn’t practice UnrealScript before UE4 came out.
I worked on a project where we had Unity source access, indeed it is written in C/C++.
Ideally there should be some mechanism to use whatever scripting language you want beit LUA, Python or whatever.
I disagree that C# is the “future” though - it’s pretty much tied to Microsoft and we’re seeing less MS popularity not more.
C# isn’t tied to Microsoft. Unity for instance, uses Mono.
And don’t get me wrong, I got my modding start in UnrealScript as well with Unreal Tournament. However, back in those days Epic Games provided some C++ source as well. Mods could provide DLLs etc. And it wasn’t gimped like the UDK version, the native DLLs were directly tied into the engine (unless my memory is failing me). I stopped modding somewhere around UT 2004 and went into games industry where we able to use a debugger with UnrealScript. But the community didn’t get the debugger with UDK for whatever reason (only licenses).
I love the decision to go with C++ for many reasons: less of a divide between some “game code” and “engine code”, a great world of tools to work with/test/debug C++, so many external libraries for niche hardware devices and sensors, bringing all the skills already learned along, and for new users the ability to use general (stackoverflow) information to understand language issues… I could go on
C# on the other hands has memory leaks and you simply have no control over them. C++ gives you power. With that power comes responsibility.
And you know it is not that it is easier to write non - leaking programs in C#/Java - simple example, file management:
In C++ if you use memory management technique called CADRe or RAII - (Constructor Acquires Destructor Releases ) then you put opening file code in constructor, releasing that file to memory in destructor and your done. No more worrying. In C#/Java you have to actually manually close every file you’ve opened. So how is this for easy / hard.
And guys, don’t fool yourself that working with C#/Java is easier than with C++.
It is like with toy tools and real tools really. It is much easier to build castle from sand than real castle but after the work mounts up, you realize that only real castle is actually livable. The sand one is unusable.
C# destroyed Visual Studio. Once my beloved IDE, now I simply cannot look at it.
Average studio these days utilize C# for Tools at the very least. Out of all the issues I’ve seen over the years in C# memory leaks has never been one of them
Now I have seen some C# apps accumulate a lot of memory and then it becomes a little trickier to find out where the memory is going due to the lack of a sizeof operator on managed objects. For those cases I hookup a profiler to see where the allocations are going
UnrealScript was the wrong choice indeed. It’s slow (20x slower than C++) and C# is way more powerful. I wound’t say that C# is the future of game programming, but its very good. I prefer C/C++ as a programming language, C# is the second best.
The “easy” transition from UnrealScript to C++ is because they rely too much on their macros, which makes it very similar to UnrealScript.
Well, there is garbage collection for Unreal C++, which essentially solves memory management issues. Or at least doesn’t make it any harder than any of other languages with garbage collection.
Most daunting thing in C++ are pointers. It’s sometimes wery hard to decide whether something should access trough pointer or just directly (whatever it is properly called). I guess for seasoned C++ programmers is no brainer. But for everyone else, even if they understand concept, it still might be hard call to make, which can lead to issues like “why it compiles and does not provide results I expected”.
Other than that I don’t really consider C++ to be much harder than any other language. I would call some of it’s elements to be annoying to say at least. Like headers or macros.
UPROPERTY() could be solved in more elegant way in C# by using attributes [Attribute], but to make C# implementation on pair you would need ability to compile C# to native code. Which… Was shown on BUILD recently .NET Native. Though it is not multi platform, so it is not solution either.
I honestly don’t see a reason to use managed languages or worse dynamic interpreted languages.
What we need is native language with manual memory management and garbage collection. Which… As matter of fact exists. Like D, or M# (this is bit of convoluted by Microsoft worked on something that should replace C++, for native programming).
Well nothing really wrong with that. If you tried to code game in CryEngine, where they don’t use macros, custom compilation tool-chain and rely on STL, you would now build altar, temple and shrine to Epic Coders who invented this entire thing, and you would make sacrifices every day to thank them :D.
I never said that there is a problem with macros, I was just point out the reason for the easy transition from UnrealScript. I’m fundamentally a C/C++ programmer, so none of that scares me.
We are talking games here not tools. It does no harm for word editor to be written in C# (although Office is C++). On the other hand it does damage for game. And as I’ve said previously. C# isn’t even good for IDE. Visual Studio since they went with C++ is slow and very hard to work with large code bases.
I definitely stick with C++.
Like many, I’ve worked with C# in Unity in my spare time. Memory leaks is not something you find discussed on their forums. Was never an issue for my game there (I’ve been registered at Unity forums quite awhile under this same handle)
 I just searched their forums right fast and all the posts under that topic appear to be many years old
Just my $.02.
I don’t think Unrealscript was ever the wrong choice because it originated from Unreal Engine 1. It wasn’t a system designed for Unreal Engine 3…
UnrealScript was rough back then too. Sure it gave us a nice ‘sandbox’ environment. But we couldn’t debug. Couldn’t rapid prototype. Took quite awhile to compile
I see these threads complaining about 2 min compiles and intellisense not working. Really? We had no IDE period back then and I am pretty sure compiling Unrealscript took awhile back then. And oh yeah, restarting UnrealEd…
- State based programming and replication blocks were very nice tho. So were delegates, etc when they were added. Nice language it was.
Coming from a Java/C# background a lot of these posts seems misinformed on how programmers who never Learned C++ looks at this monolith of a language.
C++, while technically not that much harder to learn syntax-wise than the above-mentioned gives you SO MUCH POWER that it’s intimidating like crazy.
I’ve tried to do C++ from time to time but every single time I run into the problem of Pointers. I understand what a pointer is. I understand what a pointer is supposed to do. But I have no idea when to use one and I have yet to find a definitive explanation that says “These are the scenarios dum dum”.
All they do is tell you what a pointer is, how to access the data from a pointer and also how to get the address of a pointer. But other than that? Good luck!
I have no idea where to start or where to end when I start on a C++ file. I have the header file which is an infuriating system to begin with (function prototyping? Seriously?) and then I have to match my cpp file with the header file and even if you manage that, good luck trying to understand any of the garbage debugging message it spits out at you which might even be a downright lie. I realize that other languages can lie to you as well during errors but at least most managed languages seems to remember that it’s humans who code these programs and not electric engineers.
And then there is the issue of mixed C and C++. Half the time I can’t tell when it goes between the two, but even following books to the letter and posting about it on Stackoverflow reveals that even those books lie to you and have the approach of mixed C and C++ syntax.
I would love to see D get the spotlight over C++ because in D it’s at least build from the ground up as language that supports Objects and Data instead of a tagged on addition that is C++, the superset of C.
Also in D you can write in-line assembly code, use all previous C code still and even in the memory management department you have options.
- Garbage Collector
- Partially Garbage Collector / Partially Manual
- Completely manual
- Define Blocks in Memory that are off-limits to the Garbage Collector
You can have the best of all worlds.
I love C# and Java languages. They are so d@mn easy to comprehend and the talk about memory leaks is absurd. I have not found anything on that other than age old articles . I don’t say switching to C++ was a bad choice as I am convinced it was going to happen regardless, but I find it quite upsetting that there are not other options (Yes Blueprint but lets face it that gets tedious very fast).