Thirteen years of Rust and the birth of Rue
75 points by steveklabnik
75 points by steveklabnik
Man, this makes me feel all kinds of things..
I have more than a decade of PL implementation experience and I've started my own language two years ago, putting everything I've learned during this time (both as a language implementer but also maintainer of massive projects) to use.
100% hand coded, 100% written by me. (only a few words of edits in documentation made by contributors) It already works. I'm about 10% there to self host it. It has its own formatter, parser generator written in itself.
2 years, 798 commits, many blog posts and social media posts later I have: zero contributors, 84 stars.
OTOH this vibe coded... let's just say "project": 130 vibe-coded commits and 423 stars. 63 upvotes on lobsters. I'm guessing it's being shared on social media, orange site etc. as well with probably a lot of interest?
I want to learn from this but not sure what the lesson is.. Marketing is the most important thing and nothing else matters even 1% compared to it I guess?
(I normally hide vibe-coding tag on this site but I visited without logging in and saw this.. bad idea)
Marketing is the most important thing and nothing else matters
Actually, personal integrity is the most important thing, and nothing else matters. Steve Klabnick has proven his integrity over decades.
People are interested in spite of it being vibe coded.
I’m sorry that this is causing you distress.
It got a bunch of attention back in August when I first opened the repo; a lot of stars and such came from then. I took a long break and rebooted the project this week. (There’s a separate branch with all of that work.)
Marketing isn’t the only thing that matters, but it does matter. I have a long track record of working on and with languages, and so people become interested simply because of that. I tend to work in the open and so people can follow where, if anywhere, this goes.
New languages are very very hard to get attention for. You have to have some sort of unique proposition that resonates with people. In this case, the resonance is the years I’ve spent building a reputation online. But in the end, this language is currently not useful, and maybe it never will be. A thing I think is neat about languages is that even failures can teach us something, and this very well may end up a failure. Time will tell. But if working on your language is something you enjoy, you should absolutely keep at it. But additionally, if your goal is users, you do need to deliberately consider how you market it. People can’t use a thing they can’t find!
Steve Klabnik is a really notable person. He made a name for himself by patiently documenting Rust and explaining things to the community and prospective users for many, many years. That notability translates into visibility on side projects.
I'm guessing that you're fairly young, probably 10 years younger than him or me. You can follow a similar path as Steve and become notable over time. Marketing isn't just a button that you press and then magic happens, it's an investment that you build up over a long period of time. Do interesting work and then tell the world about it, over and over again.
One more tip... working at Google you're going to be a cog in a machine. It's frankly a boring narrative for your audience. You're complaining about vibe coding while working for the company responsible for it, it's not sexy or daring, it really undermines your story. If you want to become notable, you might consider getting into entrepreneurship or join a smaller, faster paced organization where you can have more of a personality, and have more power over what your career efforts accomplish. These are the kind of things that make people pay attention to you.
“Higher level than Rust, lower level than Go”
Very excited for this!
Neat, good luck. Great to read design decisions, I look forward to seeing more as it goes. Some great discussion on HN.
It sounds like your goal is to make a couple big changes to Rust to have a systems language that's less in-the-weeds of memory/resource management? Or is it more that you decided to reuse familiar syntax so you'd have more attention for the early implementation?
I've also been thinking about writing a language and a lot of the best tips I can find emphasize big design up front because of how many early decisions are hard to reverse. I wonder if vibecoding will reduce the cost of otherwise daunting changes.
Thanks! Yeah those decisions are subject to change, but I’m writing them down.
It’s both on the syntax, it’s about being less in the weeds, and Rust’s syntax is good enough to just straight re-use. I’ll change it when I have to (like the @ for intrinsics.)
I think this is really cool. I strongly encourage this. I was very very close this year to trying a version of this myself but I just didn't have the time for it and so I'm incredibly happy to see someone else give this a try. I think there's a real opportunity to learn from all the cool stuff that Rust had and landing at a much simpler language with a reduced surface area.
Interesting, looking forward to what you'll be doing for the "linear type stuff." Congratulations on finding time and energy again for a fun side project.
Do you expect to need an exit strategy, for when the LLM cannot meaningfully make progress anymore? Or do you think that won't happen?
Minor nitpick: the intro in the spec introduces "chapter.section:paragraph" notation, but the document seems to use "chapter.section.paragraph." Is that intentional, or is it only used in few places?
Thanks!
Exit strategy is, code by hand. I can still do it, I’m just a lot less productive.
Seems like a typo, I’ve been going over the spec a lot. I did a big refactor for the traceability stuff, I’ll take a look at that, thanks.
Here's a PR to fix the numbering, thank you so much again! https://github.com/rue-language/rue/pull/292
fn main() -> i32 {
@dbg(42);
0
}
I like what I see, so far! Cheers to more fun with a new language 🍻
Always fun to see new languages. Did you also look at Julia for inspiration?
Looking at the fib example - there's a lot of explicit 32 bit ints, but what type is inferred for i? And on a 64bit machine - would you normally prefer 32 bit to 64 bits for such code?
How would you (in rue) accept different size ints for such calls? I assume there's no Julia-style multiple dispatch?
I know a bit about Julia, but it seems focused on areas I’m not super interested in. I should spend more time with it though.
Inference (will) work the same as Rust; constrained defaults to i32. It’s just a demo program so I didn’t think about it a ton. Given how large fib grows, u64 is probably best, i32 was just the first type I had implemented :)
I don’t currently have any form of generics or non-single dispatch. You can’t pass different types to different functions. Heck I don’t even have casting yet. I’ll get there. I’m not fully sure how I want to do some kinds of abstraction just yet.
Very cool, and congrats on releasing! I might try it out in the next days, sounds fun. Currently it still looks very similar to rust.
What are you looking for right now, with this post? Feedback, contributers, early adopters?
Thanks!
I'm not sure what I'm looking for, exactly. I just figure if I publish something, I should publish it. I'm not sure it's really ready for real early adoption; there's no way to get input into rue programs yet, for example. Because I haven't implemented strings, because I am not yet sure about the exact ownership semantics I want to have... I'm working on it, though. If you do kick the tires, please file bugs!
I peeked at the spec but it seems to be early days. (e.g. Enum types aren't listed under Types but are under Items)
What about Rue will be higher level than Rust? I'm guessing something wrt. ownership or the evaluation strategy? I couldn't find anywhere those were described…
It is very, very early days, yes. I just landed enums after posting this!
I will probably have a mandatory runtime, I may not include unsafe. I'm willing to give up some performance for simplicity. As to where that leads, we'll find out. I'm likely to go linear types + mutable value semantics.
Memory Safe: No garbage collector, no manual memory management. A work in progress, though.
eeeeinteresting. I wonder what some of Steve's inspirations are...
Rust, Zig, Hylo. Some Swift. Some linear type stuff, I haven’t really written in many of the languages that implement them yet though.