What's always been interesting about the languages Meta uses is the story of the rise and fall of the D programming language at Meta. I wasn't around at the time when Andrei was working there and advocating for its adoption, but it seemed like he hit a wall at some point. By the time I joined all D services were being deprecated or rewritten.<p>Rust seems to be doing far better. Though it's also worth noting that Go never got the same adoption as Rust either. Wonder if someone more familiar with the story of all these languages at Meta can comment on why that is.
> Meta’s primary supported server-side languages are Hack, C++, Rust, and Python.<p>> For specific use cases, we support other languages, including Java, Erlang, Haskell, and Go<p>Makes sense.
Python because ML.<p>Rust because of performance.<p>C++ and Java because all-the-things.<p>Go because 75% of all cncf.io projects are Go.<p>Haskell because elitism.<p>Erlang because stability.<p>/s<p>I think the real story is that migrating off PHP was too hard, so Hack was started which required a substantial C++ employee pool which meant that Rust was the ideal replacement to all of this skipping the Java/Kotlin and Go ecosystems altogether.<p>So not just scale at play here, a cause-and-effect of past hiring decisions.
“Since we began our journey with Rust, the number of projects using Rust inside Meta has increased at an accelerated rate”<p>That almost sounds like an endorsement. I’ve been holding off learning Rust. However, it seems like Rust adoption is reaching a tipping point.
The primary use case for Rust being CLI is somewhat strange and speaks to non-technical considerations. Does anyone really think there is an advantage Rust brings here over everything else -- Golang, Python etc. Rust community seems to go after "hot" areas in hopes of getting traction, fully understandable. Writing web services is another area Rust people jumped into looking at the popularity of Golang. Most recent "hot" area being crypto. The reality is none of these areas is a sweet spot for Rust and will remain niche (in comparison to other languages). The sweet spot is low level systems programming and displacing C++ (of which there is a real and desperate need). If the community can focus on interoperability with C++ (at the gnarly level), would be make a big difference to adoption.
I used to work there, and I'm personally sad that JavaScript wasn't mentioned: I was the architect of <a href="https://dl.acm.org/doi/10.1145/3477132.3483572" rel="nofollow">https://dl.acm.org/doi/10.1145/3477132.3483572</a>
While this is cool to see "how the big guys do it", this article is worthless. Specifically, it lacks one fundamental thing: why.<p>Why isn't Go in this list? It is very surprising since it feels like all off tech jumped on the Go bandwagon, though I won't complain. I can only guess at why, but it would be very interesting to see why.<p>Why is Rust in the list, other than "so many people started to use it internally that we were kind of forced to officially support it" (at least that's how I understand their article)? Similarly I won't complain, but it'd be great as to what real benefits they pull off. At least it's great to know that Rust is considered mature by Meta, which adds them to the list of Big Corp endorsing it (Amazon, Google, Microsoft, Apple, Mozilla, ...).
This was an interesting, thought-provoking read. But the author of the post is a member of the board of directors of the Rust Foundation. <a href="https://foundation.rust-lang.org/news/2022-03-16-news-announcing-three-new-board-members-copy/" rel="nofollow">https://foundation.rust-lang.org/news/2022-03-16-news-announ...</a><p>Perhaps a blind spot for Meta is they're spending time working away from PHP/Hack so as they reach for Rust (away from web-centric languages) they don't realize TypeScript has compelling reasons to choose it on the server-side:<p><pre><code> * Vercel-driven / full-stack developer innovation
* ubiquity of JS/TS for tooling, innovation, etc.
* fast enough to run serverless
* rich ecosystem, though you do need to curate your dependencies yourself and not just let npm take you for a ride
* closer to customers; since closer to the web, but with types.
* no over-engineering re: borrow checker for 90% of use cases.
</code></pre>
I'm biased but I see no fundamental reason why everything doesn't converge on TypeScript in the future. C : C++/Rust (context: systems development) as JS : TS (context: all programming).
For folks at Meta, is Thrift still the main communication protocol for service-to-service communication? Curious to see if that's still how most of these server-side applications talk with each other.
I’m surprised they said Rust is their new language of choice for CLI tools. I’m no expert but always saw Go as the better choice for CLI tooling where performance is important, Rust more of a low level language for highly performant libraries and tools, and Python a good choice for scripting or plumbing that needs to work and be easily maintainable, without special performance concerns (Python is my primary language, I’ve only dabbled in Go and Rust).
There's a lot more Python which is somehow not considered "server-side use" even though it's absolutely essential for standing up a new service. You can't do configuration or alerting without at least a little bit of it, for example, and those are mandatory. There's also some Ruby, because chef, but TBH in 3.5 years there I never had to touch more than a couple of tiny bits personally.
I work at Meta and I use tools written in bash, C, Java, Go, TypeScript, Kotlin and Dart daily. I've definitely noticed that some C++ tools are moving to Rust. I would have preferred to see D in its place, but it is what it is.<p>Personally I'm not a fan of Rust, but it is interesting to see how the language is growing as it hits mainstream. Lots of similarities with Go back when it was cool and hip.
All the notes about supported languages are very superficial, it reads more about “we adopted Rust” than anything else. Someone clearly felt the need to say it out loud.
I remember interviewing there in 2009 and I stopped counting the number of languages I was told were being used on the SRO / backend side. I'm sure it wasn't, but it seemed like it was basically "everything" :-)
It's curious not to see any JVM language there. Scala isn't even mentioned. Probably the data size is so high that the only way to survive there is to write everything in low level C++ or Rust.
I'm very surprised that C++ is one of the recommended languages for backend services. I occasionally am interested in learning C++ but with my context as a web developer I find it doesn't really fit any of my use cases.<p>How would one go about building a rest service in C++? Do you have to write everything yourself or are there libraries and frameworks. I did some light looking into it after reading the article but I would love to hear from folks who actually do it and what the state of the art is for C++ web services.
I'm surprised by the use of Rust in domains where a GC is perfectly fine, like much of CLI tooling. Manual memory management is one of the most time consuming issues to deal with and I don't understand why people are burdening themselves with it in domains where it's not strictly necessary.<p>If you want an ML / C family hybrid language there's Ocaml, or if you just want a fast static-binary language there's Go.
In a pre-AST project 2 world, I've found the following 4 languages work well for programming (non-frontend) use cases, based on my startup experience:<p>- Java (with JOOQ): As a high level typed language (similar to Hack for Meta's use case. If Golang's generics help create a JOOQ equivalent in the future, then this would be Golang).<p>- C++/Carbon: As a systems/performance language. (We haven't tried Carbon yet, but this I feel would help beat Rust for this systems category)<p>- JS/TypeScript (Node or Deno or zx): As a scripting/tools language.<p>- Python: As a data processing and machine learning language (primarily thanks to the JIT computing and data libraries for Python). (This list ignores CUDA :))
Not surprised at the list. Hack stands out as unique to facebook. Is hack being used in other large companies? I wonder if they will ever move back to php now that many issues facebook had have been resolved in later versions.
c++ and rust for server side use?<p>I would have expected Go even for CLI due to fast compilation and easy cross compilation out of the box<p>Their manager is either incompetent, or he is very opinionated, wich doesn't sound good for their stack
I'm surprised at the list. Rust is fundamentally immature, C++ is fundamentally intractable, Python is fundamentally unusable at scale, and Hack is, well, no discussion needed. Strong negative signal for potential candidates.