C99

Open-source projects categorized as C99

Top 23 C99 Open-Source Projects

  • flecs

    A fast entity component system (ECS) for C & C++

  • Project mention: ECS, Finally | news.ycombinator.com | 2023-12-30

    I've also been enjoying building My First Gameβ„’ in Bevy using ECS. The community around Bevy really shines, but Flecs (https://github.com/SanderMertens/flecs) is arguably a more mature, open-source ECS implementation. You don't get to write in Rust, though, which makes it less cool in my book :)

    I'm not very proud of the code I've written because I've found writing a game to be much more confusing than building websites + backends, but, as the author notes, it certainly feels more elegant than OOP or globals given the context.

    I'm building for WASM and Bevy's parallelism isn't supported in that context (yet? https://github.com/bevyengine/bevy/issues/4078), so the performance wins are just so-so. Sharing a thread with UI rendering suuucks.

    If anyone wants to browse some code or ask questions, feel free! https://github.com/MeoMix/symbiants

  • s2n

    An implementation of the TLS/SSL protocols

  • Project mention: S2n-TLS – A C99 implementation of the TLS/SSL protocol | /r/programming | 2023-12-05
  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • cgltf

    :diamond_shape_with_a_dot_inside: Single-file glTF 2.0 loader and writer written in C99

  • Project mention: Confused in terms of where to start with framework/technology etc. Need help picking between learning ShaderToy v/s OpenGL v/s WebGL | /r/GraphicsProgramming | 2023-06-20

    If you want to go all the way, https://learnopengl.com/ is a favorite around here. You could build a glTF viewer from scratch starting from that tutorial and https://github.com/jkuhlmann/cgltf and eventually building towards https://google.github.io/filament/Filament.html or whatever wacky artsy direction you like.

  • gunslinger

    C99, header-only framework for games and multimedia applications

  • libexpat

    :herb: Fast streaming XML parser written in C99 with >90% test coverage; moved from SourceForge to GitHub

  • Project mention: Expat (XML parser) is understaffed and needs funding | news.ycombinator.com | 2024-04-03

    I would not have found the call for funding help until they pointed out here:

    https://github.com/libexpat/libexpat/blob/R_2_6_2/expat/Chan...

    I don't understand why there isn't a donate button on the README / website to support development of this and instead it's hidden somewhere.

    Maintainers it is perfectly OK to ask the public to donate or ask for sponsorships.

    If xz taught any anything we don't want to be in that situation again.

  • libtcod

    A collection of tools and algorithms for developing traditional roguelikes. Such as field-of-view, pathfinding, and a tile-based terminal emulator.

  • Cloak

    A mini-preprocessor library to demostrate the recursive capabilites of the preprocessor (by pfultz2)

  • Project mention: Object-oriented Programming with ANSI-C [pdf] | news.ycombinator.com | 2023-06-21

    Where cloak.h is https://github.com/pfultz2/Cloak/blob/master/cloak.h

    The above macros are admitttedly very hairy. If C had a better preprocessor, but was otherwise unchanged, they could look a lot nicer.

    > I never said such a thing. Would appreciate if you didn't put words in my mouth.

    A normal part of dialogue is, "I'm going to repeat your point back to you in my own words, and you can either agree with my restating of it, or point out at which point I've misunderstood you". That's what I was doing. "Would appreciate if you didn't put words in my mouth" is unnecessary hostility.

    > In my concrete example, given that FILE and DIR were classified as objects, to which of the so-called objects does F(const char*, FILE, DIR) belong?

    Take any language which you agree is "OO". Add one new feature (if it isn't already there): functions/methods which don't belong to any class/object. Now the function you are talking about is possible in that language. Did the language thereby suddenly cease to be OO when we added that feature? Most people would disagree with "Yes". But if "No", what is the actual difference between C and that language?

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • datatype99

    Algebraic data types for C99

  • metalang99

    Full-blown preprocessor metaprogramming

  • Project mention: How to convert an enum to string in C++ | news.ycombinator.com | 2023-09-30

    There are also other approaches. Macro variants making use of `__VA_ARGS__` would be probably the best trade-off. If you want a slightly more ergonomic syntax, something like Metalang99 [1] will help (and the author even wrote a post about this exact subject [2]). Codegen is another option which may work better than other options depending on the situation and exact implementation strategy. And there is always the Reflection TS [3], which may or may not be incorporated to C++26...

    [1] https://github.com/Hirrolot/metalang99

    [2] https://hirrolot.github.io/posts/pretty-printable-enumeratio...

    [3] https://en.cppreference.com/w/cpp/experimental/reflect

  • libspng

    Simple, modern libpng alternative

  • Project mention: libpng VS libspng - a user suggested alternative | libhunt.com/r/libpng | 2023-10-30

    libspng is already in LibHunt. I'm surprised there is no comparison with libpng.

  • wax

    A tiny programming language that transpiles to C, C++, Java, TypeScript, Python, C#, Swift, Lua and WebAssembly πŸš€

  • Project mention: Wax compiler – a tiny language designed to transpile to other languages | news.ycombinator.com | 2024-04-19

    Here's a link to the language itself. Hasn't been updated in a couple years, unfortunately. Maybe getting some attention here could help.

    https://github.com/LingDong-/wax

  • halfix

    x86 PC emulator that runs both natively and in the browser, via WebAssembly

  • json-parser

    JSON parser in standard C (by Barenboim)

  • voxelizer

    Header only mesh voxelizer in c99

  • azure-iot-sdk-c

    A C99 SDK for connecting devices to Microsoft Azure IoT services

  • exengine

    A C99 3D game engine

  • FastLZ

    Small & portable byte-aligned LZ77 compression (by ariya)

  • nbnet

    single header C(99) library to implement client-server network code for games

  • Project mention: Networking and multiplayer | /r/raylib | 2023-04-28

    There's examples and on YT theres some videos showing off the lib.

  • cparser

    C99 parser and frontend for libfirm

  • Project mention: Compiling History: A brief tour of C compilers | news.ycombinator.com | 2024-02-14

    > QBE is a new optimizing backend much simpler than LLVM; cproc and cparser are two of the C compilers that target it, in addition to its own minic.

    I thought cparser targeted libFirm. That's what their GitHub page says [0].

    "It acts as a frontend to the libFirm intermediate representation library."

    > We really need a production quality open source C compiler that is actually written in C.

    I honestly think cproc or cparser are almost there already. For cproc, you just need to improve the quality of code optimization; it's really QBE you'd need to change. For example, you could change unnecessary multiplications by powers of 2 into left shifts, improve instruction selection so that subtraction is always something like "sub rax, rdi" and not "neg rdi / add rax, rdi" [1]).

    For cparser, I notice slightly higher quality codegen; libFirm just needs more architecture support (e.g. AMD64 support appears to work for me, but it's labeled as experimental).

    [0]: https://github.com/libfirm/cparser

    [1]: I'm pretty sure this is the line of code that generates it, too: https://c9x.me/git/qbe.git/tree/amd64/emit.c#n418

  • interface99

    Full-featured interfaces for C99

  • hamt

    A hash array-mapped trie implementation in C

  • Project mention: Visual Introduction to Hash-Array Mapped Tries (HAMTs) | news.ycombinator.com | 2023-08-24

    This isn't a very good explanation. The wikipedia article isn't great either. I like this description:

    https://github.com/mkirchner/hamt#persistent-hash-array-mapp...

    The name does tell you quite a bit about what these are:

    * Hash - rather than directly using the keys to navigate the structure, the keys are hashed, and the hashes are used for navigation. This turns potentially long, poorly-distributed keys into short, well-distributed keys. However, that does mean you have to compute a hash on every access, and have to deal with hash collisions. The mkirchner implementation above calls collisions "hash exhaustion", and deals with them using some generational hashing scheme. I think i'd fall back to collision lists until that was conclusively proven to be too slow.

    * Trie - the tree is navigated by indexing nodes using chunks of the (hash of the) key, rather than comparing the keys in the node

    * Array mapped - sparse nodes are compressed, using a bitmap to indicate which logical slots are occupied, and then only storing those. The bitmaps live in the parent node, rather than the node itself, i think? Presumably helps with fetching.

    A HAMT contains a lot of small nodes. If every entry is a bitmap plus a pointer, then it's two words, and if we use five-bit chunks, then each node can be up to 32 entries, but i would imagine the majority are small, so a typical node might be 64 bytes. I worry that doing a malloc for each one would end up with a lot of overhead. Are HAMTs often implemented with some more custom memory management? Can you allocate a big block and then carve it up?

    Could you do a slightly relaxed HAMT where nodes are not always fully compact, but sized to the smallest suitable power of two entries? That might let you use some sort of buddy allocation scheme. It would also let you insert and delete without having to reallocate the node. Although i suppose you can already do that by mapping a few empty slots.

  • jvm

    simple java virtual machine

  • Project mention: Simple Open-Source Java Virtual Machine in C | news.ycombinator.com | 2023-09-19
  • array-algorithms

    Unintrusive algorithms for C arrays OR a C implementation of <algorithm> from C++

  • Project mention: A header-only C implementation of C++ &amp;lt;algorithm&amp;gt; | /r/patient_hackernews | 2023-07-04
  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
NOTE: The open source projects on this list are ordered by number of github stars. The number of mentions indicates repo mentiontions in the last 12 Months or since we started tracking (Dec 2020).

C99 related posts

Index

What are some of the best open-source C99 projects? This list will help you:

Project Stars
1 flecs 5,496
2 s2n 4,446
3 cgltf 1,373
4 gunslinger 1,153
5 libexpat 993
6 libtcod 906
7 Cloak 889
8 datatype99 791
9 metalang99 765
10 libspng 687
11 wax 670
12 halfix 623
13 json-parser 613
14 voxelizer 610
15 azure-iot-sdk-c 573
16 exengine 532
17 FastLZ 390
18 nbnet 385
19 cparser 318
20 interface99 262
21 hamt 259
22 jvm 236
23 array-algorithms 210

Sponsored
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com