Implementing (part of) a BitTorrent client in Rust
Jon Gjengset2 HN recommenders · recommended in 2 months, 2023-2023
115K views · 3 years ago · tutorial · evergreen
Jon Gjengset's roughly four-hour live stream implementing part of a BitTorrent client in Rust, following CodeCrafters' test-guided challenge. He builds from scratch and shows idiomatic error handling along the way.
HN recommends it as a comprehensive walkthrough of the build-your-own-BitTorrent challenge and as an introduction to CodeCrafters.
29:25Rust NYC: Jon Gjengset - Demystifying unsafe code
Rust Programming Language
27K views • 6 years ago
2:34:01Crust of Rust: async/await
Jon Gjengset
246K views • 5 years ago
2:59:08Vibe coding complex changes in Rust
Jon Gjengset
55K views • 1 year ago
1:02:49Hacking with Andrew and Brad: tip.golang.org
The Go Programming Language
99K views • 11 years ago
3:03:54The Why, What, and How of Pinning in Rust
Jon Gjengset
87K views • 7 years ago
1:33:23Crust of Rust: Lifetime Annotations
Jon Gjengset
299K views • 6 years ago
52:54Rust at speed — building a fast concurrent database
Jon Gjengset
225K views • 7 years ago
1:00:54GoingNative 2012 - Day 2 - Clang
aghuttun
13K views • 13 years ago
39:03RustConf 2020 - Closing Keynote by Siân Griffin
Rust Programming Language
10K views • 6 years ago
1:01:51Rant: Entity systems and the Rust borrow checker ... or something.
Jonathan Blow
304K views • 8 years ago
22:19Lars Bergstrom - Beyond Safety and Speed: How Rust Fuels Team Productivity
Rust Nation UK
18K views • 2 years ago
48:19GopherCon 2014 Inside the Gophers Studio with Blake Mizerany
Confreaks
8K views • 12 years ago
32:24RustLatam 2019 - Without Boats: Zero-Cost Async IO
Rust Programming Language
55K views • 7 years ago
2:16:18Hot Code Reloading in C
Tsoding Daily
94K views • 3 years ago
42:382021: Year of the Linux Gaming Desktop - Andrew Kelley
Zig SHOWTIME
15K views • 5 years ago
1:00:23[#36] Zig Roadmap 2024 - Andrew Kelley
Zig SHOWTIME
66K views • 2 years ago
48:46Rust's Journey to Async/Await
InfoQ
90K views • 6 years ago
1:55:24Ideas about a new programming language for games.
Jonathan Blow
530K views • 12 years ago
1:05:59Data Oriented GUI in Rust by Raph Levien - Bay Area Rust Meetup
Rust Programming Language
83K views • 8 years ago
29:47The Truth about Rust/WebAssembly Performance
Greg Johnston
218K views • 3 years ago
5 comments from Hacker News
Take a watch of Jon Gjengset's vids on this (there's a codecrafters challenge for building out a bittorent protocol that he's going through). - ▶ this video - link
(CodeCrafters team here). Out of curiosity, is there a reason why you prefer video format vs. interactive? e.g out of habit, when I'm having a meal, I like watching "course videos" or streams occasionally. Is yours similar? P.S. Jon Gjengset did a comprehensive stream going through the Build your own BitTorrent challenge ▶ this video , if you're interested in Rust
I found that CodeCrafters is quite fun after watching an video on Youtube[0], and shared it with my friends who might also be interested. The feedback I got was quite similar to the community: - really interesting idea, but - pricing is absurd, not gonna pay 100$ for these, and - their minimal paid plan at 40$/mo is a lie, with a fine print: Available as a one-time payment for 3 months or 1 year access. - Lack of in depth implementation of the projects, i.e for the free HTTP server project, it stopped at "Post a file", lack of beefy & fun stuff like for example HTTP 1.1 Pipelining I believe the value (the fun) it would provide me would be about the same level of Ace Combat 7 (I paid ~40$US), and the complexity is less than Bauder's Gate(69$SG). I would pay roughly US$40 for all of the content altogether at this moment. edit: added a link -- [0]: ▶ this video
I was thinking of `guard` in Swift when I was writing but I haven't used it so I was unsure of its exact semantics. It is a bit of a shame it is only useable on optionals and not on arbitrary types. Nice to see a full pattern matching guard in Rust. I think the terminating `?` operator makes it a bit less necessary as I would guess a large portion of cases where I would want that early-return behavior I would just take advantage of that operator. But their choice to reuse `else` makes a lot of sense and the pattern reads well. I was watching the recent Rust stream by Jon Gjengset where he builds a BitTorrent implementation [1]. One thing he did frequently was add a `.context` method to function invocations that would terminate in `?`. My assumption just looking at that pattern is that it would allow the error system to tag the errors to help guide the programmer to the specific line the error was generated from, almost like an annotated stack trace. But again, I don't have direct experience programming large Rust applications. The reason I consider this topic it is because this kind of error handling would be ideal in Go. I often end up with the classic pattern: if value, err := someFunc(); !err { // value is useable } // handle err And I would just really, really like if Go would let me: if value, err := someFunc(); err != nil { // handle err } // value is useable But, I suppose due to Go block scoping `value` is only valid within the if block. 1. ▶ this video
Oh hey, that's me! A better link is ▶ this video which has chapter marks and has the power outage in the middle spliced away :p