News for hackers. Stuff that matters.
Re:Why I Write Games in C by crafn on Saturday January 09, 2016 @10:47AM (#10871607)
That's partly true. However, you do get rid of the complexity you never wanted in the first place. For me this is

OOP, RAII, C++ allocators, exceptions, references, vtables (see my post about runtime recompiling), templates (mostly), C++ standard library (I'd have to write my own vector for fast compilation. I'd have to write my own hash map to get contiguous storage (IIRC))

C is by no means optimal, but it's still one of the least bad languages to write games with.

Re:Why I Write Games in C by je42 on Saturday January 09, 2016 @11:02AM (#10871681)
- OOP you only get if you use it.

- RAII you only get if you use it.

- exceptions you only get if you enable them.

- references. no overhead.

- vtables. you only get them if you need them.

- templates. no overhead runtime.

- C++ standard library. you only get it if you need it.

- what's wrong with vector ? hash map ?

Re:Why I Write Games in C by crafn on Saturday January 09, 2016 @11:14AM (#10871722)
Yeah, and what's left is not much of C++. See my post about runtime recompiling for arguments to use C compiler instead of a very limited subset of C++.

(References make the type system more complex for little benefit. Templates create massive amounts of complexity and slow down my iteration loop. Already explained what's wrong with std::vector and std::unordered_map.)

Re:Why I Write Games in C by je42 on Saturday January 09, 2016 @11:33AM (#10871791)
- Compile times with templates are on my system under 10 seconds.

- I missed your vector and unordered_map discussion.

- "more complex" is not a useful metric to compare the language systems. Similar, I can easily say, that C pointer arithmetic is creates more complex situations when verifying that code is safe to use.

Re:Why I Write Games in C by crafn on Saturday January 09, 2016 @12:13PM (#10871968)
Compile times are not a problem in small codebases. Try to compile a 100kloc codebase using templates generously. Even your link times will easily grow over 10 seconds. Maybe even a minute. And 100kloc is still a pretty small codebase in terms of AAA development.

It's true that complexity somewhat depends on the context. Complexity of a language is a useful metric when talking about mental overhead of the programmer (which translates to productivity), and when writing custom tools for the language, both of which are relevant when developing a game engine. Safety has traditionally been a quite small priority in gamedev. I assumed this was the context.

Re:Why I Write Games in C by pandaman on Saturday January 09, 2016 @01:36PM (#10872297)
So how much faster is C over C++ compilation on a AAA game codebase, can you tell me?

I, personally, cannot since I've never seen a AAA game in C. However, I've never seen a AAA game compiling under 10 seconds. Or under a minute. Just linking with a console SDK libs is about a minute if you have a fast machine.

Re:Why I Write Games in C by je42 on Saturday January 09, 2016 @01:04PM (#10872170)
Yes. your link times will grow. But link times are not depended on choice of language. It depends on how big your set of object files is. Depending on your platform you can optimize your build.

I.e. - use dynamic link libraries

- use create static libraries

- carefully manage your dependencies. i.e. only include what you actually need.

- hot reload game logic (where quick iteration is more important)

- compile cache.

- ssd disk

- fast processor

- and yes, agreed. 100kloc is still small.

Re:Why I Write Games in C by crafn on Saturday January 09, 2016 @01:36PM (#10872300)
There's a lot of tricks you can do to optimize build times, and I've tried most of them in my previous game engine. Got ~90kloc recompilation time from 15min to something like a few minutes, although that required rewriting a bunch of code to not use templates. And removing boost. Multiple days' work.

But the point is, that I'd like a language that is fast to compile by default. C seems pretty promising, as doing a full unity build of my 25kloc codebase takes something like 3 seconds. Not sure how much of that is actually compilation, and how much IO. I'm expecting the project to grow to something like 100-200kloc, and hopefully never have to spend time figuring out why the compilation takes too long, and instead use that time to do something productive.

Re:Why I Write Games in C by hellofunk on Saturday January 09, 2016 @10:51AM (#10871621)
I really like this idea of using C as a main language, but when you mention writing your own vector and hash map implementations (and undoubtedly many other fundamental tools that are otherwise provided for you by STL), doesn't that get quite time-consuming to re-invent the wheel in those areas that it's great to have a wheel already there for you?
Re:Why I Write Games in C by crafn on Saturday January 09, 2016 @11:05AM (#10871689)
When you drop the semantic silliness of C++, like having the container to take care of constructing, copying, moving, and destructing, not to mention exception safety, a basic implementation of a "templated" dynamic array implementation in C comes down to like 100 lines. Hash map will be a bit more, and is not so trivial to write.

It's true that there should be no need to write these things yourself. The alternative C++ gives is not really tempting. A language designed for demanding game development doesn't exist (yet), so one evaluates which is the least worse option.

Re:Why I Write Games in C by hellofunk on Saturday January 09, 2016 @11:09AM (#10871703)
Considering that vector, map, etc are widely used and expected features of software development, I would think that good libraries in C exist for these already, so you don't have to even write your own 100 lines. Are there any?
Re:Why I Write Games in C by lobster_johnson on Saturday January 09, 2016 @04:10PM (#10872900)
GLib (not to be confused with glibc) from the GNOME project has a wide range of functionality -- generic lists, hash tables, strings etc.: https://en.m.wikipedia.org/wiki/GLib

Qt, I believe, also comes with a bunch of "standard library" stuff unrelated to UIs.

Re:Why I Write Games in C by unscaled on Saturday January 09, 2016 @11:17PM (#10874124)
Yes, GLib basically implements its own full-fledged OOP system on top of C. At which point, you start asking yourself, why are you not using C++?

In my experience, most of the people who say they don't need OOP or generics end up implementing a limited (or even a full-fledged) version of these things themselves.

Re:Why I Write Games in C by hellofunk on Saturday January 09, 2016 @04:51PM (#10873024)
But Qt is all c++, no?
Re:Why I Write Games in C by ArkyBeagle on Saturday January 09, 2016 @04:37PM (#10872979)
Hashmaps to the side ( that's more challenging in 'C' and one really compelling feature of C++ ) the rest can frequently be "faked" with arrays. Obviously, scale matters - having fifteen "vector" implementations in a given system means a little bit of library-ness is in order.

Much also depend on how much you really need dynamic allocation - it can be optional.

Re:Why I Write Games in C by typedef_struct on Saturday January 09, 2016 @11:54AM (#10871886)
Re:Why I Write Games in C by a3n on Saturday January 09, 2016 @02:59PM (#10872621)
This is one of the reasons why every time I get nostalgic about C I then immediately get depressed. Having to find the next level of functionality, libraries, all over the internet, just makes my brain turn to peanut butter.

I think this is one of the biggest disadvantage of a mostly standards based, no particular organization in charge type of language like C, as opposed to, say, python.

I am fortunate that, at the moment, my needs are mostly casual and very rarely performance focused. If I needed C I would just STFU and use C, accumulating my own workarounds for the dispersed nature of its resources.

Re:Why I Write Games in C by hellofunk on Sunday January 10, 2016 @06:32AM (#10874994)
I'm curious what you mean when you say "not to mention exception safety" ... What is the general argument against exceptions in C++?
Re:Why I Write Games in C by nautical on Saturday January 09, 2016 @11:04AM (#10871685)
Generally speaking , people tend to re-use the code . I have a complete folder filled with tons of reusable snippets which I keep optimizing there and there if some new idea comes up , otherwise they are good .
Re:Why I Write Games in C by hellofunk on Saturday January 09, 2016 @11:13AM (#10871717)
Put those puppies up on github for the rest of us to enjoy! or, if not, can you recommend some good repos that showcase great C snippets that help in a lot of situations?