Feed: Pascal's Scribbles Title: Long-form Texts on Interesting Details of Computers Date: Wed, 15 Apr 2020 18:00:00 -0400 Link: https://deterministic.space/several-months-of-reading-material.html
It seems especially recently Iâve come across more and more long-form texts (think: hour-long blog posts; free books; series of posts). I especially like the ones that go into the very fine details of some niche topic and maybe also ramble a bit about completely unrelated but highly entertaining asides. And while I will probably never have enough time to read them all, I decided to at least collect some of them here for future reference. Iâll do my best to add summaries, and to update this list semi-regularly.
Contents
- âLearn Rust With Entirely Too Many Linked Listsâ by Alexis Beingessner[^1]
- âProgramming Algorithmsâ by Vsevolod Domkin[^2]
- âAspects of Rustâ by multiple people[^3]
- âReading files the hard wayâ by Amos Wenger[^4]
- âMaking our own pingâ by Amos Wenger[^5]
- âMaking our own executable packerâ by Amos Wenger[^6]
- âParsingâ by Aleksey Kladov[^7]
- âJavaScript AllongĂ©â by Reg âraganwaldâ Braithwaite[^8]
- âCrafting Interpretersâ by Robert Nystrom[^9]
- âA relatively simple Datalog engine in Rustâ by Frank McSherry[^10]
- âNon-lexical lifetimesâ by Niko Matsakis[^11]
- âShifgrethorâ by Without Boats[^12]
- âRayon/Parallel Iteratorsâ by Niko Matsakis[^13]
- âHow Rust optimizes async/awaitâ by Tyler Mandry[^14]
- âWriting an OS in Rustâ by Philipp Oppermann[^15]
- âLearning Parser Combinators With Rustâ by Bodil Stokke[^16]
- âManish vs. ASCIIâ by Manish Goregaokar[^17]
- âThe Wayland Protocolâ by Drew DeVault[^18]
âLearn Rust With Entirely Too Many Linked Lists[^19]â by Alexis Beingessner
(~180 pages; archived[^20])
The premise of this book is that writing a linked list is a beginnerâs exercise in C but quite difficult to get right in Rust. So it takes that as an opportunity to do just what the title says: It teaches you Rust by implementing a linked list type in Rust, in five (as of April 2020) different ways.
Niches: data structures; linked lists; rust; smart pointers
Last update I saw: 2019-03-21
âProgramming Algorithms[^21]â by Vsevolod Domkin
(~300 pages; archived[^22])
Book covering a lot of different data structures and algorithms. âIts aim is to systematically explain how to write efficient programs and, also, the approaches and tools for determining why the program isnât efficient enough.â
Niches: data structures; algorithms; lisp
Last update I saw: 2020-04-16
âAspects of Rustâ by multiple people
Several stand-alone posts by various people whose only connection is that they cover nice aspects of Rust.
Niches: rust
-
A half-hour to learn Rust[^23] (archived[^24])
Whirlwind tour through Rust as a language by Amos Wenger.
-
Typed Key Pattern[^25] (archived[^26])
By Aleksey Kladov.
-
The Secret Life of Cows[^27] (archived[^28])
The Clone-on-Write smart pointer explained by yours truly.
-
Newtype Index Pattern[^29] (archived[^30])
By Aleksey Kladov.
-
How to implement a trait for &str and &[&str][^31] (archived[^32])
Some musing on traits and borrows by yours truly.
-
Declarative memory management[^33] (archived[^34])
By Amos Wenger. Introducing the complexities of memory management and the ways Rust tries to represent them in a nice roundabout way.
-
Return-type based dispatch[^35] (archived[^36])
By yours. By specifying at some later point in the code which type you want your function to return, the compiler can go back and fill in the blanks.
-
Working with strings in Rust[^37] (archived[^38])
By Amos Wenger. Following the memory management post, this looks at how strings are actually pretty complicated and what Rust does about them.
âReading files the hard wayâ by Amos Wenger
Writing files seems like a solved problem. But that doesnât mean we canât solve it again from scratch.
Niches: POSIX; file systems; syscalls
- Part 1 (node.js, C, rust, strace)[^39] (archived[^40])
- Part 2 (x86 asm, linux kernel)[^41] (archived[^42])
- Part 3 (ftrace, disk layouts, ext4)[^43] (archived[^44])
âMaking our own pingâ by Amos Wenger
- A short (and mostly wrong) history of computer networking[^45] (archived[^46])
- Windows dynamic libraries, calling conventions, and transmute[^47]
(archived[^48])
- FFI-safe types in Rust, newtypes and MaybeUninit[^49] (archived[^50])
- Designing and implementing a safer API on top of LoadLibrary[^51]
(archived[^52])
- A simple ping library, parsing strings into IPv4 address[^53] (archived[^54])
- The builder pattern, and a macro that keeps FFI code DRY[^55] (archived[^56])
- Finding the default network interface through WMI[^57] (archived[^58])
- Binding C APIs with variable-length structs and UTF-16[^59] (archived[^60])
- Consuming Ethernet frames with the nom crate[^61] (archived[^62])
- Improving error handling - panics vs. proper errors[^63] (archived[^64])
- Parsing IPv4 packets, including numbers smaller than bytes[^65]
(archived[^66])
- Parsing and serializing ICMP packets with cookie-factory.[^67] (archived[^68])
- Crafting ARP packets to find a remote hostâs MAC address[^69] (archived[^70])
- Crafting ICMP-bearing IPv4 packets with the help of bitvec[^71]
(archived[^72])
âMaking our own executable packerâ by Amos Wenger
- Whatâs in a Linux executable?[^73] (archived[^74])
- Running an executable without exec[^75] (archived[^76])
- Position-independent code[^77] (archived[^78])
- ELF relocations[^79] (archived[^80])
- The simplest shared library[^81] (archived[^82])
- Loading multiple ELF objects[^83] (archived[^84])
- Dynamic symbol resolution[^85] (archived[^86])
- Dynamic linker speed and correctness[^87] (archived[^88])
- GDB scripting and Indirect functions[^89] (archived[^90])
- Safer memory-mapped structures[^91] (archived[^92])
- More ELF relocations[^93] (archived[^94])
- A nostd Rust binary[^95] (archived[^96])
- Thread-local storage[^97] (archived[^98])
âParsingâ by Aleksey Kladov
Not a real series of articles but a collection of posts by someone whose Github bio reads âStuck writing parsersâ.
Niches: parsers
- Modern Parser Generator[^99] (archived[^100])
- Simple but Powerful Pratt Parsing[^101] (archived[^102])
- From Pratt to Dijkstra[^103] (archived[^104])
âJavaScript AllongĂ©[^105]â by Reg âraganwaldâ Braithwaite
(~530 pages; archived[^106])
Niches: functional programming; obscure JavaScript
Last update I saw: 2019-04-26
âCrafting Interpreters[^107]â by Robert Nystrom
(~800 pages; archived[^108])
Last update I saw: 2020-04-05
âA relatively simple Datalog engine in Rust[^109]â by Frank McSherry
(~20 pages; archived[^110])
Building a datalog engine in Rust.
Niches: datalog
âNon-lexical lifetimesâ by Niko Matsakis
One of the main features of the Rust language is the concept of ownership and lifetimes. This series of posts by Niko Matsakis, one of the designers of the Rust language, is about the theory and practical implementation of a revamped and more complete way of this in the Rust compiler. It starts in early 2016 and goes all the way to after they feature landed (end of 2018).
- Introduction[^111] (archived[^112])
- Non-lexical lifetimes based on liveness[^113] (archived[^114])
- Adding the outlives relation[^115] (archived[^116])
- Using liveness and location[^117] (archived[^118])
- Nested method calls via two-phase borrowing[^119] (archived[^120])
- Draft RFC and prototype available[^121] (archived[^122])
- An alias-based formulation of the borrow checker[^123] (archived[^124])
- MIR-based borrow check (NLL) status update[^125] (archived[^126])
- MIR-based borrowck is almost here[^127] (archived[^128])
- Interprocedural conflicts[^129] (archived[^130])
- Polonius and region errors[^131] (archived[^132])
- Polonius and the case of the hereditary harrop predicate[^133]
(archived[^134])
âShifgrethorâ by Without Boats
A proposed API for a GC in Rust.
- Garbage collection as a Rust library[^135] (archived[^136])
- Notes on tracing garbage collectors[^137] (archived[^138])
- Rooting[^139] (archived[^140])
- Tracing[^141] (archived[^142])
âRayon/Parallel Iteratorsâ by Niko Matsakis
Niches: concurrency
- Rayon: Data parallelism in Rust[^143] (archived[^144])
- Parallel Iterators Part 1: Foundations[^145] (archived[^146])
- Parallel Iterators Part 2: Producers[^147] (archived[^148])
- Parallel Iterators, part 3: Consumers[^149] (archived[^150])
âHow Rust optimizes async/awaitâ by Tyler Mandry
Niches: compilers; memory layout
- Part I[^151] (archived[^152])
- Part II: Program analysis[^153] (archived[^154])
âWriting an OS in Rustâ by Philipp Oppermann
Niches: operating systems, assembler
- A Freestanding Rust Binary[^155] (archived[^156])
- A Minimal Rust Kernel[^157] (archived[^158])
- VGA Text Mode[^159] (archived[^160])
- Testing[^161] (archived[^162])
- CPU Exceptions[^163] (archived[^164])
- Double Faults[^165] (archived[^166])
- Hardware Interrupts[^167] (archived[^168])
- Introduction to Paging[^169] (archived[^170])
- Paging Implementation[^171] (archived[^172])
- Heap Allocation[^173] (archived[^174])
- Allocator Designs[^175] (archived[^176])
- Async/Await[^177] (archived[^178])
âLearning Parser Combinators With Rust[^179]â by Bodil Stokke
(~60 pages; archived[^180])
Assuming you know Rust, this teaches you the fundamentals of parser combinators in a very hands-on way.
Niches: parsers
âManish vs. ASCIIâ by Manish Goregaokar
Several posts on why assuming text is ASCII is unhelpful.
Niches: unicode
-
Letâs Stop Ascribing Meaning to Code Points[^181] (archived[^182])
tl;dr you should not index into a Unicode text, like, ever.
-
Breaking Our Latin-1 Assumptions[^183] (archived[^184])
Examples for scripts/languages that really donât work if you assume you have ASCII text.
-
Picking Apart the Crashing iOS String[^185] (archived[^186])
Fun analysis of a Unicode rendering bug that crashed iOS devices.
âThe Wayland Protocol[185]â by Drew DeVault
(~156 pages; archived[186])
âWayland is the next-generation display server for Unix-like systems[âŠ] This book will help you establish a firm understanding of the concepts, design, and implementation of [it]â.
Niches: wayland; graphics; protocols; unix
Links:
[^1]:
example https://deterministic.space/feed.xml#learn-rust-with-entirely-too-many-linked-lists-by-alexis-beingessner (link)
[^2]:
example https://deterministic.space/feed.xml#programming-algorithms-by-vsevolod-domkin (link)
[^3]:
example https://deterministic.space/feed.xml#aspects-of-rust-by-multiple-people (link)
[^4]:
example https://deterministic.space/feed.xml#reading-files-the-hard-way-by-amos-wenger (link)
[^5]:
example https://deterministic.space/feed.xml#making-our-own-ping-by-amos-wenger (link)
[^6]:
example https://deterministic.space/feed.xml#making-our-own-executable-packer-by-amos-wenger (link)
[^7]:
example https://deterministic.space/feed.xml#parsing-by-aleksey-kladov (link)
[^8]:
example https://deterministic.space/feed.xml#javascript-allong%C3%A9-by-reg-raganwald-braithwaite (link)
[^9]:
example https://deterministic.space/feed.xml#crafting-interpreters-by-robert-nystrom (link)
[^10]:
example https://deterministic.space/feed.xml#a-relatively-simple-datalog-engine-in-rust-by-frank-mcsherry (link)
[^11]:
example https://deterministic.space/feed.xml#non-lexical-lifetimes-by-niko-matsakis (link)
[^12]:
example https://deterministic.space/feed.xml#shifgrethor-by-without-boats (link)
[^13]:
example https://deterministic.space/feed.xml#rayonparallel-iterators-by-niko-matsakis (link)
[^14]:
example https://deterministic.space/feed.xml#how-rust-optimizes-asyncawait-by-tyler-mandry (link)
[^15]:
example https://deterministic.space/feed.xml#writing-an-os-in-rust-by-philipp-oppermann (link)
[^16]:
example https://deterministic.space/feed.xml#learning-parser-combinators-with-rust-by-bodil-stokke (link)
[^17]:
example https://deterministic.space/feed.xml#manish-vs-ascii-by-manish-goregaokar (link)
[^18]:
example https://deterministic.space/feed.xml#the-wayland-protocol-by-drew-devault (link)
[^19]:
example https://rust-unofficial.github.io/too-many-lists/index.html (link)
[^20]:
example https://web.archive.org/web/20200416132847/https://rust-unofficial.github.io/too-many-lists/index.html (link)
[^21]:
example https://leanpub.com/progalgs/read (link)
[^22]:
example https://web.archive.org/web/20200416131734/https://leanpub.com/progalgs/read (link)
[^23]:
example https://fasterthanli.me/blog/2020/a-half-hour-to-learn-rust/ (link)
[^24]:
example https://web.archive.org/web/20200416203813/https://fasterthanli.me/blog/2020/a-half-hour-to-learn-rust/ (link)
[^25]:
example https://matklad.github.io/2018/05/24/typed-key-pattern.html (link)
[^26]:
example https://web.archive.org/web/20200426170858/https://matklad.github.io/2018/05/24/typed-key-pattern.html (link)
[^27]:
example https://deterministic.space/secret-life-of-cows.html (link)
[^28]:
example https://web.archive.org/web/20200426171212/https://deterministic.space/secret-life-of-cows.html (link)
[^29]:
example https://matklad.github.io/2018/06/04/newtype-index-pattern.html (link)
[^30]:
example https://web.archive.org/web/20200426170901/https://matklad.github.io/2018/06/04/newtype-index-pattern.html (link)
[^31]:
example https://deterministic.space/return-type-based-dispatch.html (link)
[^32]:
example https://web.archive.org/web/20200426171311/https://deterministic.space/return-type-based-dispatch.html (link)
[^33]:
example https://fasterthanli.me/blog/2019/declarative-memory-management/ (link)
[^34]:
example https://web.archive.org/web/20200416202910/https://fasterthanli.me/blog/2019/declarative-memory-management/ (link)
[^35]:
example https://deterministic.space/return-type-based-dispatch.html (link)
[^36]:
example https://web.archive.org/web/20200426171311/https://deterministic.space/return-type-based-dispatch.html (link)
[^37]:
example https://fasterthanli.me/blog/2020/working-with-strings-in-rust/ (link)
[^38]:
example https://web.archive.org/web/20200416203533/https://fasterthanli.me/blog/2020/working-with-strings-in-rust/ (link)
[^39]:
example https://fasterthanli.me/blog/2019/reading-files-the-hard-way/ (link)
[^40]:
example https://web.archive.org/web/20200416203146/https://fasterthanli.me/blog/2019/reading-files-the-hard-way/ (link)
[^41]:
example https://fasterthanli.me/blog/2019/reading-files-the-hard-way-2/ (link)
[^42]:
example https://web.archive.org/web/20200416203148/https://fasterthanli.me/blog/2019/reading-files-the-hard-way-2/ (link)
[^43]:
example https://fasterthanli.me/blog/2019/reading-files-the-hard-way-3/ (link)
[^44]:
example https://web.archive.org/web/20200416203157/https://fasterthanli.me/blog/2019/reading-files-the-hard-way-3/ (link)
[^45]:
example https://fasterthanli.me/blog/2019/making-our-own-ping/ (link)
[^46]:
example https://web.archive.org/web/20200416134726/https://fasterthanli.me/blog/2019/making-our-own-ping/ (link)
[^47]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-2/ (link)
[^48]:
example https://web.archive.org/web/20200416145917/https://fasterthanli.me/blog/2019/making-our-own-ping-2/ (link)
[^49]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-3/ (link)
[^50]:
example https://web.archive.org/web/20200416145936/https://fasterthanli.me/blog/2019/making-our-own-ping-3/ (link)
[^51]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-4/ (link)
[^52]:
example https://web.archive.org/web/20200416145936/https://fasterthanli.me/blog/2019/making-our-own-ping-4/ (link)
[^53]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-5/ (link)
[^54]:
example https://web.archive.org/web/20200416145942/https://fasterthanli.me/blog/2019/making-our-own-ping-5/ (link)
[^55]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-6/ (link)
[^56]:
example https://web.archive.org/web/20200416145943/https://fasterthanli.me/blog/2019/making-our-own-ping-6/ (link)
[^57]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-7/ (link)
[^58]:
example https://web.archive.org/web/20200416145943/https://fasterthanli.me/blog/2019/making-our-own-ping-7/ (link)
[^59]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-8/ (link)
[^60]:
example https://web.archive.org/web/20200416150009/https://fasterthanli.me/blog/2019/making-our-own-ping-8/ (link)
[^61]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-9/ (link)
[^62]:
example https://web.archive.org/web/20200416150006/https://fasterthanli.me/blog/2019/making-our-own-ping-9/ (link)
[^63]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-10/ (link)
[^64]:
example https://web.archive.org/web/20200416150009/https://fasterthanli.me/blog/2019/making-our-own-ping-10/ (link)
[^65]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-11/ (link)
[^66]:
example https://web.archive.org/web/20200416150021/https://fasterthanli.me/blog/2019/making-our-own-ping-11/ (link)
[^67]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-12/ (link)
[^68]:
example https://web.archive.org/web/20200416150207/https://fasterthanli.me/blog/2019/making-our-own-ping-12/ (link)
[^69]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-13/ (link)
[^70]:
example https://web.archive.org/web/20200416150054/https://fasterthanli.me/blog/2019/making-our-own-ping-13/ (link)
[^71]:
example https://fasterthanli.me/blog/2019/making-our-own-ping-14/ (link)
[^72]:
example https://web.archive.org/web/20200416150207/https://fasterthanli.me/blog/2019/making-our-own-ping-14/ (link)
[^73]:
example https://fasterthanli.me/blog/2020/whats-in-a-linux-executable/ (link)
[^74]:
example https://web.archive.org/web/20200416203931/https://fasterthanli.me/blog/2020/whats-in-a-linux-executable/ (link)
[^75]:
example https://fasterthanli.me/blog/2020/running-an-executable-without-exec/ (link)
[^76]:
example https://web.archive.org/web/20200416203942/https://fasterthanli.me/blog/2020/running-an-executable-without-exec/ (link)
[^77]:
example https://fasterthanli.me/blog/2020/position-independent-code/ (link)
[^78]:
example https://web.archive.org/web/20200416203931/https://fasterthanli.me/blog/2020/position-independent-code/ (link)
[^79]:
example https://fasterthanli.me/blog/2020/elf-relocations/ (link)
[^80]:
example https://web.archive.org/web/20200416203942/https://fasterthanli.me/blog/2020/elf-relocations/ (link)
[^81]:
example https://fasterthanli.me/blog/2020/the-simplest-shared-library/ (link)
[^82]:
example https://web.archive.org/web/20200416203942/https://fasterthanli.me/blog/2020/the-simplest-shared-library/ (link)
[^83]:
example https://fasterthanli.me/blog/2020/loading-multiple-elf-objects/ (link)
[^84]:
example https://web.archive.org/web/20200416203946/https://fasterthanli.me/blog/2020/loading-multiple-elf-objects/ (link)
[^85]:
example https://fasterthanli.me/blog/2020/dynamic-symbol-resolution/ (link)
[^86]:
example https://web.archive.org/web/20200416203951/https://fasterthanli.me/blog/2020/dynamic-symbol-resolution/ (link)
[^87]:
example https://fasterthanli.me/blog/2020/dynamic-linker-speed-and-correctness/ (link)
[^88]:
example https://web.archive.org/web/20200416203951/https://fasterthanli.me/blog/2020/dynamic-linker-speed-and-correctness/ (link)
[^89]:
example https://fasterthanli.me/blog/2020/gdb-scripting-and-indirect-functions/ (link)
[^90]:
example https://web.archive.org/web/20200416203954/https://fasterthanli.me/blog/2020/gdb-scripting-and-indirect-functions/ (link)
[^91]:
example https://fasterthanli.me/blog/2020/safer-memory-mapped-structures/ (link)
[^92]:
example https://web.archive.org/web/20200416204004/https://fasterthanli.me/blog/2020/safer-memory-mapped-structures/ (link)
[^93]:
example https://fasterthanli.me/blog/2020/more-elf-relocations/ (link)
[^94]:
example https://web.archive.org/web/20200416204015/https://fasterthanli.me/blog/2020/more-elf-relocations/ (link)
[^95]:
example https://fasterthanli.me/blog/2020/a-no-std-rust-binary/ (link)
[^96]:
example https://web.archive.org/web/20200426170253/https://fasterthanli.me/blog/2020/a-no-std-rust-binary/ (link)
[^97]:
example https://fasterthanli.me/blog/2020/thread-local-storage/ (link)
[^98]:
example https://web.archive.org/web/20200504104021/https://fasterthanli.me/blog/2020/thread-local-storage/ (link)
[^99]:
example https://matklad.github.io/2018/06/06/modern-parser-generator.html (link)
[^100]:
example https://web.archive.org/web/20200426170539/https://matklad.github.io/2018/06/06/modern-parser-generator.html (link)
[^101]:
example https://matklad.github.io/2020/04/13/simple-but-powerful-pratt-parsing.html (link)
[^102]:
example https://web.archive.org/web/20200416155208/https://matklad.github.io/2020/04/13/simple-but-powerful-pratt-parsing.html (link)
[^103]:
example https://matklad.github.io/2020/04/15/from-pratt-to-dijkstra.html (link)
[^104]:
example https://web.archive.org/web/20200416155220/https://matklad.github.io/2020/04/15/from-pratt-to-dijkstra.html (link)
[^105]:
example https://leanpub.com/javascriptallongesix/read (link)
[^106]:
example https://web.archive.org/web/20200416145246/https://leanpub.com/javascriptallongesix/read (link)
[^107]:
example http://craftinginterpreters.com/contents.html (link)
[^108]:
example https://web.archive.org/web/20200411062649/http://craftinginterpreters.com/contents.html (link)
[^109]:
example https://github.com/frankmcsherry/blog/blob/81e9555bbee110954f2c3d35caf86ea7e7612fa6/posts/2018-05-19.md (link)
[^110]:
example https://web.archive.org/web/20200423163205/https://github.com/frankmcsherry/blog/blob/81e9555bbee110954f2c3d35caf86ea7e7612fa6/posts/2018-05-19.md (link)
[^111]:
example https://smallcultfollowing.com/babysteps/blog/2016/04/27/non-lexical-lifetimes-introduction/ (link)
[^112]:
example https://web.archive.org/web/20200416170054/https://smallcultfollowing.com/babysteps/blog/2016/04/27/non-lexical-lifetimes-introduction/ (link)
[^113]:
example http://smallcultfollowing.com/babysteps/blog/2016/05/04/non-lexical-lifetimes-based-on-liveness/ (link)
[^114]:
example https://web.archive.org/web/20190917065228/http://smallcultfollowing.com/babysteps/blog/2016/05/04/non-lexical-lifetimes-based-on-liveness/ (link)
[^115]:
example https://smallcultfollowing.com/babysteps/blog/2016/05/09/non-lexical-lifetimes-adding-the-outlives-relation/ (link)
[^116]:
example https://web.archive.org/web/20200416170116/https://smallcultfollowing.com/babysteps/blog/2016/05/09/non-lexical-lifetimes-adding-the-outlives-relation/ (link)
[^117]:
example https://smallcultfollowing.com/babysteps/blog/2017/02/21/non-lexical-lifetimes-using-liveness-and-location/ (link)
[^118]:
example https://web.archive.org/web/20200416170119/https://smallcultfollowing.com/babysteps/blog/2017/02/21/non-lexical-lifetimes-using-liveness-and-location/ (link)
[^119]:
example https://smallcultfollowing.com/babysteps/blog/2017/03/01/nested-method-calls-via-two-phase-borrowing/ (link)
[^120]:
example https://web.archive.org/web/20200416170122/https://smallcultfollowing.com/babysteps/blog/2017/03/01/nested-method-calls-via-two-phase-borrowing/ (link)
[^121]:
example https://smallcultfollowing.com/babysteps/blog/2017/07/11/non-lexical-lifetimes-draft-rfc-and-prototype-available/ (link)
[^122]:
example https://web.archive.org/web/20200416170125/https://smallcultfollowing.com/babysteps/blog/2017/07/11/non-lexical-lifetimes-draft-rfc-and-prototype-available/ (link)
[^123]:
example https://smallcultfollowing.com/babysteps/blog/2018/04/27/an-alias-based-formulation-of-the-borrow-checker/ (link)
[^124]:
example https://web.archive.org/web/20200416170128/https://smallcultfollowing.com/babysteps/blog/2018/04/27/an-alias-based-formulation-of-the-borrow-checker/ (link)
[^125]:
example https://smallcultfollowing.com/babysteps/blog/2018/06/15/mir-based-borrow-check-nll-status-update/ (link)
[^126]:
example https://web.archive.org/web/20200416170132/https://smallcultfollowing.com/babysteps/blog/2018/06/15/mir-based-borrow-check-nll-status-update/ (link)
[^127]:
example https://smallcultfollowing.com/babysteps/blog/2018/10/31/mir-based-borrowck-is-almost-here/ (link)
[^128]:
example https://web.archive.org/web/20200416170139/https://smallcultfollowing.com/babysteps/blog/2018/10/31/mir-based-borrowck-is-almost-here/ (link)
[^129]:
example https://smallcultfollowing.com/babysteps/blog/2018/11/01/after-nll-interprocedural-conflicts/ (link)
[^130]:
example https://web.archive.org/web/20200416170144/https://smallcultfollowing.com/babysteps/blog/2018/11/01/after-nll-interprocedural-conflicts/ (link)
[^131]:
example https://smallcultfollowing.com/babysteps/blog/2019/01/17/polonius-and-region-errors/ (link)
[^132]:
example https://web.archive.org/web/20200416170147/https://smallcultfollowing.com/babysteps/blog/2019/01/17/polonius-and-region-errors/ (link)
[^133]:
example https://smallcultfollowing.com/babysteps/blog/2019/01/21/hereditary-harrop-region-constraints/ (link)
[^134]:
example https://web.archive.org/web/20200416170150/https://smallcultfollowing.com/babysteps/blog/2019/01/21/hereditary-harrop-region-constraints/ (link)
[^135]:
example https://boats.gitlab.io/blog/post/shifgrethor-i/ (link)
[^136]:
example https://web.archive.org/web/20200416172628/https://boats.gitlab.io/blog/post/shifgrethor-i/ (link)
[^137]:
example https://boats.gitlab.io/blog/post/shifgrethor-ii/ (link)
[^138]:
example https://web.archive.org/web/20200416172630/https://boats.gitlab.io/blog/post/shifgrethor-ii/ (link)
[^139]:
example https://boats.gitlab.io/blog/post/shifgrethor-iii/ (link)
[^140]:
example https://web.archive.org/web/20200416172636/https://boats.gitlab.io/blog/post/shifgrethor-iii/ (link)
[^141]:
example https://boats.gitlab.io/blog/post/shifgrethor-iv/ (link)
[^142]:
example https://web.archive.org/web/20200416172639/https://boats.gitlab.io/blog/post/shifgrethor-iv/ (link)
[^143]:
example https://smallcultfollowing.com/babysteps/blog/2015/12/18/rayon-data-parallelism-in-rust/ (link)
[^144]:
example https://web.archive.org/web/20200423162646/https://smallcultfollowing.com/babysteps/blog/2015/12/18/rayon-data-parallelism-in-rust/ (link)
[^145]:
example https://smallcultfollowing.com/babysteps/blog/2016/02/19/parallel-iterators-part-1-foundations/ (link)
[^146]:
example https://web.archive.org/web/20200423162647/https://smallcultfollowing.com/babysteps/blog/2016/02/19/parallel-iterators-part-1-foundations/ (link)
[^147]:
example https://smallcultfollowing.com/babysteps/blog/2016/02/25/parallel-iterators-part-2-producers/ (link)
[^148]:
example https://web.archive.org/web/20200423162653/https://smallcultfollowing.com/babysteps/blog/2016/02/25/parallel-iterators-part-2-producers/ (link)
[^149]:
example https://smallcultfollowing.com/babysteps/blog/2016/11/14/parallel-iterators-part-3-consumers/ (link)
[^150]:
example https://web.archive.org/web/20200423162650/https://smallcultfollowing.com/babysteps/blog/2016/11/14/parallel-iterators-part-3-consumers/ (link)
[^151]:
example https://tmandry.gitlab.io/blog/posts/optimizing-await-1/ (link)
[^152]:
example https://web.archive.org/web/20200417142143/https://tmandry.gitlab.io/blog/posts/optimizing-await-1/ (link)
[^153]:
example https://tmandry.gitlab.io/blog/posts/optimizing-await-2/ (link)
[^154]:
example https://web.archive.org/web/20200417142149/https://tmandry.gitlab.io/blog/posts/optimizing-await-2/ (link)
[^155]:
example https://os.phil-opp.com/freestanding-rust-binary/ (link)
[^156]:
example https://web.archive.org/web/20200419114640/https://os.phil-opp.com/freestanding-rust-binary/ (link)
[^157]:
example https://os.phil-opp.com/minimal-rust-kernel/ (link)
[^158]:
example https://web.archive.org/web/20200419114644/https://os.phil-opp.com/minimal-rust-kernel/ (link)
[^159]:
example https://os.phil-opp.com/vga-text-mode/ (link)
[^160]:
example https://web.archive.org/web/20200419114648/https://os.phil-opp.com/vga-text-mode/ (link)
[^161]:
example https://os.phil-opp.com/testing/ (link)
[^162]:
example https://web.archive.org/web/20200419114651/https://os.phil-opp.com/testing/ (link)
[^163]:
example https://os.phil-opp.com/cpu-exceptions/ (link)
[^164]:
example https://web.archive.org/web/20200419114838/https://os.phil-opp.com/cpu-exceptions/ (link)
[^165]:
example https://os.phil-opp.com/double-fault-exceptions/ (link)
[^166]:
example https://web.archive.org/web/20200419114841/https://os.phil-opp.com/double-fault-exceptions/ (link)
[^167]:
example https://os.phil-opp.com/hardware-interrupts/ (link)
[^168]:
example https://web.archive.org/web/20200419114844/https://os.phil-opp.com/hardware-interrupts/ (link)
[^169]:
example https://os.phil-opp.com/paging-introduction/ (link)
[^170]:
example https://web.archive.org/web/20200419115000/https://os.phil-opp.com/paging-introduction/ (link)
[^171]:
example https://os.phil-opp.com/paging-implementation/ (link)
[^172]:
example https://web.archive.org/web/20200419115003/https://os.phil-opp.com/paging-implementation/ (link)
[^173]:
example https://os.phil-opp.com/heap-allocation/ (link)
[^174]:
example https://web.archive.org/web/20200419115006/https://os.phil-opp.com/heap-allocation/ (link)
[^175]:
example https://os.phil-opp.com/allocator-designs/ (link)
[^176]:
example https://web.archive.org/web/20200419115009/https://os.phil-opp.com/allocator-designs/ (link)
[^177]:
example https://os.phil-opp.com/async-await/ (link)
[^178]:
example https://web.archive.org/web/20200419115012/https://os.phil-opp.com/async-await/ (link)
[^179]:
example https://bodil.lol/parser-combinators/ (link)
[^180]:
example https://web.archive.org/web/20200423162949/https://bodil.lol/parser-combinators/ (link)
[^181]:
example https://manishearth.github.io/blog/2017/01/14/stop-ascribing-meaning-to-unicode-code-points/ (link)
[^182]:
example https://web.archive.org/web/20200430223156/https://manishearth.github.io/blog/2017/01/14/stop-ascribing-meaning-to-unicode-code-points/ (link)
[^183]:
example https://manishearth.github.io/blog/2017/01/15/breaking-our-latin-1-assumptions/ (link)
[^184]:
example https://web.archive.org/web//https://manishearth.github.io/blog/2017/01/15/breaking-our-latin-1-assumptions/ (link)
[^185]:
example https://manishearth.github.io/blog/2018/02/15/picking-apart-the-crashing-ios-string/ (link)
[^186]:
example https://web.archive.org/web/20200430223226/https://manishearth.github.io/blog/2018/02/15/picking-apart-the-crashing-ios-string/ (link)
- public document at doc.anagora.org/longform-computer-texts
- video call at meet.jit.si/longform-computer-texts
(none)
(none)
(none)
(none)