v2.0.0
We have to make another release of v2.0.0 due to https://go.dev/blog/v2-go-modules. More details here https://github.com/ergo-services/ergo#versioning
- Added support of Erlang/OTP 24 (including Alias feature and Remote Spawn introduced in Erlang/OTP 23)
- Important: This release includes refined API (without backward compatibility) for a more convenient way to create OTP-designed microservices. Make sure to update your code.
- Important: Project repository has been moved to https://github.com/ergo-services/ergo. It is still available on the old URL https://github.com/halturin/ergo and GitHub will redirect all requests to the new one (thanks to GitHub for this feature).
- Introduced new behavior
gen.Saga. It implements Saga design pattern - a sequence of transactions that updates each service state and publishes the result (or cancels the transaction or triggers the next transaction step).gen.Sagaalso provides a feature of interim results (can be used as transaction progress or as a part of pipeline processing), time deadline (to limit transaction lifespan), two-phase commit (to make distributed transaction atomic). Here is example examples/gensaga. - Introduced new methods
Process.DirectandProcess.DirectWithTimeoutto make direct request to the actor (gen.Serveror inherited object). If an actor has no implementation ofHandleDirectcallback it returnsErrUnsupportedRequestas a error. - Introduced new callback
HandleDirectin thegen.Serverinterface as a handler for requests made byProcess.DirectorProcess.DirectWithTimeout. It should be easy to interact with actors from outside. - Introduced new types intended to be used to interact with Erlang/Elixir
etf.ListImproperto support improper lists like[a|b](a cons cell).etf.String(an alias for the Golang string) encodes as a binary in order to support Elixir string type (which isbinary()type)etf.Charlist(an alias for the Golang string) encodes as a list of chars[]runein order to support Erlang string type (which ischarlist()type)
- Introduced new methods
Node.ProvideRemoteSpawn,Node.RevokeRemoteSpawn,Process.RemoteSpawn. - Introduced new interfaces
Marshaler(methodMarshalETF) andUnmarshaler(methodUnmarshalETF) for the custom encoding/decoding data. - Improved performance for the local messaging (up to 3 times for some cases)
- Added example examples/http to demonsrate how HTTP server can be integrated into the Ergo node.
- Added example examples/gendemo - how to create a custom behavior (design pattern) on top of the
gen.Server. Take inspiration from the gen/stage.go or gen/saga.go design patterns. - Added support FreeBSD, OpenBSD, NetBSD, DragonFly.
- Fixed RPC issue #45
- Fixed internal timer issue #48
- Fixed memory leaks #53
- Fixed double panic issue #52
- Fixed Atom Cache race conditioned issue #54
- Fixed ETF encoder issues #64 #66