CourseHunter
  • Категории
  • Источники
  • Все курсы
  • Разделы
  • Книги
  • Краудфандинг logo
    Краудфандинг
English
Русский
Українська
Голубая
Фиолетовая
Cветлая
Терминал
Norton
Войти
Главная страницаКатегория golang (google go)Написание компилятора на Go

Написание компилятора на Go

Writing A Compiler In Go

Thorsten Ball logo
Thorsten Ball
★5 (всего оценок - 8)
Написание компилятора на Go
Начать Сейчас
Категория
Golang (Google Go)
Дата добавления
3 февр. 2024 г., 00:35
Язык
Английский

Это продолжение книги "Написание интерпретатора на Go". Мы продолжаем с того места, на котором остановились, и пишем компилятор и виртуальную машину для Monkey.

Запускаемый и протестированный код на переднем плане, созданный с нуля, шаг за шагом — как и раньше. Но на этот раз мы собираемся определить байт-код, скомпилировать Monkey и выполнить его в нашей собственной виртуальной машине. Это следующий шаг в эволюции Monkey.


"Написание компилятора на Go" является продолжением книги "Написание интерпретатора на Go". Оно начинается сразу после окончания первой, с полностью работающим и полностью протестированным интерпретатором Monkey в руках, соединяя обе книги бесшовно и готовя к созданию компилятора и виртуальной машины для Monkey.

В этой книге мы используем кодовую базу (включенную в книгу!) из первой части и расширяем её. Мы берем лексер, парсер, AST, REPL и систему объектов и используем их для создания новой, более быстрой реализации Monkey, рядом с интерпретатором, работающим с деревом выражений, который мы построили в первой книге.

Подход остается неизменным. В центре внимания находится работающий, протестированный код, мы строим все с нуля, делаем маленькие шаги, пишем тесты в первую очередь, не используем сторонние библиотеки и видим и понимаем, как все части сочетаются вместе.

Это продолжение как в прозе, так и в коде.

Нужно ли читать первую часть перед этой? Если вы готовы относиться к коду из первой книги как к черному ящику, то нет. Но в этих книгах речь идет не об этом; они о том, чтобы открыть черные ящики, заглянуть внутрь и осветить их. Лучше всего вы поймете, куда мы движемся в этой книге, если вы знаете, с чего мы начали.

Узнайте, как написать компилятор и виртуальную машину.

Нашей главной целью в этой книге является развитие Monkey. Мы меняем его архитектуру и превращаем его в компилятор байт-кода и виртуальную машину.

Мы возьмем лексер, парсер, AST и систему объектов, которые мы написали в первой книге, и используем их для создания нашего собственного компилятора и виртуальной машины Monkey... с нуля! Мы будем строить их параллельно, так что у нас всегда будет работающая система, которую мы можем постоянно развивать.

То, с чем мы в итоге оказываемся, не только гораздо ближе к программным языкам, которые мы используем каждый день, давая нам лучшее понимание того, как они работают, но и в 3 раза быстрее. И это без явной ориентации на производительность.

Вот что мы сделаем:

  • Мы определим собственные инструкции байт-кода, указывая их операнды и кодировку. По пути мы также построим мини-дизассемблер для них.
  • Мы напишем компилятор, который принимает AST Monkey и превращает его в байт-код, генерируя инструкции.
  • В то же время мы создадим стековую виртуальную машину, которая выполняет байт-код в своем основном цикле.

Мы многое узнаем о компьютерах, как они работают, что такое машинный код и операционные коды, что такое стек и как работать с указателями стека и базовыми указателями, что значит определить соглашение о вызовах и многое другое.

Мы также:

  • -создаем таблицу символов и пул констант,
  • выполняем арифметические операции со стеком,
  • генерируем инструкции перехода,
  • внедряем фреймы в нашу виртуальную машину для выполнения функций с локальными привязками и аргументами!
  • добавляем встроенные функции в виртуальную машину,
  • реализуем настоящие замыкания в виртуальной машине и узнаем, почему компиляция замыканий так сложна.
Посмотреть больше

Автор - Thorsten Ball

Thorsten Ball logo

Thorsten Ball

Привет, меня зовут Торстен Балл. Я программист, живущий в Германии. На протяжении всей моей профессиональной жизни в качестве разработчика программного обеспечения я работал с веб-технологиями и развертывал код на Ruby, JavaScript, Go и даже C в продакшн-системах.

GitHub
Автор

Другие материалы в этой категории

Написание интерпретатора на Go

Написание интерпретатора на Go

Компиляторы, интерпретаторы и формальные языки

Компиляторы, интерпретаторы и формальные языки

Написание компилятора

Написание компилятора

Комментарии
 logo

    Учись ради навыков, а не сертификатов. Лучшие видеокурсы от топ-авторов со всего мира: программирование, дизайн, AI, DevOps и многое другое. Без воды, без лозунгов — только код, практика и дружелюбное комьюнити разработчиков.

    Категории
    Все категории JavaScript React.js Python Java Golang (Google Go) Другое TypeScript React Native Подготовка к собеседованию Другое (QA)
    Источники
    Все источники Aurimas Griciūnas balun.courses frontendmasters Gregory John karpov.courses udemy zerotomastery.io Аня | авось прорвемся Влад Тен Олег Козырев
    CourseTrainЦенаКонтактыРаспространенные вопросыПлейлистыПриватностьУсловия
    Темы:
    Язык: