4 ms·
Rust will never be a contender for C, because Rust does not embody the same lasting concepts C does. Rust is an obvious competitor to C++, where complexity grow
by andrewmcwatters 4y ago
Rust will never be a contender for C, because Rust does not embody the same lasting concepts C does. Rust is an obvious competitor to C++, where complexity growing without bound abounds.
But for those of us looking for a C alternative, we have it, and it's Go. Is it a perfect replacement? I don't think so. But it is the closest spiritual successor the industry has.
"Go bears a surface similarity to C and, like C, is a tool for professional programmers, achiev- ing maximum effect with minimum means. But it is much more than an updated version of C."
"Go is sometimes described as a ‘‘C-like language,’’ or as ‘‘C for the 21st century.’’ From C, Go inherited its expression syntax, control-flow statements, basic data types, call-by-value param- eter passing, pointers, and above all, C’s emphasis on programs that compile to efficient machine code and cooperate naturally with the abstractions of current operating systems."
-Preface of "The Go Programming Language"[1][2][3]
"We’ll start with the now-traditional ‘‘hello, world’’ example, which appears at the beginning of The C Programming Language, published in 1978. C is one of the most direct influences on Go, and ‘‘hello, world’’ illustrates a number of central ideas."
- Chapter 1.1 Hello World, "The Go Programming Language"
[1]: https://go.dev/learn/#featured-books https://go.dev/learn/#featured-books
[2]: https://www.gopl.io https://www.gopl.io
[3]: https://www.gopl.io/ch1.pdf https://www.gopl.io/ch1.pdf
- yazaddaruvala 4y ago> But for those of us looking for a C alternative, we have it, and it's Go. What exactly have you been using C for? Go has a very heavy runtime and is garbage collected. It also cannot be embedded within other languages. Go has very different performance characteristics. Go on embedded might be possible but would be a big exercise for the reader. I'm really not sure what you mean by Go is C alternative. The only similarity between C and Go I see is the syntax and that there were no generics, and even that is no longer the same. The only other similarity is the need to cast to and from the equivalent of `(void *)` to get around the typechecker.
- throwup 4y agoA language with a GC and a green thread runtime can perhaps replace C in specific applications, but I definitely wouldn't call it a spiritual successor to C. There's way too much extra stuff between you and the CPU. Odin and Zig seem most likely to take that crown one day. Maybe.
- nicoburns 4y agoI think Rust is a competitor for C in much the same way that C++ is a competitor to C. And I suspect it will eventually gobble up more of C's market share than C++ has, because it's a much better language (no disrespect to C++ - Rust is at least 20 years newer), the linux kernel being a good example of this effect. There probably is still a niche for a simpler language than Rust or C++, but I don't see Go fulfilling that niche. Zig seems like the strongest candidate here.
- errantmind 4y agoAgreed, but I don't see Zig ever fulfilling that niche either as the compiler is too opinionated (like Go) in ways that are off-putting to a significant subset of developers, myself included.
- nicoburns 4y agoIs this referencing things like “won’t compile if there are unused variables”? I agree this is a problem, but I have hope that this will actually get changed in zig, which seems to be more of a community run project than Go.
- errantmind 4y agoYes, but based on the available information in the Github issue(s), I don't think it is going to change, although I'd be happy if it did. I believe Zig and Go's adoption is essentially capped with the compiler being this pedantic, as it overly bisects potential adopters. It is too polarizing. Some people love it, some people dislike it, but for the people who dislike it, it is enough to write off the entire language.
- Someone 4y agoFor me, “bare to the metal” is one of the main benefits of C. I don’t see go have that. So, what are, in your opinion, the lasting concepts of C, and how does go embody them?
- woodruffw 4y ago> But for those of us looking for a C alternative, we have it, and it's Go. Is it a perfect replacement? I don't think so. But it is the closest spiritual successor the industry has. I don't understand the "spiritual successor" part: Go intentionally broke ABI compatibility with the C world and intentionally does a lot of very un-C-like things: a large standard library, a GC'd runtime, a compiler toolchain that reimplements the "standard" toolchain, etc. Go is a clear productivity, reliability, and security improvement over C. But I don't know if I would characterize it as a successor language, other than in the "came from the Bell crowd" sense. Which also applies to C++. Edit: Go is also not well known for binary interoperability, which is one of C's main selling points.
- deleted 4y ago[deleted]
- Matl 4y agoI had this conversation before and I think I know what they mean; they don't mean it in a low-level, technical sense. It's meant more in the sense that Go is very much of a similar philosophy in terms of abstractions not getting in the way of your work. That is, if you're a moderately competent Go dev there's little to decipher looking at pretty much any codebase. In other words, you'd spend most of your time familiarizing yourself with the code itself, not Go.
- woodruffw 4y agoI think I understand that as a virtue of Go, but I don't see how it makes it a successor language: C famously has no abstractions, meaning nothing that gets in the way of your work and nothing that helps it either. The most productive C codebases are the ones that have existed for years, where every possible utility and type has been built from scratch out of need; Go programmers are able to be productive from the get-go.
- Matl 4y agoYes, if Go is a 'successor' then obviously it has to offer something over C, like a standard library. However it is still very much a low abstraction, get out of my way language 'in the spirit of C'. It's obviously not a true successor as it has a GC for one, but one way I like to think about it is that if Java is in some ways a more convenient C++ for application development, if you will, then Go would be that but a more convenient C, not C++ The 'C successor' comes more from the philosophical approach of Go's core team to the language design being similar to that of C, not it being a practical successor to C as such.
- vore 4y agoWhat lasting concepts of C do you have in mind? I think Go if anything is a contender for Python: a significant number of use cases that require C e.g. embedded, hardware interaction, kernel etc. are really not good use cases for Go at all.
- halayli 4y agoYou might consider yourself a C programmer but you'll see a push back being accepted as one when you look at Go as a C alternative. For a language to be a C alternative it should offer at a minimum full memory control and layout. The compiled instructions would map very closely to the code with barely any runtime related calls sprinkled and definitely not GC ones. Go is a great language, but vastly different than C.
- AnimalMuppet 4y agoDepends on what you think C is. If you think it's a simple language, then yes, Go is reasonable to view as C's successor. But if you think of C as a language for writing OSes and doing low-level programming, I'm not sure that Go is there.
- tmtvl 4y agoGo? If a GC language would be acceptable as a replacement for C, then the strongest candidate has been around since 1984. It's called "Common Lisp".
- slondr 4y agoIndeed, and there's still folks out there holding the line that C is not an acceptable replacement for Common Lisp :)
- slondr 4y agohttps://fasterthanli.me/articles/i-want-off-mr-golangs-wild-ride https://fasterthanli.me/articles/i-want-off-mr-golangs-wild-...
- Sirened 4y agoawesome article, thank you! >Oh, yeah, I missed that sorry. > >>Is this not a breaking change? > >Some would argue it's a "fixing" change. yikes. This article really speaks to so many of the pain points I had with Go; the language itself is fine but the whole standard library has so many just...odd...decisions that you don't notice until they blow your foot off when something off the happy path happens like, as the author notes, a server stops responding or your system boots with a wall time of unix epoch.
- rat87 4y agoRust seems like a good c alternative for people who haven't already switched to c++ (and for people who have). For people who can switch to a higher level (ie Garbage Collected) languages what does go have over Java or C# or python?
- strangeattractr 4y agoGo is the language i use the most and in almost no sense would I consider it a replacement or contender for C. If anything it's replacing things in the opposite direction, I rarely use python now. C is used for low level stuff e.g. embedded, OS, drivers. Go is GC'd which is a huge barrier. This is honestly one of the most bizarre takes I've ever seen on Rust vs Go. If I had to bet I'd say Rust will never replace C but it won't be because Go did so instead.
- andrewmcwatters 4y agoI don't know how this can be bizarre to you unless you don't read things directly from the language authors. They say this stuff themselves. Rust's major influences include C++. Go's primary influence is C.