Write chapter 5 review - FIN :)
parent
24c2df3dc6
commit
125fb89df6
44
README.md
44
README.md
|
@ -1,7 +1,5 @@
|
||||||
# SICP
|
# SICP
|
||||||
|
|
||||||
**This is currently (2021/06/11) work in progress.**
|
|
||||||
|
|
||||||
These are my solutions to the CS classic [Structure and Interpretation of
|
These are my solutions to the CS classic [Structure and Interpretation of
|
||||||
Computer Programs](https://mitpress.mit.edu/sites/default/files/sicp/index.html).
|
Computer Programs](https://mitpress.mit.edu/sites/default/files/sicp/index.html).
|
||||||
I have looked up the answer for some exercises on the
|
I have looked up the answer for some exercises on the
|
||||||
|
@ -243,6 +241,48 @@ programming concepts to Scheme.
|
||||||
|
|
||||||
# Chapter 5
|
# Chapter 5
|
||||||
|
|
||||||
|
Chapter 5 combines the previous chapter's concepts, ultimately implementing a
|
||||||
|
Scheme interpreter running on physical hardware.
|
||||||
|
|
||||||
|
The first section introduces the concept of register machines. Register machines
|
||||||
|
are an abstraction of physical machines that control the flow of data and can
|
||||||
|
execute computations. For example, the following diagram shows a machine that
|
||||||
|
computes factorials.
|
||||||
|
|
||||||
|
![Factorial Machine Diagram](./shared/draw-factorial-reg-machine.png)
|
||||||
|
|
||||||
|
Based on the diagrams, we learn about an assembly-like language that can
|
||||||
|
represent register-machines. For example, the following listing shows the same
|
||||||
|
machine as on the previous graph in assembly form.
|
||||||
|
|
||||||
|
```scheme
|
||||||
|
'(controller
|
||||||
|
(assign product (const 1))
|
||||||
|
(assign counter (const 1))
|
||||||
|
test-counter
|
||||||
|
(test (op >) (reg counter) (reg n))
|
||||||
|
(branch (label factorial-done))
|
||||||
|
(assign product (op *) (reg product) (reg counter))
|
||||||
|
(assign counter (op +) (reg counter) (const 1))
|
||||||
|
(goto (label test-counter))
|
||||||
|
```
|
||||||
|
|
||||||
|
In the following sections, we implement a simulator that can execute
|
||||||
|
register-machine programs and use it to run a Scheme interpreter written in the
|
||||||
|
register-machine language. We call this the Explicit-Control-Evaluator.
|
||||||
|
|
||||||
|
Finally, we implement a Scheme compiler that compiles into the register-machine
|
||||||
|
assembly language. Ultimately, we use the compiler to translate the metacircular
|
||||||
|
evaluator from chapter 4. We then use the register machine simulator to run the
|
||||||
|
evaluator. Making that work was indeed a fantastic moment. I cannot explain it
|
||||||
|
well, but seeing how everything comes together gave me a great sense of
|
||||||
|
accomplishment.
|
||||||
|
|
||||||
|
The last two exercises in the books are programming projects in their own right.
|
||||||
|
First, I implement a crude [Scheme interpreter in
|
||||||
|
Rust](https://git.felixm.de/felixm/schemers), and then I modified the compiler
|
||||||
|
to generate C code. I have implemented the required runtime support, and it
|
||||||
|
works, at least for simple programs like computing factorials.
|
||||||
|
|
||||||
|
|
||||||
# Resources
|
# Resources
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 259 KiB |
Loading…
Reference in New Issue