
udemy
Udemy - одна из самых больших площадок в мире по доставке обучающего контента от разных авторов всего мира. Присутсвуют курсы практически на любую тему.
Building a Virtual Machine for Programming Language
Как языки программирования работают под капотом? В чем разница между компилятором и интерпретатором? Что такое виртуальная машина и JIT-компилятор? А как насчет разницы между функциональным и императивным программированием? Когда дело доходит до реализации языка программирования, возникает так много вопросов! Проблема с «классами компиляторов» в школе заключается в том, что такие классы обычно представляются как некая «ракетостроение», предназначенная только для продвинутых инженеров.
Более того, классические книги по компиляторам начинаются с наименее значимой темы, такой как лексический анализ, и переходят непосредственно к теоретическим аспектам формальных грамматик. А к моменту внедрения первого модуля Tokenizer студенты просто теряют интерес к теме, не имея возможности реально приступить к реализации самого языка программирования. И все это размазано на целый семестр возни с токенизаторами и БНФ-грамматиками, без понимания реальной семантики языков программирования.
Я считаю, что мы должны быть в состоянии построить и понять полную семантику языка программирования, от начала до конца, за 4-6 часов — с содержанием, идущим прямо к делу, показанным на сеансах живого кодирования как парное программирование и описанным в понятный способ.
В курсе мы уделяем особое внимание семантике времени выполнения и создаем виртуальную машину на основе стека для языка программирования, очень похожего на JavaScript или Python. Работая в тесном контакте с уровнем байт-кода, вы поймете, как интерпретация нижнего уровня работает сегодня в производственных виртуальных машинах.
Внедрение языка программирования также повысит ваш практический уровень владения другими языками программирования.
Есть два обязательных условия для этого курса
Курс «Создание виртуальной машины» является естественным продолжением предыдущего курса «Создание интерпретатора с нуля» (он же «Основы интерпретации»), где мы также создаем полноценный язык программирования, но на более высоком уровне AST. Если у вас еще нет понимания того, как языки программирования работают на этом уровне, то есть что такое eval, замыкание, цепочка областей видимости, среды и другие конструкции — вы должны взять курс интерпретаторов в качестве предварительного условия.
Кроме того, переходя на более низкий уровень (байт-код), на котором живут производственные виртуальные машины, нам необходимо иметь базовый опыт работы с C++. Однако этот класс не посвящен C++, поэтому мы используем только очень простые (и переносимые) конструкции на другие языки.
Для кого этот класс?
Этот класс предназначен для любого любознательного инженера, который хотел бы получить навыки построения сложных систем (а создание языка программирования — это продвинутая инженерная задача!), и получить применимые знания для построения таких систем.
Если вас конкретно интересуют компиляторы, интерпретаторы байт-кода, виртуальные машины и преобразование исходного кода, то этот курс также для вас.
Что используется для реализации?
Поскольку виртуальные машины более низкого уровня связаны с производительностью, они обычно реализуются на языке низкого уровня, таком как C или C++. Это именно то, что мы тоже используем, но в основном базовые возможности из C++, не отвлекаясь на специфику C++. Код должен быть легко конвертируемым и переносимым на любой другой язык, например на Rust или даже на языки более высокого уровня, такие как JavaScript, — используя типизированные массивы для имитации концепции памяти. Использование C++ также упрощает дальнейшую реализацию JIT-компилятора.
Примечание: мы хотим, чтобы наши студенты действительно следовали, понимали и реализовывали каждую деталь виртуальной машины, а не просто копировали и вставляли окончательное решение. Несмотря на то, что в видеолекциях представлен полный исходный код языка, репозиторий кода проекта содержит /* Реализовать здесь */ задания, которые предстоит решить студентам.
Основные особенности этих лекций:
Кратко и прямо по делу. Каждая лекция самодостаточна, лаконична и описывает информацию, непосредственно относящуюся к теме, не отвлекаясь на посторонние материалы или доклады.
Анимированная презентация в сочетании с редактируемыми заметками. Это облегчает понимание тем и показывает, как связаны структуры объектов. Статические слайды просто не работают для сложного контента.
Сессия кодирования в реальном времени с заданиями. Полный исходный код, начиная с нуля, и до самого конца представлен в видео-лекциях.
Udemy - одна из самых больших площадок в мире по доставке обучающего контента от разных авторов всего мира. Присутсвуют курсы практически на любую тему.
Дмитрий Сошников - инженер-программист, читает лекции по различным темам информатики. Он увлечен образованием и уделяет особое внимание высококачественному образовательному контенту: кратким и понятным анимированным лекциям с заметками в реальном времени.
Утечки памяти и висячие указатели являются основными проблемами ручного управления памятью. Вы удаляете родительский узел в связанном списке, забывая сначала удалить все его дочерние узлы - и ваша память просачивается. Вы удаляете цепочку объектов в правильном порядке - но вдруг ваша программа падает, так как вы забыли о втором владельце этого ресурса, который теперь пытается разыменовать нулевой указатель.
Семантика языков программирования. Как языки программирования работают под капотом? В чем разница между компилятором и интерпретатором? Что такое виртуальная машина и JIT-компилятор? А как насчет разницы между функциональным и императивным программированием?
Парсинг или синтаксический анализ - один из первых этапов проектирования и реализации компилятора. Хорошо продуманный синтаксис вашего языка программирования - большая мотивация, по которой пользователи предпочтут и выберут именно ваш язык.
Машины состояний - фундаментальное понятие, используемое сегодня во многих практических приложениях, начиная от программирования пользовательского интерфейса, такого как React, автоматизированных систем ответов, лексического анализа в парсерах и теории формальных языков, например, машина регулярных выражений, и заканчивая жизненными случаями, такими как обычные светофоры, торговые автоматы и другие.Машины состояний основаны на более крупной теоре
Как работают языки программирования под капотом? В чем разница между компилятором и интерпретатором? Что такое виртуальная машина и JIT-компилятор? А в чем разница между функциональным и императивным программированием?Есть много вопросов, когда речь идет о реализации языка программирования!Проблема с "курсами по компиляторам" в школе заключается в том, что такие курсы обычно представлены как "тяжелая ракетная наука", которая п
Automata Theory: inside a RegExp machine?
The is the only missing course.