-
Notifications
You must be signed in to change notification settings - Fork 15
Elements of Computing Systems Chapter 11
We began the meeting by going over Kevin's pull requests to fix up issues with our VM translator (from Chapter 7) and assembler (from Chapter 6):
- Stop inlining all the things: reduce the amount of duplicated assembly we generate so that we don't overflow;
- Adjust assembler to allow compiling our VM output: add support for the mnemonics our VM translator generates and add strict checking if the generated program is too large.
This resulted in a victorious moment when we all got to play a thrilling game of Square Dance using Leo's hack-js
implementation. Once we were done with that, we moved onto Kevin's stellar work at completing the project from Chapter 10:
We discussed the first commit in particular detail which reverts our peek
-based approach (via a nifty Enumerator) to follow the book's contract more closely. This was a welcome change as it seemed strange to rely on peek
when the book makes no mention of such an API and was causing quite a few issues during implementation (where we had peek
ed but forgot to advance
).
With the above pull requests merged, we could now move onto Chapter 11's project which began with a new SymbolTable
implementation in order to augment our glorious XML output before finally moving onto generating VM code.
We had quite a bit of back and forth about whether we should ditch the XML altogether (particularly as there didn't seem to be a natural mapping between the XML output and the VM code we will eventually be generating). At first, we attempted to extract an XmlWriter
dependency that we could inject into the existing Parser
—eventually hoping to inject a new VMWriter
—but after some baffling errors from SimpleDelegator
, we decided to drop this in favour of a wholly new Parser
once we start to emit VM code. This way, we can keep our passing XML-based tests but not be held back by remaining compatible with Builder's API.
We ended up with part of the SymbolTable
implemented in a WIP commit. It is currently missing support for new subroutines but is being used to generate extra identifier information in the Parser
.
We had a brief detour looking into Ruby's regular expression character properties while investigating how GitHub diff XML documents in GitHub Markup. This also lead us to discover that Nokogiri takes a configuration block on initialize to customise how comparison is done.
Thanks to Leo and Geckoboard for hosting and thanks to Kevin's extracurricular work which meant we could move on from Chapter 10.
- Home
- Documentation
- Choosing a Topic
- Shows & Tells
- Miscellaneous
- Opt Art
- Reinforcement Learning: An Introduction
- 10 Technical Papers Every Programmer Should Read (At Least Twice)
- 7 More Languages in 7 Weeks
- Lua, Day 1: The Call to Adventure
- Lua, Day 2: Tables All the Way Down
- Lua, Day 3
- Factor, Day 1: Stack On, Stack Off
- Factor, Day 2: Painting the Fence
- Factor, Day 3: Balancing on a Boat
- Elm, Day 1: Handling the Basics
- Elm, Day 2: The Elm Architecture
- Elm, Day 3: The Elm Architecture
- Elixir, Day 1: Laying a Great Foundation
- Elixir, Day 2: Controlling Mutations
- Elixir, Day 3: Spawning and Respawning
- Julia, Day 1: Resistance Is Futile
- Julia, Day 2: Getting Assimilated
- Julia, Day 3: Become One With Julia
- Minikanren, Days 1-3
- Minikanren, Einstein's Puzzle
- Idris Days 1-2
- Types and Programming Languages
- Chapter 1: Introduction
- Chapter 2: Mathematical Preliminaries
- Chapter 3: Untyped Arithmetic Expressions
- Chapter 4: An ML Implementation of Arithmetic Expressions
- Chapter 5: The Untyped Lambda-Calculus
- Chapters 6 & 7: De Bruijn Indices and an ML Implementation of the Lambda-Calculus
- Chapter 8: Typed Arithmetic Expressions
- Chapter 9: The Simply-Typed Lambda Calculus
- Chapter 10: An ML Implementation of Simple Types
- Chapter 11: Simple Extensions
- Chapter 11 Redux: Simple Extensions
- Chapter 13: References
- Chapter 14: Exceptions
- Chapter 15: Subtyping – Part 1
- Chapter 15: Subtyping – Part 2
- Chapter 16: The Metatheory of Subtyping
- Chapter 16: Implementation
- Chapter 18: Case Study: Imperative Objects
- Chapter 19: Case Study: Featherweight Java
- The New Turing Omnibus
- Errata
- Chapter 11: Search Trees
- Chapter 8: Random Numbers
- Chapter 35: Sequential Sorting
- Chapter 58: Predicate Calculus
- Chapter 27: Perceptrons
- Chapter 9: Mathematical Research
- Chapter 16: Genetic Algorithms
- Chapter 37: Public Key Cryptography
- Chapter 6: Game Trees
- Chapter 5: Gödel's Theorem
- Chapter 34: Satisfiability (also featuring: Sentient)
- Chapter 44: Cellular Automata
- Chapter 47: Storing Images
- Chapter 12: Error-Correcting Codes
- Chapter 32: The Fast Fourier Transform
- Chapter 36: Neural Networks That Learn
- Chapter 41: NP-Completeness
- Chapter 55: Iteration and Recursion
- Chapter 19: Computer Vision
- Chapter 61: Searching Strings
- Chapter 66: Church's Thesis
- Chapter 52: Text Compression
- Chapter 22: Minimum spanning tree
- Chapter 64: Logic Programming
- Chapter 60: Computer Viruses
- Show & Tell
- Elements of Computing Systems
- Archived pages