Memory leaks and dangling pointers are the main issues of the manual memory management. You delete a parent node in a linked list, forgetting to delete all its children first — and your memory is leaking. You delete an object chain in correct order — but suddenly your program crashes since you forgot about second owner of this resource, which now tries to dereference a null-pointer.
To avoid these issues, most of the modern high-level programming languages implement automatic memory management. You allocate objects manually, however don’t bother with their deallocation: a special program, garbage collector, knows how to automatically deallocate them correctly, and reclaim for future reuse.
In the Essentials of Garbage Collectors class we study all different techniques and algorithms related to the automatic memory management, which are used today on practice.
Who this class is for?
First of all, for compiler engineers.
In implementing your programming language, there is a very high chance you’ll need to implement a garbage collector. Even languages which initially were positioned as “memory-safe”, such as Rust, eventual implemented automatic reference counting (ARC) and other collectors.
To reiterate: in most of the modern high-level programming languages, a garbage collector module (or multiple GC modules, like in Java) is pretty much a requirement today.
What if I don’t implement programming languages every day?
If you are not a compiler engineer in your day-to-day work — then this class can still be interesting for you. Implementing a garbage collector or a memory manager in general, is a pretty advanced engineering task.
And it’s a simple trick: you take some complex project (such as a garbage collector, compiler, interpreter, etc), and implement it from scratch in a language you’re familiar with. And while building it, you learn all different data structures and algorithms. And then come back to “every-day programming”, improved as a better engineer, with the transferable generic knowledge of complex systems.
Do I need C or C++ for this project?
Most of the algorithms in the course are described in generic pseudo-code, so you can port them to any language.
What's specific in this class?
The main features of these lectures are:
- Concise and straight to the point. Each lecture is self-sufficient, concise, and describes information directly related to the topic, not distracting on unrelated materials or talks.
- Animated presentation combined with live-editing notes. This makes understanding of the topics easier, and shows how (and when at time) the object structures are connected. Static slides simply don’t work for a complex content.
As further reading and additional literature for this course the following books are recommended:
- The Garbage Collection Handbook: The Art of Automatic Memory Management by Antony Hosking, Eliot Moss, and Richard Jones
- The Compiler Design Handbook: Optimizations and Machine Code generation by Y.N. Srikant, and Priti Shankar
Dmitry Soshnikov is a Software engineer, and a lecturer on different computer science topics.
He is passioned about education, and focuses on high-quality educational content: concise and straight to the point animated lectures with live-editing notes.
You will learn:
- Compilers and interpreters: building a Programing language
- Garbage Collectors (Automatic memory management)
- Theory of programming languages
- Automata Theory: Building a RegExp machine
- Parsers theory: Implementing a Parser Generator