💾 Archived View for auragem.letz.dev › techlog › 20240510.gmi captured on 2024-05-26 at 14:39:58. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-05-10)

-=-=-=-=-=-=-

2024-05-10 Profectus Beta 1.1: Removed WebP Support

I have removed libwebp support at the request of a user. This is temporary until I can make webp fully optional and provide two different versions of profectus with and without webp. It is also good to provide this option because libwebp may not be preferred for users that care about security vulnerabilities (libwebp has had security problems in the past).

I have modified the docs to make it clearer what dependencies need to be installed to run profectus on Linux, and have provided the command to install them on Fedora and Debian/Ubuntu.

Lastly, I have changed the minimum required golang version to build profectus to 1.21.9, which should help with those who want to build golang but install go from their package managers.

You can download Profectus here:

Profectus Homepage

Precompiled Binaries

Differences Between Lagrange and Profectus

Because one of Profectus' goals was to be an alternative to Lagrange, it is only natural to assume that Profectus is meant to mimic Lagrange as much as possible.

However, while the overall style of Profectus is very similar to Lagrange, there are also some important differences that I view as general improvements over Lagrange. The goal is not to entirely mimic Lagrange, but to compete by making improvements.

Differences

Not Finished or Buggy in Profectus

Similarities

Why I Used Golang

Using Golang wasn't just for maintainability, it was also used both for code readability and so I could get something done very quickly. C lacks proper strings and a bunch of other things are missing from its standard library that it would have added months to the development of this project.

Rust is significantly different in that it requires basically learning the language from the ground-up again because of its very picky, but safe, borrow-checker. It would have added at least an additional month in learning the language and figuring out how to port my GUI code over to it.

C++ is awful and I will never use it for the rest of my life. I don't think I need to say why. It takes the worst of all languages and sticks them all together, and piles its own awful things right on top. The same can be said for Pythin, which is not compiled but interpreted, and its concurrency and threading support are lackluster.

Odin is a great language, and it is the most similar to Golang in syntax, but it is not garbage collected, and has a more powerful and easier to use foreign interface system and a more powerful allocator system than Golang. Unfortunately, Odin doesn't have a TLS library. Odin is what I originally wrote the GUI code in, but I ported it over to Golang because Odin lacked a TLS library. The port was quite simple because Odin and Golang are already quite similar to each other and have many things, particularly stirng manipulation, in their standard library. Porting the GUI code to Rust, C++, or C would have taken a long time and much hair-pulling. The hardest part about Golang is trying to interface with C libraries, and doing so in a way that is cross-platform. This makes it harder to bring in C libraries, but it also provides an incentive for me to not bring in too many dependencies too.

The idiosyncracies of Golang are quite annoying, and I'm frequently frustrated by the decisions the Golang developers make, but it's better than C for me. At least Golang is open source. However, I may move to a different language in the future, but it won't be until after the stable 1.0 release.