mark-sweep
Crafting Interpreters
mark-sweep | Crafting Interpreters | |
---|---|---|
11 | 45 | |
702 | 8,133 | |
- | - | |
10.0 | 0.0 | |
almost 4 years ago | 27 days ago | |
C | HTML | |
GNU General Public License v3.0 or later | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
mark-sweep
-
Let's Write a Malloc
Never forget:
https://journal.stuffwithstuff.com/2013/12/08/babys-first-ga...
> Let me stress here that while this collector is simple, it isn’t a toy.
> There are a ton of optimizations you can build on top of this—in GCs and programming languages, optimization is 90% of the effort—but the core code here is a legitimate real GC.
> It’s very similar to the collectors that were in Ruby and Lua until recently.
> You can ship production code that uses something exactly like this.
> Now go build something awesome!
-
loxcraft: a compiler, language server, and online playground for the Lox programming language
Bob Nystrom also has a blog, and his articles are really well written (see his post on Pratt parsers / garbage collectors). I'd also recommend going through the source code for Wren, it shares a lot of code with Lox. Despite the deceptive simplicity of the implementation, it (like Lox) is incredibly fast - it's a great way to learn how to build production grade compilers in general.
-
The Garbage Collection Handbook, 2nd Edition
Bob Nystrom (of Game Programming Patterns, Crafting Interpreters, and dartfmt fame) also wrote a tutorial[1], of a precise as opposed to a conservative garbage collector.
Regarding register scanning, Andreas Kling has made (or at least quoted) an amusing observation[2] that your C runtime already has a primitive to dump all callee-save registers onto the stack: setjmp(). So all you have to do to scan registers is to put a jmp_buf onto the stack, setjmp() to it, then scan the stack normally starting from its address.
[1] https://journal.stuffwithstuff.com/2013/12/08/babys-first-ga...
[2] https://youtu.be/IzB6iTeo8kk
-
Ask HN: Do you recall any book or course that made a topic finally click?
- http://journal.stuffwithstuff.com/2013/12/08/babys-first-gar...
-
Garbage Collection with LLVM
Might not be that hard: https://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/
- Baby’s First Garbage Collector (2013)
-
Reference Count, Don't Garbage Collect
To better understand garbage collection, nothing better than implementation. This article is such a joy to read:
https://journal.stuffwithstuff.com/2013/12/08/babys-first-ga...
Crafting Interpreters
- Crafting Interpreters
-
The Top 10 GitHub Repositories Making Waves 🌊📊
Build an Interpreter (Chapter 14 on is written in C)
-
Writing a Debugger from Scratch: Breakpoints
I’m guessing you’ll have to work with the scopes in the resolver:
https://github.com/munificent/craftinginterpreters/blob/mast...
-
loxcraft: a compiler, language server, and online playground for the Lox programming language
Better open an issue/request wiki edit at https://github.com/munificent/craftinginterpreters/wiki/Lox-implementations
- Gigachad Ken Thomson.
-
Show HN: Yaksha Programming Language
I'm late to the party, but I want to say thank you for sharing this. It's inspiring to look at how much you've built and (hopefully) enjoyed the process of building! I'm loving everything -- your site, your language design, your docs, your builtin libraries, your dev tools. Beyond impressive. People like you are the ones who make HN one of my best places on the internet.
For context on where I'm coming from, about two weeks ago I picked up Crafting Interpreters [1] for fun. I'm finding your clear-yet-concise Compiler internals [2] to be particularly compelling reading, and jumping back and forth between those "how this all works" docs and the live example of this language you actually built do a WASM-compiled tree-blowing-in-the-wind animation is just... just wow. So freaking cool!
I also enjoyed reading the comment thread that inspired you to start on Yaksha and seeing how this project has a wholesome start as inspiration-by-programming-hero. I hope you recognize that a few years later you've now ascended from inspiree to inspirer. I also hope you're still having tons of fun building out Yaksha!
[1] https://www.craftinginterpreters.com/
[2] https://yakshalang.github.io/documentation.html#compiler-int...
- Keeping track of returned and break-ed values between code blocks
-
How do you start your own programming language?
There are books which will talk you through the process. Crafting Interpreters is highly spoken of; I used Writing an Interpreter in Go, because I like Go. Then there's Compilers: Principles, Techniques, and Tools (the "Dragon Book"). This is considered heavy, but a classic, it's been around since '86.
-
Designing a new language
I cannot recommend Crafting Interpreters by Robert Nystrom enough, it covers a lot of the stuff you need to know, completely for free.
-
A roadmap to design programming languages
Crafting Interpreters is a fun primer on language design. It has a complete roadmap to build a fairly simple language, twice. There are some topics it won't touch on, like static type systems, but it provides a great introduction so that you can start tinkering and learn by doing.
What are some alternatives?
c-examples - Example C code
git-internals-pdf - PDF on Git Internals
zig.vim - Vim configuration for Zig
You-Dont-Know-JS - A book series on JavaScript. @YDKJS on twitter.
mmtk-core - Memory Management ToolKit
tinyrenderer - A brief computer graphics / rendering course
git-from-the-bottom-up - An introduction to the architecture and design of the Git content manager
paip-lisp - Lisp code for the textbook "Paradigms of Artificial Intelligence Programming"
ixy-languages - A high-speed network driver written in C, Rust, C++, Go, C#, Java, OCaml, Haskell, Swift, Javascript, and Python
CppCoreGuidelines - The C++ Core Guidelines are a set of tried-and-true guidelines, rules, and best practices about coding in C++
rust-gc - Simple tracing (mark and sweep) garbage collector for Rust
30-days-of-elixir - A walk through the Elixir language in 30 exercises.