Pond
Crystal WaitGroups without channels or counters
Install / Use
/learn @GrottoPress/PondREADME
Pond
Pond is a Crystal implementation of a WaitGroup, without channels or explicit counters. Pond automatically keeps track of all its fibers, and waits until all of them complete execution.
Installation
-
Add the dependency to your
shard.yml:dependencies: pond: github: GrottoPress/pond -
Run
shards install
Usage
-
Spawn fibers and wait on them:
require "pond" pond = Pond.new 1000.times do |_| pond.fill { do_work } # <= Spawns fiber and passes block to it end pond.drain # <= Waits for fibers to completeThe code above is the same as:
require "pond" Pond.drain do |pond| 1000.times do |_| pond.fill { do_work } end end # <= Drains pond automatically at the end of the block -
You may spawn nested fibers:
In this case, all ancestor fibers have to be added to the pond, otherwise Pond can't guarantee any of them would complete.
require "pond" pond = Pond.new pond.fill do pond.fill do pond.fill { do_work } end end pond.drainNote that, while you can fill a pond that was created in a another fiber, draining has to be done in the same fiber the pond was created in. This is to prevent potential deadlocks.
require "pond" pond = Pond.new pond.fill { do_work } spawn { pond.drain } # <= Error!
Development
Run tests with crystal spec -Dpreview_mt. You may set CRYSTAL_WORKERS environment variable with export CRYSTAL_WORKERS=<number>, before running tests.
Contributing
- Fork it
- Switch to the
masterbranch:git checkout master - Create your feature branch:
git checkout -b my-new-feature - Make your changes, updating changelog and documentation as appropriate.
- Commit your changes:
git commit - Push to the branch:
git push origin my-new-feature - Submit a new Pull Request against the
GrottoPress:masterbranch.
Related Skills
node-connect
340.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
340.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.2kCommit, push, and open a PR
