alt.hn

5/18/2026 at 6:29:43 PM

Simulating Infinity in Conway's Game of Life with Modern C++

https://ryanjk5.github.io/posts/GOLDE/

by HeliumHydride

5/21/2026 at 9:42:26 AM

"I had heard the rumors that C++ was a scary language filled with footguns and segmentation faults, but I had never given it a fair chance myself" - props for this. There's too much hearsay in software engineering.

by ofrzeta

5/21/2026 at 10:14:32 AM

And then immediately afterwards we see const T* in a supposedly immutable data structure meaning the pointer remains mutable. Yet another classic footgun.

by fc417fc802

5/21/2026 at 11:32:42 AM

It looked to me like most of the raw pointers in the blog were const. Sometimes you don't want the baggage of smart pointers and getting a cheap easily copyable view of your data is nice, so you want to return a const T. Usually if an API returns a const T I assume lifetimes are handled for me and that the ptr is valid as long as it is not nullptr.

by mooreat

5/21/2026 at 9:04:21 AM

Small nit, this - https://ryanjk5.github.io/assets/2026-05-14-GOLDE/torus.gif - is not what's conventionally referred to as a torus in CGoL. In torus left and right edges are also connected.

by eps

5/21/2026 at 9:51:52 AM

Yes, it's more an infinite cylinder.

by xeyownt

5/21/2026 at 6:41:59 AM

It seems like the thread_local CacheIndex only determines which cache to use, but it doesn't actually guarantee thread safety for concurrent access to the HashLifeCache itself. What would be a good solution for this?

Should I use a mutex for each cache instance? As a beginner developer, my guess is that the original author assumes data races won't occur based on the execution timing. However, I'm really not sure if that assumption is actually correct/safe.

by jdw64

5/21/2026 at 11:06:53 AM

In my view, thread_local is a bit of a code/design red flag. I didn't read the entire code in this case to see whether the thread_local use is warranted or not, though.

by nnevatie

5/21/2026 at 12:04:21 PM

a thread_local is just a global variable. Mutable global variables are of course bad, but in this case the threadindex is immutable once created, so it is perfectly fine.

by gpderetta

5/21/2026 at 12:45:09 PM

Yes, technically it is of course fine, just as a design I find use of thread_local is more of an afterthought than something I'd prefer.

by nnevatie

5/21/2026 at 9:02:43 AM

Interesting approach. I like that the implementation focuses on scalability rather than only visualization.

by hiroakiaizawa

5/21/2026 at 2:31:03 PM

It's extremely inefficient, using pointers to neighboring cells.

If you want to handle the grid edges (whether for a wrap-around "infinite" grid, or not) without too much special code, then leave a 1-cell border around the grid and fill this with the appropriate data (empty cells, or wraparound cells). If you really want to be efficient then just write the special-case edge code.

by HarHarVeryFunny

5/21/2026 at 7:45:50 AM

Fricking cool, I love it.

by classified

5/21/2026 at 11:33:18 AM

This would be a cool template project to learn C++ without the pollution of LLM slop.

by ontouchstart