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
Войти
Используй промокод SUMMERUP - экономь на горячем, трать на холодное! 🍧 🍸 🍋 🍉 🍹
Главная страница Категория golang (google go) Написание компилятора на Go

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

Writing A Compiler In Go

Thorsten Ball logo Thorsten Ball
Написание компилятора на Go logo Начать Сейчас
Категория
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

Thorsten Ball

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

Автор
Посмотреть
Категории
Golang (Google Go) logo

Golang (Google Go)

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

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

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

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

Compilers, Interpreters and Formal Languages

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

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

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

Thorsten Ball
English
View
Премиум

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

Категории
Все категории JavaScript React.js Python Java Golang (Google Go) Другое TypeScript Next.js C Sharp (C#) Подготовка к собеседованию
Источники
Все источники Abhinav Kimothi balun.courses Dometrain frontendmasters Matt Pocock Michael Riddering Sebastian Raschka udemy zerotomastery.io Андрей Кобец
Telegram CourseTrain Цена Контакты Распространенные вопросы Плейлисты Приватность Условия
Темы:
Язык: