Skip to content

v0.7.0

Compare
Choose a tag to compare
@clintjedwards clintjedwards released this 11 Jul 05:07
· 47 commits to main since this release
a9558d4

v0.7.0 (July 11, 2024)

Yes I rewrote it in Rust. Yes, I'm aware of the meme.

To be honest this was just a lot of fun. The majority of Gofer's actions
are purely just state machine triage, so since Golang doesn't really have
great enums that made things awkward in a lot of places.

The trade off being that Go is SIGNIFICANTLY easier to write concurrent
code with. Async Rust is obtuse in a lot of areas, especially when debugging.

I started down the path of trying to switch from GRPC to REST and
from that discovered
dropshot...and the rest was history.

Some of the bigger changes:

I just got really tired of troubleshooting issues within GRPC and having to deal with protobuf types. I'm still torn about
what is the correct chicken or egg order. Do you write a spec first and then generate code or do you write code that autogenerates the spec? My inclination is the former because
while convenient, code that generates spec makes refactors a bit harder. I believe dropshot is working on a way to define traits and then generate a spec from that. Which might
be a bit easier.

Some of the smaller ideas like interactive installation were just straight up removed. They were only half baked and the implementation was an eyesore.
It wasn't worth the time reimplementing them.

Before I created a documentation site that had to be hosted on it's own. Instead I think it's a bit more convenient to have those docs be connected with
the verison of Gofer you're running and be able to be accessed no matter where you host it.

Gofer is very much event based even though I tried to avoid that paradigm on the first write. This rewrite doesn't go full events but the event system is
much better now and used for some of the more critical parts of the app. The previous solution of passing around state with god structs and channels was good
but caused a little bit too heavy coupling for some part of the app. Making them hard to refactor and hard to reason about. Much more work needs to be done
on this front.