logoalt Hacker News

Type Safe Generic Data Structures in C

100 points • by AlexeyBrin • last Saturday at 11:57 AM • 54 comments • view on HN

Comments

Panzerschrek • today at 3:05 PM

I don't understand people reinventing macro-based hacks in C to achieve what was achieved in other languages many years ago. Why not using C++, for example? It's available almost everywhere, introducing its usage in an existing C codebase is pretty simple. Sure, C++ has its own downsides, but is it better to create mess with macros in C rather then using exiting language facilities and standard library containers provided by C++?

➕ show 4 replies
lor_louis • today at 1:26 PM

I wrote a summarizing article on type safe container types a while back, but with some C23 specific changes and a few tweaks to work better for complex types.

https://louissven.xyz/article/how_I_do_container_types_in_C....

Feel free to flag/delete if this isn't the place.

tniemi • today at 1:45 PM

That `(1 ? (item) : (list)->payload)` was a neat trick. It gets optimized away, but the type comparison happens before that.

Still feels a bit like a party trick, but if it works...

➕ show 1 reply
veexx103 • today at 1:45 PM

Is it feasible to create a new language by adding features to C

just as was done with C++?

➕ show 2 replies
randomNumber7 • today at 3:41 PM

As far as I know many C programmers think the addition of variable length arrays in C99 was a mistake. What would be the downside of this approach?

➕ show 2 replies
rramadass • today at 1:11 PM

Also see Templates in C by David Priver - https://www.davidpriver.com/ctemplates.html

He also has other interesting C techniques, namely;

Adding reflection to C - https://news.ycombinator.com/item?id=49964525

_Generic for Type Reification in C - https://www.davidpriver.com/creification.html

See also his C2y interpreter with REPL named "DrC" for the upcoming C29 standard (https://en.wikipedia.org/wiki/C29_(C_standard_revision)) - https://github.com/drpriver/drc

PS: I really like his style of writing and presentation; concise and precise without unnecessary fluff and page beautifying.

➕ show 1 reply
carlos256 • today at 2:10 PM

Jesus, I hate those macro hacks so much. Most of the time you only need a single container, so writing an ad-hoc implementation is cleaner than that.

➕ show 1 reply
nice_byte • today at 2:26 PM

I've tried doing this for a few years and it just sucks ass. Just use c++ and templates if you need proper generic data structures. C is a defective language.