- Категории
- Источники
- Все курсы
- Разделы
- Книги
Это продолжение книги "Написание интерпретатора на Go". Мы продолжаем с того места, на котором остановились, и пишем компилятор и виртуальную машину для Monkey.
Запускаемый и протестированный код на переднем плане, созданный с нуля, шаг за шагом — как и раньше. Но на этот раз мы собираемся определить байт-код, скомпилировать Monkey и выполнить его в нашей собственной виртуальной машине. Это следующий шаг в эволюции Monkey.
"Написание компилятора на Go" является продолжением книги "Написание интерпретатора на Go". Оно начинается сразу после окончания первой, с полностью работающим и полностью протестированным интерпретатором Monkey в руках, соединяя обе книги бесшовно и готовя к созданию компилятора и виртуальной машины для Monkey.
В этой книге мы используем кодовую базу (включенную в книгу!) из первой части и расширяем её. Мы берем лексер, парсер, AST, REPL и систему объектов и используем их для создания новой, более быстрой реализации Monkey, рядом с интерпретатором, работающим с деревом выражений, который мы построили в первой книге.
Подход остается неизменным. В центре внимания находится работающий, протестированный код, мы строим все с нуля, делаем маленькие шаги, пишем тесты в первую очередь, не используем сторонние библиотеки и видим и понимаем, как все части сочетаются вместе.
Это продолжение как в прозе, так и в коде.
Нужно ли читать первую часть перед этой? Если вы готовы относиться к коду из первой книги как к черному ящику, то нет. Но в этих книгах речь идет не об этом; они о том, чтобы открыть черные ящики, заглянуть внутрь и осветить их. Лучше всего вы поймете, куда мы движемся в этой книге, если вы знаете, с чего мы начали.
Узнайте, как написать компилятор и виртуальную машину.
Нашей главной целью в этой книге является развитие Monkey. Мы меняем его архитектуру и превращаем его в компилятор байт-кода и виртуальную машину.
Мы возьмем лексер, парсер, AST и систему объектов, которые мы написали в первой книге, и используем их для создания нашего собственного компилятора и виртуальной машины Monkey... с нуля! Мы будем строить их параллельно, так что у нас всегда будет работающая система, которую мы можем постоянно развивать.
То, с чем мы в итоге оказываемся, не только гораздо ближе к программным языкам, которые мы используем каждый день, давая нам лучшее понимание того, как они работают, но и в 3 раза быстрее. И это без явной ориентации на производительность.
Вот что мы сделаем:
Мы многое узнаем о компьютерах, как они работают, что такое машинный код и операционные коды, что такое стек и как работать с указателями стека и базовыми указателями, что значит определить соглашение о вызовах и многое другое.
Мы также: