9 ms·
I love it. This is a language that everyone here says they want but no one will use, even though it's stable and mature (I assume because it compiles to stable
by kjksf 2y ago
I love it.
This is a language that everyone here says they want but no one will use, even though it's stable and mature (I assume because it compiles to stable and mature Go and can use every existing Go library).
It hits all the "ok, Go is popular but made by morons for morons and if only it had this X advanced feature, it would be totally great".
It has immutability. It has advanced enums. It has algebraic types. It has pattern matching. It has Result<> instead of returning an error. It gets rid of if err != nil. It gets read of of nil pointers.
On paper it's a perfect language. It literally addresses every major complaint people have with Go.
And I'll be here not using it and watching everyone else not use it.
Because the harsh truth is that none of those things are actually big issues that would justify learning slightly different syntax.
But maybe I'm wrong. Time will tell.
- Philpax 2y agoI don't think the impediment to adoption is the syntax - that's straightforward enough - it's the ecosystem / tooling / network effects. I love this, even though I don't interact with Go on a regular basis, but I recognise that I'd be locking myself out of a lot of the standard Go tooling if I adopted this wholesale. For better or for worse, there's a high ecosystem barrier that most languages must overcome to be adopted, and the vast majority of efforts never get to that.
- nine_k 2y agoWhat standard tooling would fail, given that the translation goes via a a generated Go source? I suppose there must be some borgofmt that handles the particular syntax. Certainly debuggers would have to be updated to show the corresponding Borgo code line at least. What else?
- autarch 2y ago> What else? Any and all linters for Go, to start. In theory, you could run them on the transpiled source, but the results would be very hard to apply to the original Borgo code. And they'd probably produce lots of false positives for things that the Borgo compile ensures are safe, even if they're not linting-correct. And syntax highlighting, refactoring tools, an LSP server. I'm sure there are more things along these lines I'm failing to think of.
- lmm 2y agoIDEs, profilers, instrumentation agents, code coverage tools... essentially any tooling really.
- throwup238 2y agoI think it’d do a lot better with Rust fans than Go fans, to be honest. It may not he as safe or whatever but Rust build times are brutal for larger projects and their ecosystems are mature enough to be comparable. It’d be even more useful with a Rust/Borgo interop layer but I bet that’d be really complicated.
- chamomeal 2y agoThat’s me! I like languages that can be compiled, I like modern type systems. Rust is neat but my occasional dabbling hasn’t yielded much productivity. Go has too many icky bits. Borgo? I will definitely be trying it out!!
- tucnak 2y ago> made by morons for morons The creators of Go have also built the foundation of everything you take for granted. The real "harsh truth" here, of course, is that the Go team exhibits engineering genius, taste, and particularity that is rare to find in our industry, such that the likes of Rust "death by committee" people may only dream of. The long-lasting obsession that Rust people have with Go and the Go team has become a meme. Borgo is the recognition of that: a handout to Rust people that they will never appreciate.
- desumeku 2y agoPeople seriously act like Rob Pike's quote was about appealing to the lowest common denominator of programmers possible without realizing that the functional programming concepts they hold so dearly have been lacking for 50 years in the world of C/C++ where it's creators came from. They are so quick to frustration over the fact that the some languages don't act like they think it should and don't require the extraneous baggage of higher-order programming in order to quickly be productive in, while at the same time the entire operating system their computer runs on contains not a single line of map(), reduce() or filter().
- tucnak 2y agoFor a community supposedly "committed to providing a friendly, safe and welcoming environment for all, regardless of level of experience"[1] Rust activists perhaps unsurprisingly lack in tolerance, empathy, and awareness. The community has changed, too. I liked them more circa ~2015 from before the corpos caught on to "the most loved" language, and have since blown evangelists' expectations for future adoption way out of proportion. As long as the drawn-out vendetta lead by Rust activists contra Go is concerned, old proverb comes to mind: "Hating popular things does not make you interesting." [1]: https://www.rust-lang.org/policies/code-of-conduct https://www.rust-lang.org/policies/code-of-conduct
- skinkestek 2y ago> They are so quick to frustration over the fact that the some languages don't act like they think it should and don't require the extraneous baggage of higher-order programming in order to quickly be productive in Higher order functions often seems to be a way to complicate otherwise easy to read code. Kotlin manages to do it reasonably well, in Javascript I has beem behind some of my absolutely worst debugging experiences. The problem with Go, as far as I have seen is not about functional programming, but rather about things like making a point out of not supporting generics for years. For anyone who has experienced the Java 1.4 to Java 5 transition, and all the cruft it removed I cannot see how any of them can willingly accept a language that made a point out of being clumsy so one had to do it the old clumsy way agaim. Or how a language that us supposedly a good fit for web backends had (don't know if it have now, I've given up) no simple way in the standard library or any popular templating solution to say in a template that it should be included in a bigger template, thereby forcing the code to know about things that belong in the design world. I.e. to have - a common header with dynamic title - a dynamic part between - and common footer the correct way last I checked seemed to be to string them together like a php script from the late nineties.
- oersted 2y agoI do agree with you to a degree, but let's not forget the monumental successes that are TypeScript and Kotlin. There have been lots of such languages that transpiled to JavaScript or worked on the JVM, adding nicer syntax and features. Many of them went nowhere, but quite a few of them did get widely adopted. Off the top of my head, CoffeeScript was also relatively popular for a while, and Clojure builds on top of both ecosystems, Scala comes to mind too. Go might be in a similar situation right now, where it has become entrenched in certain domains (like DevOps), and lots of people are not entirely satisfied with it but they can't to switch to something else. Is Go getting a similarly bad reputation as JavaScript or Java to push this through? Is the lock-in as strong as in browsers or Android? No, I wouldn't say it's there yet, but still, it is worth a shot to try to build such an alternative language. I do agree that Borgo will probably not be adopted widely, the pains it addresses are not strong enough and the language does not seem to be properly maintained and supported. But history shows it is not as unlikely as you suggest.
- yearolinuxdsktp 2y agoKotlin so crazy with its default-closed, default-final method approach. Do these people even ship software? Or do they ship textbooks? People are acting likely they are writing chapters of Biblical verse with their code—they knew everything better than the user, including knowing what to hide. It’s OK/good to have extensible code, even if the original did not intend it. To have every class be final by default and hidden from callers might be sane for shipping a library—-but you definitely should not adopt it as internal policy in your own code base, for your own’s sake. Why should I tax myself with having to worry about calling out extensibility by hand at every step? This is just crazy to me! I’m all for Kotlin’s success as we desperately need something better than Java still. I’m rooting for you. The lock-in with Go is the massive copy-pasta style and throw-away code mindset that is pretty much all that I see. But there is very little good Go code out in the wild to show us how it’s done.
- tmountain 2y agoThe standard library is good, readable, and probably the best example of how to write Go code.
- alexvitkov 2y ago> Because the harsh truth is that none of those things are actually big issues that would justify learning slightly different syntax. The syntax has nothing to do with it, you already know the syntax. I'm fairly confident most people reading this comment can program in this language right now, without opening the docs. The reasons I won't be using it are: 1. It's a source to source transpiler - even when done nearly perfectly, these always introduce problems. Debugging TS is never 100% seamless. Debugging minified JS is annoying, even with a sourcemap. 2. Go code tends to be very simple and "un-abstract", so the problems with the language's syntax and typesystem aren't bad enough to justify a wrapper. 3. I don't want to be an early adopter of programming languages. This may be harsh, but I won't consider a language until it reaches at least #50 in popularity someone is paid to work on the tooling full time. Hobbyists enjoy solving interesting problems like language design, but don't particularly enjoy the "gruntwork" some of which is critical - a comprehensive test suite, a fuzzer for the compiler, an LSP/IDE/editor plugins, a good standard library... There have been a lot of promising one-man projects such as this one, that get abandoned when the lead developer moves on. You don't want to be stuck holding the bag with a large codebase in a zero user language.
- foooorsyth 2y agoTop 50 is incredibly generous. I wouldn’t use anything outside of the top ~20 for anything I’d be getting paid to produce. https://survey.stackoverflow.co/2024/technology#most-popular-technologies-language https://survey.stackoverflow.co/2024/technology#most-popular... The most important factor for a language is Big Tech backing. Little squabbles on syntax or language features or philosophies are entirely secondary.
- alfiedotwtf 2y agoI would say: Community > Company In fact, after what Sun/Oracle did to Java, people should be skeptical if a language was not community run
- nine_k 2y agoHow does Zig look from where you sit?
- graemep 2y ago> This is a language that everyone here says they want but no one will use, even though it's stable and mature (I assume because it compiles to stable and mature Go and can use every existing Go library). Note the thread here about the lack of a license. You cannot legally use it. Even if you risk using it, people are also wary of using a language that has a single developer behind it, and would be even if it were open source.
- weinzierl 2y ago"It literally addresses every major complaint people have with Go." It addresses complaints 1 to n but does nothing about complaint 0: Having a garbage collector with all its associated downsides.
- polyaniline 2y agoIf it skipped the GC wouldn't it just be Rust?
- weinzierl 2y agoValid question, but no. Borgo takes inspiration from Rust but is still a vastly different language. Even though it has algebraic data types its type system is not Rust's. Another big difference is that it sticks with Go's interfaces instead of traits. I think Borgo sits at an interesting place in the design space. I just believe there are vast plains of unsettled land in the strongly typed GC-less direction and a language that really addressed all complaints about Go would have live there.
- darthrupert 2y agoRust with GC is actually what many people want. And by that I don't mean using Rc<> everywhere nor do I even mean making a GC library and then using GC<> everywhere. I mean having the runtime handle all memory things with you having to think about it only when some extremely rare corner case breaks.
- arethuza 2y agoThat sounds like C#? https://learn.microsoft.com/en-us/dotnet/standard/memory-and-spans/memory-t-usage-guidelines https://learn.microsoft.com/en-us/dotnet/standard/memory-and...
- restlake 2y agoYou are correct, C# straddles that line better than any other language right now imo thanks to the APIs you linked. There was a good write up about this Rust vs C# Span comparison on HN a few weeks ago but the link escapes me
- dicytea 2y agoIt'll probably not get as much traction as Go, but for a simpler reason that may not be as ideologically satisfying for you. It's just really hard for a new language to get real traction, no matter how good it is. And it's even harder for transpiled languages, because they almost always gets overshadowed by the language they're transpiling to.
- mst 2y agoWhat I find truly fascinating is that given the complexity of most build systems (especially ones that use babel) basically every node project I encounter is in fact effectively transpiled, it's just it's "javascript compiled to javascript" rather than having a different source syntax. I don't even mind[0], I think it's actually kind of amazing. [0] I have all the usual complaints about build systems and about the node ecosystem in general, but I don't think the fact that it's javascript compiled to javascript in and of itself is a problem, only, well, almost everything about how that's usually implemented/achieved :D
- nine_k 2y agoBut it's the minimal translation to allow newer language features and APIs to be still used in older browsers. OTOH I haven't seen a pure JavaScript project for a number of years. It's all Typescript now, maybe with some vestiges of legacy JS slated for eventual migration to TS.
- DecoySalamander 2y agoThere are people who insist on writing JS (with types in JSDoc), but Svelte is the only such project I can name off the top of my head.
- mst 2y agoI tend to start off a project with typeless zero-build JS, because I've been working with dynamic languages so long that the types mostly don't actually help me find bugs in the early days, but if I don't convert it to reasonably typed TS before I release a 0.001.001 then I would expect people to judge me for it, and I would consider them to have every right to do so.
- lexicality 2y agoIs it mature? The project is a bit more than a year old and describes itself as "new"
- ctvo 2y ago> Because the harsh truth is that none of those things are actually big issues that would justify learning slightly different syntax. That's partially the cost, but the other cost is building this into existing tool chains and deployment mechanisms. Getting buyin from teams, ensuring _everyone_ learns the syntax. And the unstated fear: The code it generates, is it actually good? Am I going to have silly issues down the road that are hard to debug and require diving into generated code to see some concurrency issue?
- pjmlp 2y agoThe problem is that it is useless to try to fix Go, because that isn't what the community appreciates. One is better off wasting brain cycles contributing to C#, Java, Kotlin, Swift, Scala, D,.... where a language being feature rich is appreciated by the community.
- throwaway127482 2y agoIt's not trying to fix Go, it's trying to be a new programming language. It just happens to compile to Go, and allows Go interop.
- pjmlp 2y agoWhich is a way to use Go, while not using Go. Hence better invest into ecosytems that value language design PhDs....
- nine_k 2y agoNo, it's a way of writing a better language while using Go libraries extensively. The same way Kotlin is a way of writing a better language while using Java libraries extensively.
- pjmlp 2y agoThe difference is that JVM community welcomes languages PhD folks. There is even the JVM Languages Summit. Unthinkable in Go ecosystem.
- nine_k 2y agoMaybe because Go is not a VM?
- pjmlp 2y agoJava compiles to native code for two decades now, it has always been a matter of how much one was willing to pay for a commercial JDK. “The key point here is our programmers are Googlers, they’re not researchers. They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python. They’re not capable of understanding a brilliant language but we want to use them to build good software. So, the language that we give them has to be easy for them to understand and easy to adopt.” -- Rob Pike
- deleted 2y ago[deleted]
- renox 2y agoYou're right nobody will use it: it's a one man language are you going to bet your codebase on it? It probably doesn't have any tooling, debugggers.. Are the error messages from the compiler good?
- nine_k 2y agoElm is also a one-man language, but it enjoyed some popularity. Zig has been a one-man language for some time, but it's got traction, following, and more contributors. Syntax squiggles are not very important, but other language features, like a good design and removing whole classes of bugs, are.
- samatman 2y agoZig is a BDFL language, but it's far from a one-man language. There's a Zig Foundation with several full-time paid contributors, with a larger design team who collaborate on the big picture. If Andrew Kelly were kidnapped by aliens tomorrow, Zig would continue. I think that's the dividing point, when the bus factor is no longer one.
- nine_k 2y agoExactly my point: Zig managed to pass from a one-man-show stage to a more mature, more established stage. Same happened much earlier with PHP and Perl. Elm, sadly, never achieved that. But I don't see why Borgo would necessarily follow the way of Elm and not of Zig or PHP.
- skinkestek 2y agoI've had to deal with Elm alone (the original devs had left, leaving next to no docs, because who needs docs with such a beautiful language I guess). Thankfully I've been able to scramble some syntax highlighting support and reverse engineer how to start and run it, and after a while it actually kind of makes sense. But I am an engineer, not an artist, and elm code will not survive me in the code base if I can avoid it (unless there are teams of Elm programmers at a place). Elm might remove classes of bugs, but when there is not a single developer except me who manages to wrestle with it, though luck. TypeScript also removes entire classes of bugs, and it does so while being well documented and easy to understand for devs from other mainstream languages so the other devs won't come running my way everytime they have to fix something written in it.
- keybored 2y agoWho are you talking to? Some people don’t like Go but have no reason (or something compelling them) to use it. So they use other languages. They don’t need a new source-to-source compiler. Your point is moot for this group. But some people might have to use it. So this language is at least relevant to them. If indeed it addresses all of the complaints. But that might be hard for a language which only compiles to that other language to do.
- Aldipower 2y agoJavaScript had Netscape behind it, TypeScript has Microsoft behind it, Rust had Mozilla behind it, Go has Google behind it, Java had Sun behind it, C++ had AT&T behind it, and so on.. Borgo? Cannot think about much languages that haven't any bigger company behind it. PHP maybe? To an extend Python? But today Python good pushed by the big companies of the AI hype.
- scythe 2y agoPython was obscure and developed in silence for 15 years before it caught on. The team behind it just never gave up. Most people who develop independent languages give up after a year or five. Lua is similar, though it and PHP both caught on faster because they both put embedding upfront, which allowed them to be built into game engines and websites built with C.
- cwalv 2y agoPython also fits its design space amazingly well (that's what's meant by "Guido's time machine"). It's a glue language, with a REPL, but it's not a shell (i.e. it's not meant to glue programs primarily through stdin/stdout/argv, but instead libraries through their APIs). It was a very useful (Greenspun's tenth rule) and somewhat underserved niche (perl, scheme and tcl come to mind).
- throwaway17_17 2y agoI know this is a really late reply, but your comment says ‘[i]t was a …’. Was that just an odd choice of tense or are you arguing that Python is no longer useful for its niche? If so, and I’m genuinely asking, is there a replacement for the glue language aspect that retains Pythons wide standard library approach?
- jyounker 2y agoI think your recollection of Python is a bit off. Python wasn't really obscure or developed in silence. If you needed a glue language for a unix system, then there were really only three choices: Perl 5, TCL/tk, and Python. If you worked in a career where you needed a glue language, then you were at the very least aware that Python existed.
- cmrdporcupine 2y agoThe issues with language adoption come down to tooling, libraries, and community. Just because it's compatible with Go doesn't mean that 3rd party Go dependencies will be a natural fit for it. Existing IDEs and other tooling won't work. Community is unlikely to grow. etc
- IshKebab 2y agoI don't think that's why nobody will use it. The real reasons are: 1. People who want Rust will just use Rust. You can keep your Rust code simple if you want, most of the time. I think most people that object to Go's issues have moved on from Go by now. Kind of like how safe C++ has no chance because most of the people that get it have left C++ already. 2. It's clearly not mature. Not many people jump on one man languages. If this was backed by a large company I suspect the story would be different. Still, it seems to be tastefully designed. Might have a chance I guess.
- lmm 2y ago> It hits all the "ok, Go is popular but made by morons for morons and if only it had this X advanced feature, it would be totally great". The people who use Go despite its issues are using it because of the tiling and the massive Google backing. Neither of which this has. Someone who wants a language that implements some of the good ideas of the 1970s and is willing to leave Go for that already has many established options.
- IWeldMelons 2y ago"tiling"? what do you mean by that?
- lmm 2y agoTooling, sorry, was on my phone.
- tmountain 2y agoI'll use it... for a hobby project! :-D
- baranul 2y ago> compiles to stable and mature Go and can use every existing Go library Go+[1](goplus), around since 2020, is already an "extra features" version of Go, that compiles into Go > It has immutability. It has advanced enums. It has algebraic types. > It literally addresses every major complaint people have with Go V[2](vlang) is a Go alternative language that has such features. It was originally given the title of child of Rust and Go[3]. On top of that, even has a Go2V transpiler available. Speaking of Go alternatives, Odin[4] is not too far away as well, and has recently taken the position of labeling itself as an alternative to Go. > if only it had this X advanced feature, it would be totally great Not only are these languages labeled as Go alternatives (Go+, Vlang, and Odin), but they have a significant number of fans, more GitHub stars, and/or a large numbers of contributors. It could be argued that the field is already kind of crowded. If we squint a little, several other languages could have been added to the list (like C3 and Jai), as alternatives. [1]: https://goplus.org/ https://goplus.org/ [2]: https://vlang.io https://vlang.io [3]: https://www.youtube.com/watch?v=puy77WfM1Tg https://www.youtube.com/watch?v=puy77WfM1Tg (Is VLang Better Than Go And Rust? --Anthony GG) [4]: https://odin-lang.org/ https://odin-lang.org/
- snthpy 2y agoI've been planning to use it, because of all the reasons you mentioned and because I prefer Rust but I also want access to the Go ecosystem and the Charm/Bubbletea TUI world in particular.