diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6c4281c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "spellright.language": [], + "spellright.documentTypes": [ + "latex", + "plaintext" + ] +} \ No newline at end of file diff --git a/README.md b/README.md index af3d617..10225be 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Thought dump +The repository for the book [Future Explained in 200 Lines of Rust](https://cfsamson.github.io/books-futures-explained/) + ### Data + Vtable We need to get a basic grasp of this to be able to understand how we implement a Waker. diff --git a/src/0_1_BackgroundInformation.md b/src/0_1_BackgroundInformation.md index c4cb030..5a36fce 100644 --- a/src/0_1_BackgroundInformation.md +++ b/src/0_1_BackgroundInformation.md @@ -6,13 +6,34 @@ information that will help demystify some of the concepts we encounter. ## Concurrency in general If you find the concepts of concurrency and async programming confusing in -general, I'd recommend that you spend a little time exploring some of the -basic concepts first. Learning `Futures` in Rust is not the best introduction -to the subject. +general, I know where you're coming from and I have written some resources to +try to give a high level overview that will make it easier to learn Rusts +`Futures` afterwards: -I have spent quite a bit of time digging into these subjects myself, and I'll -point you to some of thos sources +[Async Basics - The difference between concurrency and parallelism](https://cfsamson.github.io/book-exploring-async-basics/1_concurrent_vs_parallel.html) +[Async Basics - Async history](https://cfsamson.github.io/book-exploring-async-basics/2_async_history.html) +[Async Basics - Strategies for handling I/O](https://cfsamson.github.io/book-exploring-async-basics/5_strategies_for_handling_io.html) +[Async Basics - Epoll, Kqueue and IOCP](https://cfsamson.github.io/book-exploring-async-basics/6_epoll_kqueue_iocp.html) -**The absolute minimum** +## Trait objects and dynamic dispatch -[Async Basics - The Difference Between Concurrency And Parallelism]() \ No newline at end of file +The single most confusing topic we encounter when implementing our own `Futures` +is how we implement a `Waker`. Creating a `Waker` involves creating a `vtable` +which allows using dynamic dispatch to call methods on a _type erased_ trait +object we construct our selves. + +If you want to know more about dynamic dispatch in Rust I can recommend this article: + +https://alschwalm.com/blog/static/2017/03/07/exploring-dynamic-dispatch-in-rust/ + + +Let's explain this a bit more in detail. + +## Fat pointers in Rust + +Let's take a look at the size of some different pointer types in Rust. If we +run the following code: + +```rust + +``` \ No newline at end of file