News for hackers. Stuff that matters.
Re:Why I Write Games in C (yes, C) by majewsky on Saturday September 21, 2019 @02:14PM (#21036939)
> It is also possible to allocate a large block of memory and then manage it yourself.

At which point you're mostly just writing C in Go.

Re:Why I Write Games in C (yes, C) by pm90 on Saturday September 21, 2019 @02:22PM (#21036991)
Actually you're not.

I would very much prefer a stripped down version of Go used for these situations rather than throwing more C at it. The main benefits of using Go are not the garbage collection, its the tooling, the readability (and thus maintainability) of the code base, the large number of folks who are versatile in using it.

Re:Why I Write Games in C (yes, C) by kerkeslager on Saturday September 21, 2019 @04:21PM (#21037694)
Readability is subjective.

Large user base? C is number 2. Go isn't even in the top 10.[1]

Tooling? C has decades of being one of the most commonly used languages, and a general culture of building on existing tools instead of jumping onto the latest hotness every few months. As a result, C has a very mature tool set.

[1] https://www.tiobe.com/tiobe-index/

Re:Why I Write Games in C (yes, C) by strken on Saturday September 21, 2019 @04:48PM (#21037842)
Unfortunately the excellent standard library is a major benefit of Go, and it uses the GC, so if you set GOGC=off you're left to write your own standard library.

I would also like to see a stripped-down version of Go that disables most heap allocations, but I have no idea what it would look like.

Re:Why I Write Games in C (yes, C) by metiscus on Saturday September 21, 2019 @02:43PM (#21037108)
Are you saying that there are more go developers than c developers? Is there a user survey that shows such things? I'm curious what the ratio is.
Re:Why I Write Games in C (yes, C) by rdbell on Saturday September 21, 2019 @03:36PM (#21037413)
I'd be willing to wager that C programmers would be more comfortable working with a Golang codebase than Golang programmers would be working with a C codebase.

There may be more "C programmers" by number but a Golang codebase is going to be more accessible to a wider pool of applicants.

Re:Why I Write Games in C (yes, C) by weberc2 on Saturday September 21, 2019 @03:48PM (#21037485)
In my experience it takes a few days for a moderate programmer to come up to speed on Go, whereas it takes several months for C. You need to hire C programmers for a C position, you can hire any programmers for a Go position.
Re:Why I Write Games in C (yes, C) by cozzyd on Saturday September 21, 2019 @06:09PM (#21038195)
If they don't already know C though, how well will they cope with manual memory management?
Re:Why I Write Games in C (yes, C) by nicoburns on Saturday September 21, 2019 @09:27PM (#21039041)
How do people learn C without knowing about manual memory management? They learn about it as they learn the language. This can be done in any language that allows for manual memory management (and most have much better safeguards and documentation than C, which has a million ways to shoot yourself in the foot)
Re:Why I Write Games in C (yes, C) by weberc2 on Saturday September 21, 2019 @08:34PM (#21038849)
It will be a learning curve, but a much, much smaller one than learning C.
Re:Why I Write Games in C (yes, C) by kerkeslager on Monday September 23, 2019 @04:29PM (#21053239)
But the entire point of this line of questioning is that there are more programmers who already know C.
Re:Why I Write Games in C (yes, C) by kerkeslager on Saturday September 21, 2019 @04:22PM (#21037700)
Re:Why I Write Games in C (yes, C) by weberc2 on Saturday September 21, 2019 @03:45PM (#21037471)
You’re writing in a much improved C. Strong type system (including closures/interfaces/arrays/slices/maps), sane build tooling (including dead simple cross compilation), no null-terminated strings, solid standard library, portability, top notch parallelism/concurrency implementation, memory safety (with far fewer caveats, anyway), etc. Go has it’s own issues and C is still better for many things, but “Go with manually-triggered GC” is still far better than C for 99.9% of use cases.
Re:Why I Write Games in C (yes, C) by bufo on Saturday September 21, 2019 @04:38PM (#21037801)
Go’s compiler is not at all optimized for generating fast floating point instructions like AVX and its very cumbersome to add any kind of intrinsics. This might not matter for light games but an issue when you want to simply switch to wide floating point operations to optimize some math.
Re:Why I Write Games in C (yes, C) by weberc2 on Saturday September 21, 2019 @08:44PM (#21038877)
Yeah, C compilers optimize much more than Go compilers. Performance is C’s most noteworthy advantage over Go.
Re:Why I Write Games in C (yes, C) by xyproto on Sunday September 22, 2019 @05:14PM (#21044001)
GCC can compile both C and Go. I searched for benchmarks but found none for GCC 9 that compares the performance of C and Go. Do you have any sources on this?
Re:Why I Write Games in C (yes, C) by weberc2 on Sunday September 22, 2019 @09:01PM (#21045134)
I don’t have a source, but it’s common knowledge in the Go community. Not sure how GCC works, but it definitely produces slower binaries than gc (the standard Go compiler). There are probably some benchmarks where this is not the case, but the general rule is that gcc is slower. gc purposefully doesn’t optimize as aggressively in order to keep compile times low.

Personally I would love for a —release mode that had longer compile times in exchange for C-like performance, but I use Python by day (about 3 orders of magnitude slower than C) so I’d be happy to have speeds that were half as fast C. :)

Re:Why I Write Games in C (yes, C) by xyproto on Sunday September 22, 2019 @03:09AM (#21040076)
Which compiler? The one from Google, GCC (gccgo) or TinyGo?
Re:Why I Write Games in C (yes, C) by omaranto on Saturday September 21, 2019 @07:30PM (#21038588)
Does Go really let you use closures, arrays, slices and maps when you disable the garbage collector? If so, does that just leak memory?
Re:Why I Write Games in C (yes, C) by weberc2 on Saturday September 21, 2019 @08:37PM (#21038853)
Yes, the idea is that you must invoke the GC when you’re not in a critical section. Alternatively you can just avoid allocations using arenas or similar. (You can use arrays and slices without the GC).
Re:Why I Write Games in C (yes, C) by omaranto on Sunday September 22, 2019 @09:59AM (#21041383)
To make sure I understand, is this an accurate expansion of your comment?

Yes it would leak, to avoid leaking you could invoke the GC when you’re not in a critical section. Alternatively, if you don't use maps and instead structure all your data into arrays, slices and structs, you can just avoid allocations using arenas or similar. (You can use arrays and slices without the GC, but maps require it).

Re:Why I Write Games in C (yes, C) by weberc2 on Sunday September 22, 2019 @10:30AM (#21041511)
Yes, that is correct. Anything that allocates on the heap requires GC or it will leak memory. Go doesn’t have formal semantics about what allocates on the heap and what allocates on the stack, but it’s more or less intuitive and the toolchain can tell you where your allocations are so you can optimize them away. If you’re putting effort into minimizing allocations, you can probably even leave the GC on and the pause times will likely be well under 1ms.