О компиляторах и интерпретаторах


Если ты всегда мечтал написать свой язык программирования — добро пожаловать. Здесь ты наверняка найдёшь для себя что-нибудь интересное.

GitHub-юзер yawnt собрал чудесную подборку ссылок для любителей драконов, языков и прочих вкусных внутренностей. А знающие камрады в комментариях наверняка поделятся с тобой и другими яствами.

Пишет yawnt следующее:

С каждым днём мне всё интереснее тема компиляторов, интерпретаторов и дизайна языков программирования в целом. И я решил поделиться с народом ссылками на собранные мной материалы (большую часть мне самому ещё предстоит прочитать :<). Надеюсь, кому-нибудь они окажутся полезными.

Я не включил (и не собираюсь) в список ссылки на официальную документацию, т. к. считаю очевидным, что первым делом следует смотреть именно туда ;P.

Всё, конечно же, на английском. Делимся ссылками на русскоязычные материалы (и на существующие переводы перечисленных трудов) в комментариях, господа! Тема безумно увлекательная.

Ссылки


LLVM


Виртуальные машины


Компиляторы


Интерпретаторы


Сборщики мусора


Книги


Компиляторы


Интерпретаторы


Сборщики мусора


Всякий разный код



Оставайтесь на связи.

Оригинальный пост выложен на github, предлагайте автору ссылки, он добавит их в пост.

Уверен, вы знаете ещё миллиард интереснейших источников информации по заданной теме (например, хороший курс есть на Coursera). Делитесь знаниями!
Поделиться публикацией

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

    +24
    Не удержусь от саморекламы: habrahabr.ru/post/99162/ и последовавшая серия из 10 статей.
    Воспроизведён классический университетский курс (построенный больше ради кругозора, чем ради практической пользы): lex, bison, высокоуровневая оптимизация, генерация p-кода с бэкпэтчингом и его интерпретация, назначение регистров и генерация машинного кода.
        +5
        PEG парсер для языка Nemerle. На сегодняшний день, вероятно наболее простое из относительно стабильных решений для парсинга. Вот, к примеру, парсер C#.
          +7
          Возможно, немного не в тему, но все же. Обнаружил такой вот бесплатный онлайн курс www.cppgm.org. В течении курса надо будет разработать свой С++11 компилятор (с поддержкой STL, конечно) и тулчейн. Я думаю, что будет весьма интересно. Сам, к сожалению, в этот раз вряд ли возьмусь его проходить. Но было бы интересно услышать отзывы, если кто-то решится.
            0
            там, кстате, первое задание есть уже. Курс не для слабых: в двух словах задание — прочитать главу спецификации и имплементировать ее так и так. Весело )
              0
              Известно сколько времени продлится курс? Задания нужно раз в неделю сдавать?
                +1
                Кажется, год — не реальное время для создания С++11 компилятора, рантайма и стандартной библиотеки к нему
                  +1
                  Посмотрим. Время — приблизительно год-полтора. Спецификации есть, оптимизация не проводится, тесты дадут плюс некоторый «skeleton code» дадут. Стопроцентного соблюдения стандарта C++11 никто не потребует, нужно чтобы компилятор компилировал себя и проходил предоставленные тесты. Может что и получится.
                  Меньяков в мире полно, думаю, вероятность того, что через пару лет появятся 1 или несколько «грандмастеров C++» высока.
                –1
                я только не нашел на сайте, до какого срока надо это задание сделать.
                +2
                это, наверное что-то жёсткое будет… очень хотелось бы поучаствовать, но думаю маленький ещё…
                How long does the course take?
                This is the first time the course has been run in this format, and we are setting the deadlines dynamically to fit the maximum workload, so it is difficult to say, but for planning purposes we estimate approximately 12-18 months.


                Isn't this a huge undertaking, usually done by an entire team of programmers?
                The short answer is yes. This is a «Grandmaster» level programming course for world-class senior software engineers. It will be very difficult and mind-bending work.
                  0
                  С ума сойти. Хочу такое для питонистов. Или выучить по ходу C++?..
                  0
                  Очень мутные ребята… Никакой информации о том, что за контора, под чьей крышей, чем занимается, и какие цели преследуют, нет. Курс ведь довольно тяжеловесный…

                  Да и цель курса… Полный С++11 компилятор без внешних зависимостей за полтора года по 10 часов в неделю (как они пишут в faq) в одного разработчика?! Таким товарищам никакие сертификаты не нужны…

                  Смахивает либо на оригинальный способ поиска талантливых программистов на С++, либо на грандиозный развод. Если из 10 тысяч programmers enrolled (примечательная оговорка, в образовательном проекта сказали бы student), хотя бы 1% участников доведет дело до конца, то они получат практически нахаляву сотню реализаций стандарта С++11, с затратами только на сопровождение сайта.

                  Ниже есть совершенно замечательная ссылка на историю реализации компилятора C++ отечественными разработчиками. Там все неплохо описано…
                    0
                    Вряд ли разводка: кому нужны сотня разных любительских реализаций одного и того же ТЗ, при наличии бесплатных аналогов?

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

                    «Таким товарищам никакие сертификаты не нужны» — вовсе нет. Одно дело, когда товарищ может написать компилятор за год в одиночку, другое дело, когда товарищ написал компилятор за год в одиночку. Какие-нибудь Intel и ARM таких товарищей с руками оторвут уж точно.
                      0
                      Вы можете точно определить где проходит граница между любительскими и нелюбительскими реализациями? Из сотни реализаций будет что выбрать…

                      10 часов в неделю течение даже двух лет, мягко выражаясь, это крайне мало для реализации self-hosted компилятора С++11 с stdlib, STL, toolchain и без внешних зависимостей… Не говоря уже о том, что 10 часов в неделю минимум, это 2 часа в день с учётом 5 рабочих дней. И это течение 1,5 лет? 0_о

                      В общем явный прикол. Даже интересно стало. Заенроллился на свой спамовый ящик. Посмотрим, что будет…

                      Ради интереса… Оцените трудозатраты на написание, как они называют, разминочного assignment'а и сравним…
                      0
                      Подскажите пожалуйста ссылку на «отечественных разработчиков». Читал как то давно, понравилось А теперь что-то не могу найти ни в интернете, ни в комментариях.
                        +1
                        Редкая профессия — мне казалось ссылка была тут…
                          0
                          Спасибо большое, хоть я и нашел уже этот текст :) Но у вас оформление лучше
                    +5
                    по ссылкам не гуляй, комментарий оставляй :)
                    antlr
                    мощнейший и имхо самый понятный инструмент для DSL
                      +2
                      Часто проще всего сделать DSL на Groovy, без возни с парсингом:
                      http://docs.codehaus.org/display/GROOVY/Writing+Domain-Specific+Languages
                      +2
                      в копилку zerovm.org/ — Zero VM
                        +2
                        На Java очень просто реализовать парсер, воспользовавшись JavaCC.
                          0
                          Странно, что в списке книг нет «книги дракона»
                            +2
                            Видимо, автор посчитал эту книгу «документацией, в которую необходимо смотреть в первую очередь» :)

                              +1
                              Да ну. Эта книга о парсерах, а не о компиляторах. О том, как писать парсеры есть книги и получше (даже первое издание этих же «Компиляторов»). А парсер написать — это где-то 1/32 всего необходимого объёма работ. Основные проблемы начинаются в семантике и прагматике. В книге c драконом почти ничего об этом не сказано. Поэтому, только DCPL, только hardcore! :)
                                +3
                                2-е издание видели? Гдето лучше описана теория по оптимизирщим компиляторам?)
                                  0
                                  Все издания видел. В DCPL гораздо лучше изложены эти вопросы. Или даже в первом издании 1977 года самих «Компиляторов». IMHO, конечно.
                                    +1
                                    подробно DCPL я не читал, но насколько помню там изложены несколько разные вещи. DCPL скорее по проектированию языков чем по теории компиляторов, в отличие от книги дракона, где не заостряется особого внимания на конкретных парадигмах ЯП.
                                      +2
                                      DCPL про все аспекты разработки языков (кроме разбора, который ограничен рассмотрением s-выражений). И про трансляцию тоже, при чём с изложением на более фундаментальном уровне, чем у Ахо и компании. Фактически книга учит матаппарату для работы с языками. В книге Дракона же просто куча алгоритмов на разные случаи жизни. Хм… Наверное, книги дополняют друг друга, потому что у Ахо есть описание таких специальных вещей, как вектоизация. Но сама математика работы с типами, семантикой, трансляцией, эквивалентными преобразованиями для оптимизации и прочим лучше изложена в mit-овском учебнике.
                                    0
                                    Одно слово: Мучник.
                                    +1
                                    Эта книга о парсерах, а не о компиляторах.
                                    Главы «Генерация кода», «Оптимизация параллелизма и локальности» и «Межпроцедурный анализ» — о парсерах?
                                    Гм, похоже, что я не знаю про парсеры чего-то фундаментального…
                                      0
                                      Ну и что, что главы? Они поверхностные. Рассказывается не о теории, лежащей под всем этим, а о конкретных методах. Что, например, делать по этой книге, если у меня в процессоре регистров нет? Вот о парсинге там мощно рассказано, всеобъемлюще (хотя и менее строго, чем в книге Ахо и Ульмана 1977 года, из которой собственно книга с драконом и выросла). А о кодогенерации как-то не так. Этих методов хватит, чтобы что-то написать, но их явно не хватает, чтобы написать хороший кодогенератор. DCPL, в сравнении с этим изложением, даёт более общие подходы, при помощи которых можно выразить свои конкретные требования к коду (тот же анализ указателей, например). Вот… Первая часть книги дракона так же широко излагает вопросы парсинга, и по ней можно писать свой парсер. Но вторая часть недостаточно фундаментальна, IMHO. Кроме того, в ней не рассказано о нужных для работы с современными языками системах с полиморфными и автоматически выводимыми типами, о функциях высшего порядка, шаблонах, etc.

                                      Поэтому я и говорю, что это книга о парсинге. Остальное там изложено, как набор дополнительных рецептов. Я не говорю, что это не ценно, и что читать это не стоит. Но есть и лучшее изложение этого материала.
                                        +1
                                        1977 год это какбэ первое издание книги дракона(в простонародье книга зеленого дракона). Возможно вы имеете в виду классический двухтомник от этих товарисчей «теория синтаксических анализаторов» (первый том как раз 1977 года выпуска) но это совсем другая книга и к цели описать комплияторы там вообщем то не стояло. Книга дракона — не руководство к действию, а пища для ума, если так можно выразиться)
                                        А претензии к отсутствию описаний функциональщины и метапрограммирования — ну в данном контексте это тоже самое, что обвинять трехтомник Кнута в отсутствии описаний параллельных версий алгоритмов ;-)
                                          0
                                          Ну… Можно и так, конечно, на всё это смотреть. Но при этом надо учитывать, что существуют и книги-учебники с руководствами к действию. И их не надо забывать.
                                +2
                                IMHO, абсолютный must read по языкам программирования на сегодняшний день — это dcpl.mit.edu. Странно, что этой книги нет в списке.
                                  +3
                                    0
                                    Может уже писали, но в глаза не бросилось, невижу ничего про NET и его DSL.
                                    0
                                    А можете подсказать статьи и книжки по оптимизациям в компиляторах?
                                      +1
                                      в книге дракона есть главы по оптимизации.
                                        0
                                        А кроме?
                                        дракона сейчас читаю потихоньку, но хочется ещё на будущее списочек прикинуть
                                          0
                                          Если интересует актуальная информация то только искать публикации на эту тему) Ну а из книг, вот люди выше советуют DCPL, беглый осмотр когдато оставил неплохие впечатления о ней, по оптимизации вроде тоже что-то было там. Еще курс какой-то на лекториуме видел по компиляторам, мне понравился он в свое время.
                                      0
                                      Muchnick:

                                      www.amazon.com/Advanced-Compiler-Design-Implementation-Muchnick/dp/1558603204

                                      Только две-три главы не про оптимизации.
                                      +3
                                      Мне понравилась в свое время книжка Джека Креншоу «Давайте создадим компилятор!»
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                          +2
                                          Под Eclipse есть Xtext и, как пример языка, сделанного на нем — Xtend.
                                            +2
                                            >Микроруководство по lisp, написанному на C;

                                            Не совсем. Это реализация на C правил из «Микроруководства по LISP». О чем говорится в первом же абзаце по ссылке. Вообще занимательная выборка. Особенно прикольно видеть Lisp in small pieces (аццкая крутотень) рядом с такими вот игрушками.

                                              0
                                              Спасибо большое за исправление. Я невнимательно прочитал.
                                              +1
                                              Очень хорошее введение в разработку виртуальных машин — application & system modes.
                                              Virtual machines versatile platforms for systems and processes (http://ospbooks.blog.com/2012/12/12/download-virtual-machines-versatile-platforms-for-systems-and-processes-book-pages/)
                                                +2
                                                Забыли про мой компилятор GAZ. Потратил на создание компилятора почти год (было время, нечем было заняться, фигнёй страдал). Иногда пишу на нём скрипты для автоматизации действий на компьютере и имею библиотеку готовых скриптов в панели быстрого запуска всегда под рукой. Хотя теперь постепенно перехожу на AutoIt, (хотя сразу перейти не получается; например, бесит, что в нём нет нормальной обработки исключений), AU3-скрипты складываю туда же, рядом с GAZ-скриптами.

                                                Компилятор GAZ: habrahabr.ru/post/132034
                                                Официальная страница: osinavi.ru/gaz

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

                                                Самое читаемое