Borgo (language)

GitHub

Image from the site

Borgo is a new programming language that compiles to Go.


<span style="font-weight:bold;color:#a71d5d;">use</span><span style="color:#323232;"> fmt
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">enum </span><span style="color:#323232;">NetworkState<T> {
</span><span style="color:#323232;">    Loading,
</span><span style="color:#323232;">    Failed(int),
</span><span style="color:#323232;">    Success(T),
</span><span style="color:#323232;">}
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">struct </span><span style="color:#323232;">Response {
</span><span style="color:#323232;">    title: string,
</span><span style="color:#323232;">    duration: int,
</span><span style="color:#323232;">}
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">fn </span><span style="font-weight:bold;color:#795da3;">main</span><span style="color:#323232;">() {
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">let</span><span style="color:#323232;"> res </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> Response {
</span><span style="color:#323232;">        title: </span><span style="color:#183691;">"Hello world"</span><span style="color:#323232;">,
</span><span style="color:#323232;">       duration: </span><span style="color:#0086b3;">0</span><span style="color:#323232;">,
</span><span style="color:#323232;">    }
</span><span style="color:#323232;">
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">let</span><span style="color:#323232;"> state </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> NetworkState.Success(res)
</span><span style="color:#323232;">
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">let</span><span style="color:#323232;"> msg </span><span style="font-weight:bold;color:#a71d5d;">= match</span><span style="color:#323232;"> state {
</span><span style="color:#323232;">        NetworkState.Loading </span><span style="font-weight:bold;color:#a71d5d;">=> </span><span style="color:#183691;">"still loading"</span><span style="color:#323232;">,
</span><span style="color:#323232;">        NetworkState.Failed(code) </span><span style="font-weight:bold;color:#a71d5d;">=></span><span style="color:#323232;"> fmt.Sprintf(</span><span style="color:#183691;">"Got error code: %d"</span><span style="color:#323232;">, code),
</span><span style="color:#323232;">        NetworkState.Success(res) </span><span style="font-weight:bold;color:#a71d5d;">=></span><span style="color:#323232;"> res.title,
</span><span style="color:#323232;">    }
</span><span style="color:#323232;">
</span><span style="color:#323232;">    fmt.Println(msg)
</span><span style="color:#323232;">}
</span>
KindaABigDyl, (edited )
@KindaABigDyl@programming.dev avatar

Neat. This might be the Zig killer ngl

I like Rust and use it for most of my projects these days, but I also love the simplicity of C.

I don’t love everything about Go, and I hated Zig when I used it, maybe this is the in-between that I need. I suppose it’s still garbage collected tho.

cornshark,

The intro doesn’t have any real information. Why? What are its strengths? What is its audience?

FizzyOrange,

Honestly it’s quite obvious from the code snippet and the diagram but I can spell it out:

Go is a quite nice language but mainly because of its fantastic infrastructure. Compilation is very fast, cross compilation is trivial, it makes static binaries that don’t even depend on glibc (compatibility nightmare on Linux), the module system is great, it even has built in fuzzing support - how many languages have that?

However the language is decidedly meh. It doesn’t have some modern features that make programming much more pleasant. Notably:

  • Tagged unions, aka discriminated unions, aka sum types. These vastly improve type safety and are just very convenient.
  • Expression based. People can go overboard with this but I don’t think anyone who has used an expression based language would want to go back. Some common tasks like the let msg in the example are just so tedious if match is a statement.
  • Optional. Somehow Go copied the billion dollar mistake. In fairness languages like Typescript and Rust weren’t around when Go was designed so it may not have been obvious to the authors that this was the way to go.

So this is basically a do-over of Go but if it had been designed by someone familiar with these modern best practices in language design.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • programming_languages@programming.dev
  • modclub
  • DreamBathrooms
  • osvaldo12
  • GTA5RPClips
  • ngwrru68w68
  • magazineikmin
  • everett
  • Youngstown
  • slotface
  • rosin
  • mdbf
  • kavyap
  • tacticalgear
  • InstantRegret
  • JUstTest
  • Durango
  • cubers
  • khanakhh
  • ethstaker
  • thenastyranch
  • Leos
  • normalnudes
  • tester
  • cisconetworking
  • anitta
  • megavids
  • provamag3
  • lostlight
  • All magazines