News for hackers. Stuff that matters.
Re:Next steps for Rust in the kernel by TotoHorner on Wednesday September 21, 2022 @08:52AM (#32924368)
For someone new to systems programming, should I just start with Rust?

Or should I learn C/C++ first and then learn Rust?

I've just done projects in Python,JS & Java so far.

Re:Next steps for Rust in the kernel by deckiedan on Wednesday September 21, 2022 @09:07AM (#32924604)
It depends what you're trying to do.

If you want just to "play" and do some tiny projects as low level as reasonable - go for learning C first. You'll learn a lot - and then when you learn rust, the reasons why things are done that way will make a lot of sense. Also, so many low level utils are written in C - having a basic knowledge of it is really useful. But don't try to build a big complex thing in it unless you have a really good reason to (or you fall in love with C. Some people do!)

If you want to actually build something big and complex and for real world use - probably go for Rust.

If you want to build a big production system using an already established tech that's based on C++, learn that. (Eg. one of the C++ based game engines, or a C++ GUI framework, or whatever).

Re:Next steps for Rust in the kernel by Symmetry on Wednesday September 21, 2022 @09:44AM (#32925056)
Learning enough C to be able to understand most C you come across is a much, much smaller lift than doing the same with C++. It can be useful later and also give you an understanding of how computers work, at least down to the level of abstraction they present to compiled code which does hide some of the underlying complexity. And I think, for me at least, having a C level understanding of things will help understand the design and rules of Rust more easily. You don't need to learn it first but spending a weekend on it before diving into Rust is plausibly a good idea.

C++ has everything C has plus many layers of complexity deposited over it that can make you more productive but also obscure your relationship with the machine. If you're going to go on to Rust I wouldn't bother with C++ at all right now.

Re:Next steps for Rust in the kernel by amalcon on Wednesday September 21, 2022 @09:31AM (#32924891)
It's difficult to answer this right now because the overwhelming majority of people who use Rust now have at least some background in C or C++.

If you're coming from Java, the most difficult thing you'll need to learn is memory management, as all of those languages do that for you. The other difficult thing is threading, but that's 1) unnecessary and 2) not actually that different from Java.

Rust forces you (unsafe aside) to do memory management in one specific way, and verifies it in the compiler. C and C++ let you do whatever you want, though C++ encourages (without requiring) a Rust-like approach.

I think Rust will probably be better if you want to have a constrained environment that tries to prevent mistakes. C will be better if you want to explore on your own, learn from the mistakes, and thus understand why Rust wants you to do particular things. C++ frankly doesn't have a whole lot to recommend it unless you are working with a C++ codebase, already know C, or really need one of its features.

Re:Next steps for Rust in the kernel by cbm-vic-20 on Wednesday September 21, 2022 @10:30AM (#32925681)
> If you're coming from Java, the most difficult thing you'll need to learn is memory management,

I'm coming from a largely Java background (though I program a lot of C and assembly as a hobby), and this statement is very true. Getting used to the borrow checker and reference lifetimes has been the largest obstacle so far. But once that is understood, the rest of Rust is basically learning the idioms and ecosystem.

I will likely change how I write C based on my experience with Rust's memory ownership model..

Re:Next steps for Rust in the kernel by pizza234 on Wednesday September 21, 2022 @09:01AM (#32924514)
Unless you're doing isolated experiments, it's complicated, because systems programming inevitable interfaces and coexists with C. So one will need to have a reasonable understanding of C and its ecosystem (I'm doing this now).

Moving from high-level languages to Rust is going to be a nice punch in the face :)

Some people suggest to learn C/C++ but that ultimately depends on the resources available. If one has infinite time, certainly it's ideal, but with limited time, I think learning Rust will already be very demanding.

My suggestion: find some small projects you find interesting. Follow the usual Rust learning path (reference book first, then find other books), and apply it to the projects you've chosen; after an year or so, ask the question again.

Other small suggestion: don't start from book that pretend to teach Rust by learning another topic, because the amount of Rust that can be taught in 100 pages is useless (a lot of books pretend to do so). On the other hand, there are way more books to find fun projects/topics than there were an year ago.

Re:Next steps for Rust in the kernel by gary17the on Wednesday September 21, 2022 @01:57PM (#32928744)
> For someone new to systems programming, should I just start with Rust? Or should I learn C/C++ first and then learn Rust?

IMHO, if your end-goal is Rust, learn Rust directly.

The angle I am coming from: I've been doing C++ for 20 years and Rust for over a year.

Learning C/C++ can provide great value on its own, through gaining knowledge of how lower-level programming primitives work, but many of your C/C++ skills won't be subsequently applicable to Rust, except perhaps for core concepts such as a stack, a heap, owning memory, a `struct`, etc. This is caused by the fact that Rust takes many programming abstractions much _farther_ than C and in a substantially _different_ direction than C++. For example: where C uses manually managed pointers, Rust uses compile-time checked ownership and borrowing; where C++ uses inheritance, Rust uses generics and composition; where C uses void pointers ;) and C++ uses pure virtual functions, Rust uses traits and `where` clauses; where C and C++ use... a programmer's eyeballs to guarantee multi-threaded correctness ;), Rust uses compile-time "marker" traits; and so on.

Don't get me wrong: C and C++ are extremely able, powerhouse languages worth your time in their own respect, it is just that most of the C/C++ -specific knowledge you invest your time to learn beforehand won't be directly applicable to Rust later on, because Rust just does things in a significantly different way than C/C++.

Oh, don't forget to RTFM - Rust is easy to learn by reading (in order to understand its unique concepts), but Rust is hard to learn by experimentation alone (trying 100 different syntax variations to see what compiles).

Re:Next steps for Rust in the kernel by kjeetgill on Wednesday September 21, 2022 @09:35AM (#32924937)
Start with C. C++ is fine too.

You don't need to 100% the language, a few months experience will be be handy for the rest of your computing career. It'll be a perfectly reasonable stepping stone for reading C++ without really needing to learn all the details to write it.

As much as any language can be: C is still the lingua franca, a relative common denominator. As you explore different parts of the computing environment around you, you'll run into it constantly.

Learning about python? C. Digging into how your program talks to the OS? glibc and the man pages and most examples will be C oriented. Any documentation ever explains how something is laid out in memory? It'll be explained in C structs. How function calls work? The assembly will be explained in terms of C code and C's calling convention. Any language's FFI? C. Digging into the JVM, browsers, Javascript? It's C++ but you'll know enough to eyeball the code.

This is mostly about all the things you'll want to be able to read about well. Anything you'll want to know has been done in C or C++ — Nothing big exists that you'll want to explore is mostly written in Rust or Zig yet. And there are still things that can't reasonably be yet either (oversimplification).

Re:Next steps for Rust in the kernel by Twisol on Wednesday September 21, 2022 @08:56AM (#32924430)
Rust has a bit of a steeper learning curve at the start, but it pays off once you get used to it. C and C++ are deceptively simple at first, but as time goes on you keep discovering more nuances that affect most of your code.

There's no real problem starting with Rust, especially if you have some experience with other languages. The biggest difference is going to be getting used to dealing explicitly with memory, since all the languages you listed have a garbage collector; but this is true of all of C, C++ and, Rust. Be kind to yourself -- don't expect it all to click instantly.

Re:Next steps for Rust in the kernel by dijit on Wednesday September 21, 2022 @09:03AM (#32924535)
C will teach you how computers think.

Rust is it's own thing; I personally really like it but going from C to Rust is harder than just going to Rust as you have to "unlearn" C paradigms.

You'll probably be "better" if you go C first, but it will take a lot of time and energy.

In the end its completely up to you.

Re:Next steps for Rust in the kernel by Twisol on Wednesday September 21, 2022 @09:06AM (#32924595)
> C will teach you how computers think.

It will teach you how a PDP-11 thinks, at best. The cache hierarchy and speculative execution are completely hidden at the level of C, to start with.

You want to learn how computers think, pick up an assembly language. (Any one will do.) You want to build portable low-level software, learn Rust, Zig, C, or C++ (in my personal order of preference).

Re:Next steps for Rust in the kernel by rob74 on Wednesday September 21, 2022 @09:41AM (#32925013)
Cache hierarchy, branch prediction, speculative execution and all of the other performance enhancements of modern CPUs are hidden from assembly too. If you are a real whiz, you may be able to hand-tune your assembly code so that it takes better advantage of one of these features and runs 0.1% faster, but otherwise these features are transparent even to assembly programmers.
Re:Next steps for Rust in the kernel by Twisol on Wednesday September 21, 2022 @02:28PM (#32929215)
Just to mention it here, too (I wrote more in a cousin comment), Intel's own Software Development Manuals [0] explicitly talks about all three of these things. I don't consider these features hidden when the primary reference for programming this platform clearly documents and provides advice on them.

[0] https://www.intel.com/content/www/us/en/developer/articles/t...

Re:Next steps for Rust in the kernel by nextaccountic on Wednesday September 21, 2022 @05:06PM (#32931532)
> 0.1% faster,

The performance gains of fine-tuned code is typically two orders of magnitude higher

Re:Next steps for Rust in the kernel by kjeetgill on Wednesday September 21, 2022 @09:19AM (#32924762)
The cache hierarchy and speculative execution are completely hidden at the level of assembly too, so I'm not sure what you're getting at.
Re:Next steps for Rust in the kernel by Twisol on Wednesday September 21, 2022 @02:23PM (#32929128)
> The cache hierarchy [...] are completely hidden at the level of assembly too

A quick glance at Intel's Software Developer's Manuals [0] falsifies this:

>> TLB and Cacheability control: CLFLUSH, CLFLUSHOPT, CLWB, INVD, WBINVD, INVLPG, INVPCID, and memory instructions with a non-temporal hint (V/MOVNTDQA, V/MOVNTDQ, V/MOVNTI, V/MOVNTPD, V/MOVNTPS, V/MOVNTQ, V/MASKMOVQ, and V/MASKMOVDQU).

> [..] speculative execution are completely hidden at the level of assembly too

Section 18.1.13 specifically mentions side-channels for speculative execution, and there are more than 100 other matches for "speculative" across the document (some of which also refer to load barriers).

So no, these things are not completely hidden at the assembly level, and at least in the case of the (or one of the?) most popular consumer CPU architecture in the world, they are actively documented in the primary reference for an assembly programmer.

[0] https://www.intel.com/content/www/us/en/developer/articles/t...

Re:Next steps for Rust in the kernel by cbm-vic-20 on Wednesday September 21, 2022 @10:24AM (#32925572)
This is true even on later PDP-11 models with memory caches.
Re:Next steps for Rust in the kernel by packetlost on Wednesday September 21, 2022 @09:36AM (#32924956)
You're much more likely to get bitten by those 2 things at the ASM level... I guess.
Re:Next steps for Rust in the kernel by kjeetgill on Wednesday September 21, 2022 @09:42AM (#32925031)
So I don't work at that level, I'd love to hear more. What situations do they leak through in?
Re:Next steps for Rust in the kernel by packetlost on Wednesday September 21, 2022 @09:50AM (#32925137)
you'll mostly notice performance problems if you're not aware of cache lines when writing concurrent software, though it's relevant whenever you read from main memory. As for speculative execution, you probably won't really encounter issues related to that unless you go out of your way to. I don't believe it can actually cause problems in programs (though it is helpful for exfiltrating otherwise secret data).
Re:Next steps for Rust in the kernel by marcosdumay on Wednesday September 21, 2022 @10:10AM (#32925399)
> It will teach you how a PDP-11 thinks, at best. The cache hierarchy and speculative execution are completely hidden at the level of C, to start with.

And error recovery (that is fucking crazy on x86), and wide instructions, and I/O, and stack management, and... I am not sure C is even a good approximation for the PDP-11.

Re:Next steps for Rust in the kernel by dboreham on Wednesday September 21, 2022 @10:20AM (#32925526)
All computers are pdp-11s.
Re:Next steps for Rust in the kernel by antegamisou on Wednesday September 21, 2022 @09:09AM (#32924634)
> You want to learn how computers think, pick up an assembly language.

For which you'd need to be familiar with a low-level language like C.

Re:Next steps for Rust in the kernel by ImprobableTruth on Wednesday September 21, 2022 @09:20AM (#32924768)
... no? In fact I think learning assembly before C makes a lot more sense than the other way around.
Re:Next steps for Rust in the kernel by orobinson on Wednesday September 21, 2022 @09:45AM (#32925072)
This. The computer science degree I did started off in the first term with us building computers on an FPGA by mapping out the logic gates, then programming it in assembly. Learning how to program in C followed this.

It's a good way of helping people with no programming knowledge get past the stage of "what are those magic colourful words you type that somehow make the computer do things?".

Re:Next steps for Rust in the kernel by stjohnswarts on Wednesday September 21, 2022 @10:07PM (#32934062)
I think this is an awful way of learning for beginning CS students. It will scare off too many good kids who think this is all that CS will ever be. Top down is better. Bottom up is only going to be good for people who adore computer architecture guts and want to start at the bottom from first principals. Most kids want to use computers as a tool and not learn it's atomic structure.
Re:Next steps for Rust in the kernel by stjohnswarts on Wednesday September 21, 2022 @10:05PM (#32934051)
Unless you're experienced well in some other language then assembly is going to scare you off. I learned assembly by looking at -O0 output from c compiler code. Then I went ahead and dived in. Just doing bare assembly is not somewhere a beginner should start unless they are just absolutely in love with low level programming.
Re:Next steps for Rust in the kernel by jcranmer on Wednesday September 21, 2022 @09:17AM (#32924738)
No, you don't. In the curriculum I've taught, assembly was taught before C. As long as you have any programming language experience, you should be fine with assembly--I've explained it in terms of even MATLAB before.
Re:Next steps for Rust in the kernel by Filligree on Wednesday September 21, 2022 @09:19AM (#32924759)
Assembly was my first language. I had no trouble picking that up, and in fact didn't meet a compiler until ten years later. They were much too expensive at the time.
Re:Next steps for Rust in the kernel by HideousKojima on Wednesday September 21, 2022 @10:27AM (#32925616)
I learned CHIP-8 asm and Gameboy asm before ever touching C
Re:Next steps for Rust in the kernel by pwpw on Wednesday September 21, 2022 @10:36AM (#32925786)
I want to learn how to build emulators for CHIP-8 and Gameboy and am having the person tug-of-war over assembly, C, or Rust. With hindsight, do you recommend doing them in assembly? And what resources did you use to get started?
Re:Next steps for Rust in the kernel by HideousKojima on Wednesday September 21, 2022 @10:58AM (#32926095)
I wrote my CHIP-8 emulator in C#, actually. I used the Godot game engine for rendering and sound (though I never actually got around to implementing sound). The language you write it in really doesn't matter too much unless you really care about performance, or if you want to do something fancier than an interpreter (like a JIT recompiler). I used this guide:

https://tobiasvl.github.io/blog/write-a-chip-8-emulator/

I haven't made a Gameboy emulator, just learned the assembly so I could modify some roms.

Re:Next steps for Rust in the kernel by gotlou on Thursday September 22, 2022 @09:16AM (#32938381)
I wrote a CHIP-8 emulator[0] a while back in C using SDL2 for rendering everything. It still has a couple issues with the timers and taking input. I was new to C back then so I did this project to become more familiar with it.

You can check out my blog post[1] if you're interested how I went about it (there are a couple resources at the bottom I used to build it, including the one that HideousKojima recommended).

As for language, in hindsight, C was fine. CHIP-8 is so basic that you don't really need to worry about performance or to implement a JIT compiler unless you want to learn how to do those things specifically. Just pick any one out of the three (assembly is a bit of a weird choice though, why not write a CHIP-8 emulator and then a brand new program to run on that emulator in CHIP-8 assembly if you want to learn assembly?)

As for Gameboy, it would have more instructions, a different graphics system, sound etc. and overall be more complicated than CHIP-8. Try it out if you either feel a bit more adventurous or have implemented CHIP-8.

[0](https://sr.ht/~gotlou/chip8-emulator) [1](https://gotlou.srht.site/chip8-emulator.html)

Re:Next steps for Rust in the kernel by nindalf on Wednesday September 21, 2022 @09:07AM (#32924599)
I don’t think this is true.

Check this post out - Should you learn C to "learn how the computer works"? (https://steveklabnik.com/writing/should-you-learn-c-to-learn...). Spoiler alert - no.

Re:Next steps for Rust in the kernel by kjeetgill on Wednesday September 21, 2022 @09:15AM (#32924710)
> C is not “how the computer works.” I don’t think most people mean this phrase literally, so that is sort of irrelevant. Understanding the context means that learning C for this reason may still be a good idea for you, depending on your objectives.

I think summarizing that article as "no" really undercuts how diplomatic and reasonable Steve Klabnik is in it.

Re:Next steps for Rust in the kernel by steveklabnik on Wednesday September 21, 2022 @11:26AM (#32926466)
Thank you for the kind words. I got enough heat for it at the time that it took me a full year to return to the topic, so it's nice that some folks still remember it fondly.
Re:Next steps for Rust in the kernel by cannabis_sam on Wednesday September 21, 2022 @01:29PM (#32928398)
Your views on programming languages are deeply appreciated, regardless of whether I agree or not.
Re:Next steps for Rust in the kernel by nindalf on Wednesday September 21, 2022 @09:18AM (#32924741)
Of course learning widely used technologies may be a good idea for some people, depending on their objectives. That’s a truism.

But is it necessary to understand now a computer works? No.

You can also check out "C is how the computer works" is a dangerous mindset for C programmers (https://steveklabnik.com/writing/c-is-how-the-computer-works...)

Re:Next steps for Rust in the kernel by dijit on Wednesday September 21, 2022 @09:11AM (#32924662)
Steve Klabnik has done a lot for systems programming and that post is a lot more even-handed than you're suggesting.

If, however, we're talking about the kernel then perhaps we should listen to what Torvalds says about this topic.

"People who designed C, designed it at a time where the language had to be geared towards the output, so when I read C I can think about the Assembly that it will create":

http://www.youtube.com/watch?v=MShbP3OpASA&t=20m45s

Consider that he said this in a time with C++, even if Rust was in its infancy: it is not as tied to the assembly it produces. Not by a long shot.

Re:Next steps for Rust in the kernel by TrickardRixx on Wednesday September 21, 2022 @09:19AM (#32924761)
Sounds to me like if I want to know "how computers think" I should learn assembly.
Re:Next steps for Rust in the kernel by dijit on Wednesday September 21, 2022 @09:26AM (#32924832)
I know you're trying to be a smart-arse; but by virtue of using C you will learn Assembly.

The issue with Assembly directly is that it's absurdly non-portable, too low level and too unstructured to do anything reasonable with it.

There's a reason that Linux is written in C and not ASM Directly.

Re:Next steps for Rust in the kernel by jcranmer on Wednesday September 21, 2022 @10:22AM (#32925545)
> by virtue of using C you will learn Assembly.

Even interpreting this as charitably as possible--that you don't mean literally learning assembly but rather learning everything besides specific assembly syntax that you would have picked up from learning assembly--this claim doesn't hold water.

For starters, C isn't that much closer to hardware than, say, Java. The main differences you have with C are that a) C has a pointers-are-almost-integers model [1] and b) C has a more limited runtime than other languages. C is still a fundamentally based on an abstract machine semantics model, and that abstract machine doesn't have a close bearing on modern hardware.

In particular, C does not distinguish between registers and memory, and if I had to pick the single most salient feature of modern hardware you need to understand well to be able to say you understand how computers work, it's the register/memory distinction. If you think processors are mostly like they were in the 1970s--when you could say "add 1 to this memory location"--then C's shrugging off the register/memory distinction makes sense, but this is a situation that hasn't been true for several decades.

Another failure of C is that it's far less expressive than assembly. There are features in other languages that are impossible to express in C. How do you write a function with multiple entry points, as you can in Fortran? Or a coroutine, as you can in Algol? Or nested functions, as in Pascal? Or try-catch, as in C++? Or functions with multiple return values, as in Matlab? Indeed, how do you write something like JMP *reg in C, a useful primitive for state machines?

No, C does not come close to being a good description of modern processors, where "modern" means "anything that came out since I was born."

[1] Not going to open up the can of worms that is pointer provenance.

Re:Next steps for Rust in the kernel by cesarb on Wednesday September 21, 2022 @10:41AM (#32925852)
> C does not distinguish between registers and memory

Just nitpicking, but doesn't C have the register keyword? (I know it does nothing at all nowadays, but AFAIK it did make a slight difference back in the dark ages.)

Re:Next steps for Rust in the kernel by tialaramex on Wednesday September 21, 2022 @12:57PM (#32927958)
C's register keyword is a storage specifier, it actually does do something, what it does is announce "This might not have an address" (your CPU registers don't have addresses) and so you can't make a pointer to it with the unary & address operator.

Your C compiler might conclude - even if it doesn't decide to put the variable in a register - that since the variable notionally doesn't have an address some optimisations are available which it can't otherwise be sure are safe.

Re:Next steps for Rust in the kernel by jcranmer on Wednesday September 21, 2022 @10:50AM (#32925988)
Considering that `volatile register _Atomic int x;` is a totally legal statement, and two [1] of those keywords have semantics that are only relevant for memory operations, I'd say that the "register" keyword isn't sufficient to distinguish register from memory.

[1] Okay, the official semantics of "volatile" strictly speaking are completely orthogonal to memory, but the practical effect that everyone agrees on (don't optimize this memory access) is inherently oriented towards memory, and the fact that the semantics are so vague about what it actually does is partially a reflection of the fact the semantics themselves don't distinguish between register and memory.

Re:Next steps for Rust in the kernel by UncleMeat on Wednesday September 21, 2022 @09:46AM (#32925086)
> by virtue of using C you will learn Assembly.

I don't believe this at all. You won't learn how to deal with limited numbers of registers. You won't learn about method prologues and epilogues. You won't learn about oodles of stuff.

Re:Next steps for Rust in the kernel by Jensson on Wednesday September 21, 2022 @10:02AM (#32925301)
> You won't learn how to deal with limited numbers of registers. You won't learn about method prologues and epilogues.

Those things takes like an hour to learn, translating C to assembly is trivial, it takes time and will be verbose but it isn't hard at all. So even though you don't learn all the details you still learn all the higher level stuff related to assembly programming when you program in C.

This isn't true for other languages, translating arbitrary C++ or Java or Javascript to assembly is really hard, so they don't teach you to think like an assembly programmer.

Re:Next steps for Rust in the kernel by dijit on Wednesday September 21, 2022 @10:05AM (#32925337)
> deal with limited numbers of registers

I mean; you will likely end up stepping through debuggers where you will see registers being used. At least if you learned C like I learned C.

Similarly for Prologue and Epilogue.

"why does a function call have a cost" is a common question and it's solved forever after an hour googling.

Re:Next steps for Rust in the kernel by klabb3 on Wednesday September 21, 2022 @12:12PM (#32927297)
Rust is written in the blood of fallen C/C++ projects.

If you're willing to accept, at face value, that certain easy tasks are convoluted for Good Reasons, you can go straight to Rust. If you want figure out why for yourself, start with C.

Re:Next steps for Rust in the kernel by Animats on Wednesday September 21, 2022 @05:05PM (#32931521)
That is the best description of why Rust exists that I've seen so far.
Re:Next steps for Rust in the kernel by the_duke on Wednesday September 21, 2022 @09:01AM (#32924501)
This is highly personal and depends on your learning style.

I always want to learn bottom up, and personally recommend starting with C.

A)

Rust gives you many great abstractions that you will want to use, even if you skip the standard library. This gets in the way of really learning to work with and understanding pointers and low level mechanisms. You can certainly do that in Rust, but you have to force yourself to ignore most oft the language.

B)

You will have to read and interact with C code eventually, and be it just calling out to libraries or wrapping libraries in Rust interfaces.

A solid understanding of C is critical to do that correctly.

There's also a lot of safety tooling that you rarely need with Rust, but should be comfortable with. (Like valgrind)

After learning Rust you will hate working with C (well, I do...), so it's better to do it early.

Re:Next steps for Rust in the kernel by tialaramex on Wednesday September 21, 2022 @02:43PM (#32929492)
I essentially began with C, but my guess is that you should start lower if you can.

You don't want to get fooled into thinking C's abstract machine is what your actual machine is like, because it really, really isn't. A bunch of the stuff C is deliberately vague about because it wasn't portable in the 1970s is very concrete and important to understand about on a real computer. Rust's Wrapping<u8> and Saturating<i16> have behaviour that you could buy with a real CPU (indeed your actual CPU almost certainly can do Wrapping<u8> with no extra work) but C doesn't promise anything like this and names types things like "short int" which could be anything.

On the other hand, some things C makes seem obviously concretely real, are just being simulated convincingly and that's not necessarily how your CPU works at all. Nobody really promised "pointers" are just integers you can go around doing arithmetic with for example.

Re:Next steps for Rust in the kernel by sondr3 on Wednesday September 21, 2022 @08:57AM (#32924446)
I started using Rust because I wanted a programming language that compiled to native binaries, and the choice at the time was really only C++, Go and Rust. In the end I chose Rust because it was new and shiny, and I've stuck with it. Never written a single unsafe line of code or anything low-level, it's just been CLI tools and web APIs.
Re:Next steps for Rust in the kernel by thetrashcanman on Wednesday September 21, 2022 @09:02AM (#32924532)
I would argue that if you’re really interested in systems programming, learning C is required just because the vast majority of the resources on systems programming is explained using C. The only notable exception is the Book Rust In Action! That being said, is your goal to be a systems programmer or a rust programmer? If it’s the latter, then learn Rust! But, as it seems that you are learning programming in general, learn the basics and data structures algorithms (these are rather language agnostic).
Re:Next steps for Rust in the kernel by skywhopper on Wednesday September 21, 2022 @08:58AM (#32924469)
You’ll ultimately need to know both. Lots of new stuff will be in Rust, but plenty of old C/C++ code won’t be going away in our lifetimes. I’d start with the one used by the projects you are most motivated to work on immediately.
Re:Next steps for Rust in the kernel by qwery on Wednesday September 21, 2022 @09:37AM (#32924970)
> should I learn C/C++ first and then learn Rust?

If your endpoint is Rust anyway, just start there. You can always learn C (and/or C++) later.

I don't think it matters (much) which language you start with. Any one of the suggested languages (or commonly suggested languages in general) will be fine. I think this applies in general too, at any levels of skill/experience, but probably matters more for someone with less experience.

Re:Next steps for Rust in the kernel by nextaccountic on Wednesday September 21, 2022 @05:05PM (#32931524)
Don't start with C++.

Between C and Rust, Rust has better tooling and an easy to use library ecosystem. C is a smaller and easier to grasp language.

I would start with Rust if you want to write a real world project. And probably start with Rust if you just want to write some leetcode algorithms as well (but C is fine here too)

Re:Next steps for Rust in the kernel by packetlost on Wednesday September 21, 2022 @09:33AM (#32924918)
Depends on what you're doing, but really Rust is built with the explicit goal of being able to link to C easily. You would be doing yourself a favor to learn C (not C++) in general, but especially because you will be able to use C libraries from Rust.
Re:Next steps for Rust in the kernel by oleganza on Wednesday September 21, 2022 @08:54AM (#32924393)
I learned Rust because I need to write low-level high-performance stuff and I don't want to spend time learning how to do it correctly in C++. Rust compiler automates many chores for me, just like any computer technology is supposed to.
Re:Next steps for Rust in the kernel by NIckGeek on Wednesday September 21, 2022 @10:16AM (#32925476)
I'd recommend learning Rust because the way Rust pushes you into writing code will lead you to write better C code, etc.

People that learn C or C++ first often end up fighting the Rust compiler a bit until they adjust their mindset.

Re:Next steps for Rust in the kernel by jerf on Wednesday September 21, 2022 @09:54AM (#32925188)
Personally I'd recommend Rust first, then C.

Rust's borrowing and ownership semantics are not bizarre and novel solutions to things that aren't problems in other languages. Rust's borrowing and ownership semantics are a compiler-level reification of problems that exist in all languages, and especially multithreaded languages. This 100% includes C. You may not adopt Rust's exact solutions in all cases, but if your are programming at a system's level at all and you're not thinking about the problems that Rust exposes directly, you're in trouble and you don't even know it. Using Rust is a great way to work in an environment where the compiler is forcing you to learn how that all works, and will train you good and hard about how to think about issues of ownership and what code is allowed to touch what.

I primarily work in Go, a garbage collected language, and I heavily use the concurrency features. That doesn't mean I don't have to think about ownership because the language lacks any support for it, or that I don't have to worry about who is responsible for deallocating things because I work in a GC'd language. It means I have to think about those things, but I lack support from the language. My personal career experience means this is not a terrible tradeoff; as a result of all my time in Erlang and Haskell it is no big deal for me to operate concurrently in a manner that I know will work, because while they are different than Rust, they were also harsh taskmasters in terms of only allowing me to do certain things that work. Other tradeoffs make Go worth it for me despite this lack of language support. But the lack of support doesn't make the problems go away. It just makes it so you can't see them immediately at compile time.

I would expect that someone who learned Rust for a year, then learned C for a year, would probably produce better C code than someone who learned C for two years. Eventually, the C programmer will, by hook and by crook, learn all the things that Rust would have taught you, but you'll be learning it in an enviromnent that lets you make mistakes, then build on them for months before they finally blow up in your face. It is far easier to learn about what mistakes you are making in an environment where it instantly tells you that you made a mistake.

(Also, I should clarify something: By "C" here, I mean programming in raw C, without any particular additional support. For the sort of purposes I'm talking about here, I actually consider "C with a strong static analysis tool like Coverity" a separate language. If you use such a tool pervasively and work in a code base that has either been cleaned to its satisfaction or started from scratch under the analyzer's support, you can also learn in a fast-feedback environment what not to do. It won't be the exact same lessons as Rust, but it'll be good enough; there are many paths to enlightenment in this case, just as I trod a completely different one as mentioned above. The important point is to use one of these, or perhaps another, and not simply stand in front of the monster that is Raw C with nothing but your own wits to guide you. I don't care how smart you are. It'll eat you alive. You do not want to be responsible for trying to tame the thing yourself under your own power and nothing else.)

Re:Next steps for Rust in the kernel by spoiler on Thursday September 22, 2022 @12:13PM (#32940997)
I've personally been doing C and then C++ for about a decade before moving onto Rust 2-3 year ago. I don't think you're missing out on much by skipping C or C++, but I recommend dabbling in them a bit (doesn't matter if before/while/after learning Rust), as it will make you appreciate Rust more.
Re:Next steps for Rust in the kernel by aaaaaaaaaaab on Wednesday September 21, 2022 @12:57PM (#32927962)
Most production systems have been transitioning to Rust in the past few years, so that’s the safest bet in my opinion.

The story I’m seeing at most companies is that they have a few old guys taking care of maintaining their legacy C/C++ codebase, and there’s a diverse bunch of young folks shipping new components in Rust.

Re:Next steps for Rust in the kernel by rust_is_dead on Wednesday September 21, 2022 @09:35AM (#32924951)
My advice would be to learn the language that your operating system is written in.
Re:Next steps for Rust in the kernel by PerFartmann on Wednesday September 21, 2022 @08:54AM (#32924395)
Keep on using python and JS.

When the time comes you can start with Rust