CourseHunter
  • Категории
    • Frontend logo Frontend
      • Angular logo Angular
      • HTML logo HTML
      • CSS logo CSS
      • JavaScript logo JavaScript
      • Vue logo Vue
      • jQuery logo jQuery
      • React logo React
      • AngularJS logo AngularJS
      • Backbone logo Backbone
      • TypeScript logo TypeScript
      • Ember logo Ember
      • Next.js logo Next.js
      • Elm logo Elm
      • Svelte logo Svelte
      • Single SPA logo Single SPA
      • Three.js logo Three.js
      • D3.js logo D3.js
      • RxJS logo RxJS
      • WebGL logo WebGL
      • barba.js logo barba.js
    • Backend logo Backend
      • PHP logo PHP
      • Python logo Python
      • Ruby on Rails logo Ruby on Rails
      • Yii logo Yii
      • Laravel logo Laravel
      • SQL logo SQL
      • Ruby logo Ruby
      • Symfony logo Symfony
      • Java logo Java
      • Scala logo Scala
      • Node.js logo Node.js
      • MongoDB logo MongoDB
      • Golang (Google Go) logo Golang (Google Go)
      • Slim logo Slim
      • Silex logo Silex
      • Firebase logo Firebase
      • C Sharp (C#) logo C Sharp (C#)
      • Deno logo Deno
      • Redis logo Redis
      • Django logo Django
      • NestJS logo NestJS
      • Spring logo Spring
      • Spring Boot logo Spring Boot
      • Spring Data logo Spring Data
      • Spring Cloud logo Spring Cloud
      • Spring Security logo Spring Security
      • Spring Integration logo Spring Integration
      • Spring HATEOAS logo Spring HATEOAS
      • Spring MVC logo Spring MVC
      • Elixir logo Elixir
      • Phoenix logo Phoenix
    • System programming logo System programming
      • Rust logo Rust
      • WebAssembly logo WebAssembly
      • C++ logo C++
    • Marketing logo Marketing
      • SEO logo SEO
    • Video and 3D logo Video and 3D
      • Blender logo Blender
      • Cinema 4D logo Cinema 4D
      • ZBrush logo ZBrush
    • Graphic logo Graphic
      • Figma logo Figma
      • Sketch logo Sketch
      • Photoshop logo Photoshop
      • After Effects logo After Effects
      • Illustrator  logo Illustrator
      • Adobe XD logo Adobe XD
      • Lightroom logo Lightroom
      • CorelDRAW logo CorelDRAW
    • DevOps logo DevOps
      • AWS logo AWS
      • Azure logo Azure
      • Docker logo Docker
      • Git logo Git
      • GitHub logo GitHub
      • Gitlab logo Gitlab
      • Google Cloud logo Google Cloud
      • Grafana logo Grafana
      • Kubernetes logo Kubernetes
      • Jenkins logo Jenkins
      • Terraform logo Terraform
      • Другое logo Другое
    • Tools logo Tools
      • GraphQL logo GraphQL
      • Flux logo Flux
      • Webpack logo Webpack
      • Ansible logo Ansible
      • Gulp logo Gulp
      • Grunt logo Grunt
      • Visual Studio Code logo Visual Studio Code
      • VIM logo VIM
      • OpenCV logo OpenCV
      • Salt logo Salt
      • SVN logo SVN
      • Atom logo Atom
      • Elasticsearch logo Elasticsearch
      • Сборки, готовые решения logo Сборки, готовые решения
      • Electron logo Electron
      • Chrome DevTools logo Chrome DevTools
      • Yarn logo Yarn
      • Babel logo Babel
      • Grep logo Grep
      • npm logo npm
      • Vite logo Vite
      • Gatsby logo Gatsby
      • PhpStorm logo PhpStorm
      • Webflow logo Webflow
      • Hibernate logo Hibernate
      • Socket.io logo Socket.io
      • Bash logo Bash
    • Разработка мобильных приложений logo Разработка мобильных приложений
      • React Native logo React Native
      • Ionic logo Ionic
      • Swift logo Swift
      • Progressive Web App (PWA) logo Progressive Web App (PWA)
      • Core Data logo Core Data
      • Xamarin logo Xamarin
      • NativeScript logo NativeScript
      • Dart и Flutter logo Dart и Flutter
    • Gamedev logo Gamedev
      • Unreal Engine logo Unreal Engine
      • Unity logo Unity
    • CMS logo CMS
      • Wordpress logo Wordpress
      • OpenCart logo OpenCart
      • Drupal logo Drupal
      • Joomla logo Joomla
      • 1C-Bitrix logo 1C-Bitrix
      • MODX logo MODX
      • Magento logo Magento
      • Shopify logo Shopify
    • Blockchain logo Blockchain
      • Криптовалюты logo Криптовалюты
      •  Decentralized Applications (dApps) (Web 3) logo Decentralized Applications (dApps) (Web 3)
    • Тестирование logo Тестирование
      • Postman logo Postman
      • Selenium logo Selenium
      • Appium logo Appium
      • Protractor logo Protractor
      • WebdriverIO logo WebdriverIO
      • Cypress logo Cypress
      • Playwright logo Playwright
    • Другое logo Другое
      • Linux logo Linux
      • WebRTC logo WebRTC
      • OpenGL Shading Language (GLSL) logo OpenGL Shading Language (GLSL)
    • Подготовка к собеседованию logo Подготовка к собеседованию
    • Обработка и анализ данных logo Обработка и анализ данных
    • Информационная безопасность logo Информационная безопасность
      • Этический взлом / Тестирование на проникновение logo Этический взлом / Тестирование на проникновение
    • Английский язык logo Английский язык
    • Конференции logo Конференции
  • Источники
  • Все курсы
    • Популярные
    • Бесплатные (100+ Курсов)
  • Разделы
  • Книги
    • Бесплатные
    • Популярные
  • Краудфандинг logo Краудфандинг
🇺🇸 English
🇷🇺 Русский
🇺🇦 Українська
Голубая
Фиолетовая
Cветлая
Терминал
Norton
Войти
Главная страница Категория golang (google go) Написание компилятора на Go

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

Writing A Compiler In Go

Thorsten Ball logo Thorsten Ball
Написание компилятора на Go logo Начать Сейчас
Категория
Golang (Google Go)
Дата добавления
03.02.2024
Язык
Английский

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

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


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

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

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

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

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

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

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

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

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

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

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

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

Мы также:

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

Авторы

Изображение источника Thorsten Ball

Thorsten Ball

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

Автор
Посмотреть
-1

Категории

Golang (Google Go) logo

Golang (Google Go)

Комментарии
User Avatar
Команда внимательно читает ваши комментарии и оперативно на них реагирует. Вы можете спокойно оставлять запросы на обновления или задавать любые вопросы о курсе здесь.

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

Изображение курса Компиляторы, интерпретаторы и формальные языки
Gustavo Pezzi logo Gustavo Pezzi
07.11.2024
Python Другое

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

Compilers, Interpreters and Formal Languages

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

28 ч 52 мин
Английский
Посмотреть
+22
Написание интерпретатора на Go logo

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

Thorsten Ball
English
View
Премиум

Ресурс видеоуроков программирования для front и back end разработчиков. Бери знания своего профиля у нас, ведь мы самые лучшие блеать. Серьезно.

Категории
Все категории JavaScript React.js Python Java Node.js Golang (Google Go) Другое TypeScript C Sharp (C#) Обработка и анализ данных
Источники
Все источники Andreas Kretz balun.courses Dometrain frontendmasters Jason Liu Konrad Kokosa Peter Yang udemy zerotomastery.io Яндекс.Практикум
Telegram CourseTrain Цена Контакты Распространенные вопросы Плейлисты Приватность Условия
Темы:
Язык: