Our great sponsors
-
Redis
Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.
-
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.
-
oil
Oils is our upgrade path from bash to a better language and runtime. It's also for Python and JavaScript users who avoid shell!
-
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.
I use "just" for this purpose, and I'm very happy with it:
https://github.com/casey/just
> …but, make doesn’t scale;
What about redis?
https://github.com/redis/redis/blob/unstable/src/Makefile
Recovering an ancient project (K&R C !) sent me back down the "which build tool should I be using?" rabbit hole. First approximation: No one's happy with any tool, with good reason. Then I discovered Ninja. It's an assembly language for builds, advertised as a back end for higher level tools, but many people script Ninja themselves in their favorite language.
Ninja is exceptionally fast, and handles parallelism extraordinarily well. It scales; they use it for Google Chrome. Various tools such as CMake can target Ninja. It is unique for its design goals.
Most importantly, looking at Ninja code is not a "Just kill me now!" experience.
https://ninja-build.org/
No DSL it's just Lua, dead simple yet featureful, and it is ninja fast, or at least claims to be I never bothered to check that out, it's fast enough for me.
https://xmake.io/#/
I recently learned more Makefiles by using them for a recent project of mine. I wish I had seen this when I was working on it! I learned (stole) from the musl libc configure script and makefile instead.
Makefiles aren't as easy to work with as alternatives in other language ecosystems, but I found they let me do a lot without the need for extra dependencies.
Coincidentally the author of this blog post commented on one of my reddit posts and helped me work out a few kinks in the project.
https://github.com/jpe90/clp
https://taskfile.dev/ has been my go to for this.
The variants control the compile and link flags: https://github.com/oilshell/oil/blob/master/cpp/NINJA-steps....
Overall this is the best build system I've used :) My pet peeve is having to clean when changing the variant.
I'm sure it's reinventing some of the 120K lines of CMakeLists.txt that comes with CMake, but I don't have to learn and debug a wonky shell-ish language!
One downside is that you probably don't want to invoke shell on Windows. I find that very useful though, so I'm not sure what would replace it on Windows. (I guess batch files, but I don't think they're powerful enough)
That's awesome. I didn't know about rwildcard until now. Is it part of GMSL? I searched for rwildcard on gmsl.sourceforge.io but didn't find it.
I think my function is needlessly complicated compared to rwildcard. Here's my code:
https://github.com/matheusmoreira/liblinux/blob/modular-buil...
https://github.com/matheusmoreira/liblinux/blob/modular-buil...
The file? and directory? functions were inspired by GMSL.
I wrote a general recursion function. It takes a function to apply to lists and a function to compute whether an element is a base case.
The recursive file system traversal function applies a directory globbing function to the list of paths and has file? as base case.
The find function filters out any items not matching a given predicate function. It was my intention to provide predicates like C_file? and header_file? but I stopped developing that project before that happened.
I think rwildcard is probably simpler and more efficient!