The only language I use for personal projects is Crystal. It is as easy to write as a dynamically typed language - so I don’t have to waste time telling the type system what I mean, but it has full type checking - so I also don’t waste time on easily preventable mistakes.
Crystal being the best programming language for side projects is a topic for another blog post. There’s a lot to say about how perfect it is.
Naturally this means that over the last 6 or so years that I’ve been using Crystal, I’ve assembled a messy collection of utility functions and classes that I share between projects.
I’ve collected some of the best bits into a library: Geode. Features include:
- A generic circular buffer
- Some helpers to get build metadata
- A more succinct
to_s
implementation forTime::Span
- Structured concurrency in the form of a
Spindle
(see this post, based on this implementation) - Some additions to the
Log
module - A basic worker pool to limit parallelism of tasks
More bits will be added as I need them.
If for some reason you do use this, be aware that I am changing the behaviour of the stdlib, which might cause other things to break in weird and unexpected ways.