| ▲ | Gossamer: a Rust-flavoured language with real goroutines and pause-free memory(gossamer-lang.org) |
| 37 points by mwheeler 2 hours ago | 27 comments |
| |
|
| ▲ | throwrioawfo 40 minutes ago | parent | next [-] |
| There was once a time when I'd see a page like this and think "wow, must be a great project with such a polished website". Now, it's just a neutral or perhaps even very slightly negative signal (especially the em-dash in the very first line of the page). Anyone able to tell me if this is a project actually worth paying attention to, or just another raindrop in the current monsoon of slop? |
| |
| ▲ | klardotsh 26 minutes ago | parent | next [-] | | Somewhat with you on this. I got slightly excited for a brief moment, but then the site starts to scream "an LLM threw this together super quickly" which doesn't spark joy at all. I then started digging into the code examples and quickly determined that nothing about this project is for me, even as a fan of Rust and some of its influences it has on recent languages. That web routing example is absolutely gross to my eye, for example. Different strokes for different folks - my own thoughts on language design (I'm hacking on one in private over the past several years, maybe one day it'll be shareable) would probably make some folks have a similar reaction, despite taking a wildly different approach than here. But it does suck to see Yet Another Vibe Looking Site hosting a language that feels like Yet Another Flavor Of Similar Stuff. Really looking forward to a language that wildly shakes things up in a usable way, and has a lot of care put into the DX... this one did not check that box for me. | |
| ▲ | Zak 11 minutes ago | parent | prev | next [-] | | A card grid with rounded corners as the second section and a dark blue or purple theme just scream "designed by Claude". It's decent design, but not a useful quality signal. | |
| ▲ | bscphil 22 minutes ago | parent | prev [-] | | It's clearly vibecoded if you look at the commit history. |
|
|
| ▲ | samuell 35 minutes ago | parent | prev | next [-] |
| Glad to see more languages adopt true goroutines with M:N scheduling. Surprised more haven't. Among compiled language I'm only aware of Go and Crystal off the top of my mind. |
| |
| ▲ | kccqzy 20 minutes ago | parent [-] | | Haskell does too. And it predates Go by a large margin, such that calling it goroutine is weird. And within Google, the C++ implementation fiber also predated goroutines. It really shows that this is more of a library feature rather than a language feature. | | |
|
|
| ▲ | lstodd 17 minutes ago | parent | prev | next [-] |
| IDK what's the fuss. m:n scheduled by io is .. 2000s-era. The implementation was so obvious in like 2005, that even I patched then Python 2.6 in, so we at my then company could get rid of Twisted. Also let you remind that M:N scheduling was the FreeBSD's pthread implementation for quite a bit too long. No, it didn't play well with MySQL at the time. |
|
| ▲ | poulpy123 43 minutes ago | parent | prev | next [-] |
| Sorry but the name means bitterkid in french, I can't get over it :D |
| |
|
| ▲ | quotemstr an hour ago | parent | prev [-] |
| Gossamer has a cycle collector and eager reference counting. Good luck dropping the last reference to a 10,000-node graph, especially if cyclic. That means it doesn't have "pause free" memory. If you want pause freedom, go use ZGC or another modern GC on a modern VM. I just can't take seriously this spate of languages that ignore the past 30 years of research into automatic memory management. We have multiple open-source pauseless miracles GCs right there before our eyes, yet it's the trendy thing in language design to foist memory management on users. You don't even have to use a big VM if you want good GC. Go use MPS. Lots of options out there, even if you want to implement your own VM. |
| |
| ▲ | platinumrad an hour ago | parent | next [-] | | > We have multiple open-source pauseleses miracles right there before our eyes Is this meaningfully true in a practical sense? I've been writing code with soft real-time requirements and I don't think your notion of "pauseless" suffices. And if these miracles are open-source and right before our eyes, why do languages like Crystal and D still use Boehm? | | |
| ▲ | gomoboo 15 minutes ago | parent | next [-] | | D uses a homegrown GC not Boehm:
- https://dlang.org/spec/garbage.html
- https://dlang.org/blog/2017/03/20/dont-fear-the-reaper/ | |
| ▲ | quotemstr an hour ago | parent | prev [-] | | The charitable explanation is the authors lack the time to rebase onto something more modern. | | |
| ▲ | platinumrad 38 minutes ago | parent [-] | | You seem to have a very low opinion of other people. If these miraculous collectors are so generally applicable, why are very smart people putting effort into things like Perseus? | | |
| ▲ | quotemstr 32 minutes ago | parent [-] | | Smart, honest people can have sincere and earnest disagreements. I believe the manual-memory-management people are mistaken. That's not to say they're stupid: it means I believe they're going down the wrong path, as smart people have done since time immemorial. I wish them all the best. That said, I must wonder what other innovations they reject if they insist that GC is unacceptable. | | |
| ▲ | lstodd 9 minutes ago | parent [-] | | We insist that GC is unacceptable only because we insist that uncontrollable latency is unacceptable. | | |
| ▲ | LoganDark 8 minutes ago | parent [-] | | The entire concept of a pauseless GC is that you have no uncontrollable latency. The GC can run on a background thread with zero stop-the-world. Of course, this assumes you're in a preemptive environment with access to other threads, etc. |
|
|
|
|
| |
| ▲ | iyn an hour ago | parent | prev [-] | | > We have multiple open-source pauseless miracles GCs right there in front of us Can you share some links/references? | | |
| ▲ | elitepleb 25 minutes ago | parent | next [-] | | https://github.com/pizlonator/fil-c/blob/deluge/libpas/src/l... | |
| ▲ | quotemstr 39 minutes ago | parent | prev [-] | | ZGC is extremely good work. https://wiki.openjdk.org/spaces/zgc/pages/34668579/Main > ZGC performs all expensive work concurrently, without stopping the execution of application threads for more than a millisecond. It is suitable for applications which require low latency. Pause times are independent of the heap size that is being used. ZGC works well with heap sizes from a few hundred megabytes to 16TB. Go's GC is also very good: https://go.dev/blog/greenteagc. V8's Orinoco is also pretty good now. It's improved a lot over the past decade and is now mostly-parallel. (A decade is about how long one of these things takes: high-performance GC is hard.) I'm also a fan of MPS: it's a big of dark horse because it's more a GC construction kit than a ready-to-go GC, but it's fast and flexible, and I'd start with it any day over Boehm if I were making a VM from scratch. | | |
| ▲ | adastra22 29 minutes ago | parent | next [-] | | A millisecond is an eternity. It is 1/3 of the entire time allocated to a frame update in a modern game. | | |
| ▲ | treyd 13 minutes ago | parent | next [-] | | Game GCs are interesting because you know that the execution is structured like this and you know how much time you have left before you have to switch back to application code for the next frame/time step. There's interesting optimizations you can make around this and could almost completely avoid user-observable GC pauses. | |
| ▲ | kelseyfrog 7 minutes ago | parent | prev | next [-] | | Exactly. This is why Minecraft Java edition was such a disastrous flop. | |
| ▲ | quotemstr 17 minutes ago | parent | prev [-] | | Various GCs can go faster now too. JEP 376 talks about hundreds-of-microsecond work done in pause now that GC no longer has to scan the whole stack. That said: 1ms? 1ms is getting into the sorts of latency the OS and hardware impose on your program no matter what it does. For example, on x86, a SMI can take 300us, or 1000us if you're unlucky. I've seen softirqs for shitty wifi chips take a hundred milliseconds! And God help you if you take a hard page fault: You're worried about 1ms latencies, right? So you're mlock()ing all memory? Running RT threads pinned to cores? Carefully using PI and static priorities to avoid inversions? Avoiding blocking IO everywhere, not even for graphics page-flipping? Managing thermal headroom to avoid involuntary clock collapses? And it should go without saying, but I have to ask: you're running a PREEMPT_RT kernel, right? No? You're not doing any of these things? Then why are you worried about 1ms in GC? |
| |
| ▲ | platinumrad 33 minutes ago | parent | prev [-] | | If I were writing this language, I'd probably just compile it to Go, although that means Rust extensions would either incur cgo costs or have to be replaced with Go extensions. | | |
|
|
|