ZPL: (Almost) C99 Powerkit

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • InfluxDB - Build time-series-based applications quickly and at scale.
  • Scout APM - Truly a developer’s best friend
  • SonarQube - Static code analysis for 29 languages.
  • Zigi - Close all those tabs. Zigi will handle your updates.
  • zpl

    📐 Pushing the boundaries of simplicity

    While a lot of the library looks useful, stuff like the above makes it feel like it's written by somebody who knows C, but doesn't feel fully comfortable writing it.

    [1]: https://github.com/zpl-c/zpl/blob/master/code/header/essenti...

    [2]: https://github.com/zpl-c/zpl/blob/27c80bd5807da5238777bfcba8...

  • cosmopolitan

    build-once run-anywhere c library

    It looks like ZPL has its own memcpy() implementation which is a work in progress. Assuming the author posted this as a Show HN kind of thread, here's some feedback I could offer based on my experience implementing that function.

    It goes pretty quick on the machines I've used so far to have an indirect branch with overlapping moves. Here's what that looks like in "pure c" for gcc and clang. https://github.com/jart/cosmopolitan/blob/master/libc/str/me... memcpy is hard to implement in pure c99 because aliasing pointers to non-char types can trigger ubsan errors. With rep movsb it's a good idea to check cpuid for erms support. In that case it'll be fastest for bigger moves but is still slower for small moves. See the chart at https://justine.lol/cosmopolitan/index.html which compares various methods.

    Regarding array.c I've lately found it personally easier to stop caring about capacity and just call realloc every time. I'm not sure if the standard specifies this, but I'm pretty sure every realloc implementation in practice, under the hood, should track the capacity and grow it at two power sizes. So even if you're just constantly appending by one char the cost short amortize itself out to be cheap in the long run.

  • InfluxDB

    Build time-series-based applications quickly and at scale.. InfluxDB is the Time Series Data Platform where developers build real-time applications for analytics, IoT and cloud-native services in less time with less code.

  • ClickHouse

    ClickHouse® is a free analytics DBMS for big data

    Testing performance of memcpy should be more exhaustive than just running on single CPU: https://github.com/ClickHouse/ClickHouse/issues/18583#issuec...

  • stb

    stb single-file public domain libraries for C/C++

    > I collect different C libraries as a personal stash of toolkits

    Might you have a write-up or link for these, and if so might you be willing to share it?

    I have been using Sean Barrett's libraries [0], as well as his curated list of other people's single-header libraries [1], and, like you, I am always on the lookout for new things to add to the collection :)

    [0] https://github.com/nothings/stb

    [1] https://github.com/nothings/single_file_libs

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts