Открыто

Building a Virtual Machine for Programming Language [Udemy] [Dmitry Soshnikov]

Тема в разделе "Курсы по программированию", создана пользователем Топикстартер, 2 дек 2021.

Цена: 4690р.
Взнос: 4690р.

Основной список: 1 участников

  1. 2 дек 2021
    #1
    Топикстартер
    Топикстартер ЧКЧлен клуба
    Snapshot_21-12-02_20-01-43.png
    Building a Virtual Machine for Programming Language
    Essentials of Low-level Interpretation
    Лидер продаж
    Рейтинг: 5,0 из 55,0 (3 оценок)
    Студентов: 32
    Авторы: Dmitry Soshnikov
    Последнее обновление: 11/2021
    Английский
    Английский [авто]
    Чему вы научитесь
    • Virtual Machines implementations
    • Stack-based vs. Register-based VMs
    • Bytecode interpreter
    • Compiler construction
    • Call stack and Stack frames
    • Low-level interpretation
    • Object-oriented programming
    • Functional programming
    • Closures implementation
    • Garbage Collection
    • Mark-Sweep GC
    • Understand how programming languages work under the hood
    • Bytecode optimization

    Материалы курса
    6 разделов • 29 лекций • Общая продолжительность 4 ч 26 мин
    Требования
    • Basic C++
    • Basic data structures (maps, lists, stack, trees)
    • "Building an Interpreter from scratch" class (if needed)


    Описание
    Course overview

    How programming languages work under the hood? What’s the difference between compiler and interpreter? What is a virtual machine, and JIT-compiler? And what about the difference between functional and imperative programming?

    There are so many questions when it comes to implementing a programming language!

    The problem with “compiler classes” in school is such classes are usually presented as some “hardcore rocket science” which is only for advanced engineers.

    Moreover, classic compiler books start from the least significant topic, such as Lexical analysis, going straight down to the theoretical aspects of formal grammars. And by the time of implementing the first Tokenizer module, students simply lose an interest to the topic, not having a chance to actually start implementing a programing language itself. And all this is spread to a whole semester of messing with tokenizers and BNF grammars, without understanding an actual semantics of programming languages.

    I believe we should be able to build and understand a full programming language semantics, end-to-end, in 4-6 hours — with a content going straight to the point, showed in live coding sessions as pair-programming and described in a comprehensible way.

    In the Building a Virtual Machine class we focus specifically on runtime semantics, and build a stack-based VM for a programming language very similar to JavaScript or Python. Working closely with the bytecode level you will understand how lower-level interpretation works in production VMs today.

    Implementing a programing language would also make your practical level in other programming languages more professional.


    Prerequisites

    There are two prerequisites for this class.

    The Building a Virtual Machine course is a natural extension for the previous class — Building an Interpreter from scratch (aka Essentials of Interpretation), where we build also a full programming language, but at a higher, AST-level. Unless you already have understanding of how programming languages work at this level, i.e. what eval, a closure, a scope chain, environments, and other constructs are — you have to take the interpreters class as a prerequisite.

    Also, going to lower (bytecode) level where production VMs live, we need to have basic C++ experience. This class however is not about C++, so we use just very basic (and transferrable) to other languages constructs.

    Watch the introduction video for the details.

    Who this class is for?

    This class is for any curious engineer, who would like to gain skills of building complex systems (and building a programming language is an advanced engineering task!), and obtain a transferable knowledge for building such systems.

    If you are interested specifically in compilers, bytecode interpreters, virtual machines, and source code transformation, then this class is also for you.


    What is used for implementation?

    Since lower-level VMs are about performance, they are usually implemented in a low-level language such as C or C++. This is exactly what we use as well, however mainly basic features from C++, not distracting to C++ specifics. The code should be easily convertible and portable to any other language, e.g. to Rust or even higher-level languages such as JavaScript — leveraging typed arrays to mimic memory concept. Using C++ also makes it easier implementing further JIT-compiler.

    Note: we want our students to actually follow, understand and implement every detail of the VM themselves, instead of just copy-pasting from final solution. Even though the full source code for the language is presented in the video lectures, the code repository for the project contains /* Implement here */ assignments, which students have to solve.


    What’s specific in this class?

    The main features of these lectures are:

    • Concise and straight to the point. Each lecture is self-sufficient, concise, and describes information directly related to the topic, not distracting on unrelated materials or talks.

    • Animated presentation combined with live-editing notes. This makes understanding of the topics easier, and shows how the object structures are connected. Static slides simply don’t work for a complex content.

    • Live coding session end-to-end with assignments. The full source code, starting from scratch, and up to the very end is presented in the video lectures

    What is in the course?

    The course is divided into five parts, in total of 29 lectures, and many sub-topics in each lecture. Below is the table of contents and curriculum.

    PART 1: VM BASIC OPERATIONS

    In this part we describe compilation and interpretation pipeline, starting building our language. Topics of Stack and Register VMs, heap-allocated objects and compilation of the bytecode are discussed.

    PART 2: CONTROL FLOW AND VARIABLES

    In this part we implement control flow structures such as if expressions and while loops, talk about Global object and global variables, nested blocks and local variables, and also implement a disassembler.

    PART 3.1: FUNCTIONS AND CALL STACK

    In this part we start talking and implementing function abstraction and function calls. We describe concept of the Call stack, native and user-defined functions, and IILEs (Immediately-invoked lambda expressions).

    PART 3.2: CLOSURES IMPLEMENTATION

    In this part we focus on closures implementation, talking about scope and escape analysis, capturing free variables, and adding runtime support for closures.

    PART 4: GARBAGE COLLECTION

    This part is devoted to the automatic memory management known as Garbage collection. We discuss a tracing heap and implement Mark-Sweep garbage collector.

    PART 5: OBJECT-ORIENTED PROGRAMMING

    In the final part we add support for Object-oriented programming, implementing classes and instances. In addition we build the final VM executable.

    Для кого этот курс:
    • Any curious engineer
    • Programming language implementors
    Создание виртуальной машины для языка программирования
    Основы низкоуровневого устного перевода
    Лидер продаж
    Рейтинг: 5,0 из 55,0 (3 оценок)
    Студентов: 32
    Авторы: Dmitry Soshnikov
    Последнее обновление: 11/2021
    Английский
    Английский [авто]


    Чему вы научитесь
    • Реализации виртуальных машин
    • Виртуальные машины на основе стека и регистры
    • Интерпретатор байт-кода
    • Конструкция компилятора
    • Стек вызовов и кадры стека
    • Интерпретация низкого уровня
    • Объектно-ориентированное программирование
    • Функциональное программирование
    • Реализация закрытий
    • Вывоз мусора
    • Mark-Sweep GC
    • Понять, как языки программирования работают под капотом
    • Оптимизация байт-кода

    Материалы курса
    6 разделов • 29 лекций • Общая продолжительность 4 ч 26 мин
    Требования
    • Базовый C ++
    • Базовые структуры данных (карты, списки, стек, деревья)
    • Курс «Создание переводчика с нуля» (при необходимости)


    Описание
    Беглый взгляд на курс

    Как языки программирования работают под капотом? В чем разница между компилятором и интерпретатором ? Что такое виртуальная машина и JIT-компилятор ? А как насчет разницы между функциональным и императивным программированием?

    Когда дело доходит до реализации языка программирования, возникает так много вопросов!

    Проблема с «классами компиляторов» в школе в том, что такие классы обычно преподносятся как некое «хардкорное ракетостроение», предназначенное только для продвинутых инженеров.

    Более того, классические книги по компиляторам начинаются с наименее важной темы, такой как лексический анализ, и переходят прямо к теоретическим аспектам формальной грамматики. И к моменту внедрения первого модуля Tokenizer студенты просто теряют интерес к теме, не имея возможности фактически начать реализацию самого языка программирования. И все это распространяется на целый семестр возни с токенизаторами и грамматиками BNF без понимания реальной семантики языков программирования.

    Я считаю, что мы должны быть в состоянии построить и понять полную семантику языка программирования, от начала до конца , за 4-6 часов - с контентом, переходящим прямо к сути, показанным на сеансах программирования в реальном времени как парное программирование и описанным в приемлемый способ.

    В классе « Создание виртуальной машины » мы уделяем особое внимание семантике времени выполнения и создаем виртуальную машину на основе стека для языка программирования, очень похожего на JavaScript или Python. Тесно работая с уровнем байт-кода, вы поймете, как интерпретация нижнего уровня работает сегодня в производственных виртуальных машинах.

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


    Предпосылки

    Для этого класса есть две предпосылки .

    Курс « Создание виртуальной машины» является естественным продолжением предыдущего курса « Создание интерпретатора с нуля» (также известного как « Основы интерпретации» ), где мы также создаем полноценный язык программирования, но на более высоком уровне, AST . Если вы еще не понимаете, как языки программирования работают на этом уровне, то есть что такое eval, замыкание , цепочка областей видимости , среды и другие конструкции - вы должны принять класс интерпретаторов в качестве предварительного условия.

    Кроме того, для перехода на более низкий (байт-код) уровень, на котором находятся производственные виртуальные машины, нам необходимо иметь базовый опыт работы с C ++. Однако этот класс не связан с C ++, поэтому мы используем только очень простые (и переносимые) конструкции на другие языки.

    Подробности смотрите во вводном видео.

    Для кого предназначен этот урок?

    Этот курс предназначен для любого любознательного инженера , который хотел бы получить навыки построения сложных систем (а создание языка программирования - сложная инженерная задача!) И получить передаваемые знания для построения таких систем.

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


    Что используется для реализации?

    Поскольку виртуальные машины нижнего уровня связаны с производительностью, они обычно реализуются на языке низкого уровня, таком как C или C ++. Это как раз то, что мы используем, но в основном базовые возможности C ++, не отвлекаясь на особенности C ++. Код должен быть легко конвертируемым и переносимым на любой другой язык, например, на Rust или даже на языки более высокого уровня, такие как JavaScript - с использованием типизированных массивов для имитации концепции памяти. Использование C ++ также упрощает реализацию дальнейшего JIT-компилятора.

    Примечание: мы хотим, чтобы наши студенты действительно отслеживали, понимали и реализовывали каждую деталь виртуальной машины, а не просто копировали из окончательного решения. Несмотря на то, что полный исходный код языка представлен в видеолекциях, репозиторий кода проекта содержит / * Реализуйте здесь * / задания, которые студенты должны решить.


    Что особенного в этом классе?

    Основными особенностями этих лекций являются:

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

    • Анимированная презентация в сочетании с заметками в режиме реального времени . Это упрощает понимание тем и показывает, как связаны структуры объектов. Статические слайды просто не подходят для сложного контента.

    • Сквозная сессия кодирования в реальном времени с заданиями. Полный исходный код, начиная с нуля и до самого конца, представлен в видеолекциях.

    Что в курсе?

    Курс разделен на пять частей , в общей сложности 29 лекций и множество подтем в каждой лекции. Ниже приводится содержание и учебный план .

    ЧАСТЬ 1: ОСНОВНЫЕ ОПЕРАЦИИ VM

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

    ЧАСТЬ 2: КОНТРОЛЬНЫЙ ПОТОК И ПЕРЕМЕННЫЕ

    В этой части мы реализуем структуры потока управления, такие как выражения if и циклы while, говорим о глобальных объектах и глобальных переменных, вложенных блоках и локальных переменных, а также реализуем дизассемблер.

    ЧАСТЬ 3.1: ФУНКЦИИ И СТЕК ВЫЗОВОВ

    В этой части мы начинаем говорить и реализовывать абстракцию функций и вызовы функций. Мы описываем концепцию стека вызовов, собственных и определяемых пользователем функций и IILE (мгновенно вызываемые лямбда-выражения).

    ЧАСТЬ 3.2: РЕАЛИЗАЦИЯ ЗАКРЫТИЯ

    В этой части мы сосредоточимся на реализации замыканий, поговорим об анализе области действия и escape-анализе, захвате свободных переменных и добавлении поддержки замыканий во время выполнения.

    ЧАСТЬ 4: СБОР МУСОРА

    Эта часть посвящена автоматическому управлению памятью, известному как сборка мусора. Мы обсуждаем кучу трассировки и реализуем сборщик мусора Mark-Sweep.

    ЧАСТЬ 5: ОБЪЕКТИВНОЕ ПРОГРАММИРОВАНИЕ

    В заключительной части мы добавляем поддержку объектно-ориентированного программирования, реализуя классы и экземпляры. Кроме того, мы создаем окончательный исполняемый файл виртуальной машины.

    Для кого этот курс:
    • Любопытный инженер
    • Разработчики языков программирования
    Скрытая ссылка
     
  2. Последние события

    1. JeBern
      JeBern участвует.
      6 дек 2021
    2. skladchik.com
      Нужен организатор складчины.
      4 дек 2021
    3. skladchik.com
      Назначен организатор.
      2 дек 2021

    Последние важные события

    1. skladchik.com
      Нужен организатор складчины.
      4 дек 2021
    2. skladchik.com
      Назначен организатор.
      2 дек 2021