Must read. 5 статей о том, как создать свой язык программирования
Что Гвидо ван Россум думает о Julia и Go, какие книги о создании языков рекомендует комьюнити и 12 самых крутых фич языков программирования.
aslysun / shutterstock
Каждую неделю мы отбираем несколько интересных материалов по одной теме из англоязычного интернета и рассказываем, почему их обязательно надо прочитать. В этом выпуске — теория языков программирования и советы о том, как создать собственный.
Как вкатиться в тему?
Где читать: обсуждение на Reddit.
Зачем читать: чтобы не утонуть в море информации о том, как устроены языки, и разобраться с базовыми знаниями.
Топикстартер спросил, с чего лучше начать создание собственного языка программирования. В первую очередь ему порекомендовали узнать побольше о трёх важных блоках:
- Лексический анализ (токенизация) — процесс, который разделяет входные данные на отдельные части, то есть токены.
- Синтаксический анализ (парсинг) — создание дерева абстрактного синтаксиса с помощью тех самых токенов.
- Кодогенерация — процесс создания кода. Код обычно создаётся рекурсивно, с помощью дерева абстрактного синтаксиса.
Кроме того, дали несколько советов:
- вникнуть в историю создания других языков (например, по «Википедии»);
- изучить сайт с руководством по созданию языка программирования;
- присмотреться к книге Альфреда Ахо и Джеффри Ульмана Principles of Compiler Design, в которой разобран процесс создания компилятора.
В оригинальном посте советы более подробные — есть и ссылки на источники, и длинные текстовые сообщения с толковой информацией.
Что почитать по теории языков?
Где читать: обсуждение на Reddit.
Зачем читать: чтобы найти книги по теории программирования для начинающих.
В другом обсуждении на Reddit участники сообщества собрали классные рекомендации книг, в которых не слишком сложным языком описаны основы теории языков программирования.
- «Типы в языках программирования» Бенджамина Пирса: хорошее введение в теорию, которое советуют многие. В отличие от остальных книг, она переведена на русский язык. Правда, Пирс написал её в 2002 году, поэтому она не освещает ряд актуальных тем.
- Practical Foundations for Programming Languages («Практические основы языков программирования») Роберта Харпера. Эту книгу советуют читать уже после Пирса: в ней разобраны более подробные детали и для новичка она может быть сложновата.
- Concepts in Programming Languages («Концепты в языках программирования») Джона Митчелла — книга рассказывает о традиционных парадигмах программирования и больше сосредоточена на практике, а не на теории.
- Programming Languages: Application and Interpretation — книга бесплатна и доступна онлайн.
Кроме того один из комментаторов упомянул интересный сайт, на котором собрано огромное количество книг, видео и прочих материалов по самым разным темам, связанным с теорией языков программирования.
Самые классные фичи языков программирования
Где читать: в блоге The Renegade Coder.
Зачем читать: чтобы узнать об интересных фичах языков и понять, что бы вы хотели видеть в своём идеальном языке.
Джереми Грифски изучил почти 50 языков программирования и сделал список самых классных и необычных наворотов. Интересная особенность статьи — она постоянно обновляется. Пока в статье 12 пунктов, вот некоторые из них:
- Макросы (макрокоманды) — функция метапрограммирования, которая позволяет менять язык, добавляя собственные правила в дерево абстрактного синтаксиса.
- Лямбда-выражения — они похожи на анонимные функции, только лямбда-выражения можно использовать в качестве данных. Например, с их помощью можно сделать так, чтобы функция в качестве результата возвращала… функцию.
- Последовательная типизация — совмещает в себе элементы статической и динамической типизаций. Она позволяет определять, когда типизация будет статической, хотя по умолчанию использует динамическую типизацию.
- Инлайн (встроенное) тестирование — в языке Pyret, например, тестирование встроено в сам синтаксис языка, а тесты запускаются вместе с кодом. Благодаря этому вы никогда не забудете о них.
На каком языке писать свой язык программирования?
Где читать: обсуждение на Quora.
Зачем читать: чтобы получше разобраться в особенностях создания языков программирования.
Недавно на Quora появился вопрос — какой язык выбрать для того, чтобы создать свой язык программирования. Вот что ответили автору вопроса:
- Вопрос некорректен: сами языки программирования не пишут на других языках. Они пишутся на так называемых метаязыках, которые описывают правила и синтаксис. Пример метаязыка — БНФ (Формула Бэкуса — Наура).
- Зато на других языках пишут компиляторы. Для этого можно использовать любой язык общего назначения, однако чаще всего рекомендуют C, на котором написаны компиляторы Java, Python, PHP, JavaScript.
Кроме того, в обсуждении посоветовали много классных инструментов для создания языков.
Интервью с создателем Python. Что он думает о других языках?
Где смотреть: запись прямого эфира на YouTube.
Зачем смотреть: чтобы узнать немного об истории создания Python, планах на будущее и отношении Гвидо ван Россума к другим языкам.
Создатель Python ещё в мае дал интервью Microsoft. Он рассказал, что думает о Rust, Go, Julia и TypeScript.
- Rust, по его мнению, — отличный язык для своих целей. Ван Россум также отметил, что в Rust неплохо решена проблема с аллокацией памяти — в отличие от того же С++.
- Язык Go он назвал «самым питонистым» языком общего назначения.
- Julia, по мнению Гвидо, тоже напоминает Python — но с некоторыми отличиями. Поэтому он не советует программировать на Python и Julia в один день. Сравнивая эти два языка, Гвидо сказал, что в своей нише Julia явно выигрывает, зато сфера её применения не такая широкая.
- TypeScript тоже получил высокую оценку мэтра. Ван Россум признался, что Python нередко вдохновляется TypeScript, хотя и отметил, что TypeScript тоже учится у Python.
Гвидо также рассказал об истории создания Python, переходе с Python 2 на 3 и о том, планируется ли выход Python 4.
Хотите в будущем создать свой язык программирования? Начните с курсов из раздела «Программирование» на сайте Skillbox — возможно, среди них уже есть ваш идеальный язык.