-
ergo
An actor-based Framework with network transparency for creating event-driven architecture in Golang. Inspired by Erlang. Zero dependencies.
-
SaaSHub
SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives
-
The examples are in another repo:
https://github.com/ergo-services/examples
-
I have been watching Ergo repo for a while now and you wrote my observation concisely.
A while back, I tried to solve no.2 on your list by having a dynamically expanding and shrinking go-routines. POC here: https://github.com/didip/laborunion. It is meant to be used in-conjunction with config library & application object that's update-able over the wire. But I never got around to solve that last part.
-
redwood
A highly-configurable, distributed, realtime database that manages a state tree shared among many peers. (by brynbellomy)
with that said it’s quite easy to write an equivalent- https://github.com/redwood/redwood/blob/develop/utils/mailbo...
-
Akka.net
Canonical actor model implementation for .NET with local + distributed actors in C# and F#.
No per-process GC (still very configurable unlike the one here) but for hot-reload, if you don't mind completely different language, there are https://github.com/akkadotnet/akka.net and https://github.com/dotnet/orleans
-
No per-process GC (still very configurable unlike the one here) but for hot-reload, if you don't mind completely different language, there are https://github.com/akkadotnet/akka.net and https://github.com/dotnet/orleans
-
My go to actor framework for golang has always been https://github.com/asynkron/protoactor-go. It seems that both protoactor and ergo are heavily influenced by Erlang. Why would one select ergo over protoactor?
-
Not to be confused with ergo, the ircd[0] nor with ergo, the cryptocurrency[1]
[0] https://github.com/ergochat/ergo
[1] https://github.com/ergoplatform
-
-
> you cannot send messages directly to a goroutine
Goroutines communicate through channels, all you need is a queue (eg buffered chan).
> you cannot terminate a goroutine from another goroutine
Termination is propagated via context cancellation. go-A cancels ctx, go-B waits with `select`, reads from `<-ctx.Done()` and does a `return`, or checks it after each blocking call.
> there are no "goroutine-local variables"
Not sure if I got this one, but every var in a function's scope, which has been `go`-routined, would qualify.
I'm currently working on a lib/framework somehow related to Ergo, but taking a more "generic" approach of a state machine[0]. It may solve some of the mentioned issues with Go, like addressing and queues for communication.
You seem to be very attached to an idea of using the same goroutine for a long time, whereas it's usually more dynamic and only schedulers are long lived `go`-s.
[0]: https://github.com/pancsta/asyncmachine-go