28 января 1995 — Появился Racket — язык для создания языков
28 января 1995
Язык Lisp всегда был чем-то вроде священного Грааля - мощным, но для многих слишком академичным. Далеко не все программисты читали SICP (Structure and Interpretation of Computer Programs).
В середине 90-х группа исследователей начали разрабывать Racket, который со временем вырос из учебного пособия в настоящий швейцарский нож для тех, кто хочет создавать свои собственные языки программирования.
Зачем нужен был Racket?
До его появления существовал был Scheme - элегантный, но аскетичный диалект Lisp. Команда PLT (Programming Languages Team) во главе с Маттиасом Фелляйзеном понимала: чтобы научить людей программировать правильно, нужен инструмент, который не будет бить по рукам за ошибки, а позволит экспериментировать.
До 2010 года проект назывался PLT Scheme. Разработчики позиционировали его, как не просто «ещё один диалект», а полноценная платформа для создания новых языков.
Язык, который не диктует условия
Главная фишка Racket - это возможность менять сам язык под конкретную задачу. В обычном языке вы подстраиваетесь под синтаксис. В Racket вы пишете синтаксис под себя. Это как создавть свой собственный DSL (Domain Specific Language), только вы определяете гораздо более широкий набор фич языка.
Чем Racket выделяется на фоне других:
Директива #lang: Вы можете в одном файле писать на классическом Racket, во втором - на типизированном Typed Racket, а в третьем - создавать документацию через Scribble. И всё это будет работать вместе бесшовно.
Макросы нового уровня: Здесь макросы - это не просто подстановка текста, как в Си, а мощнейший инструмент трансформации кода, который гарантирует, что вы не сломаете логику программы случайным совпадением имен.
Среда DrRacket: интерактивный инструмент для создания языков и использования всех фич Racket.
Метапрограммирование по умолчанию
Метапрограммирование - это набор техник программирования, в которых код и его примитивы (методы, классы и др) используется, как данные. То есть, в обычном программировании мы складываем в структуры данных наши бизнес-данные, технические данные и т.д. В случае с метапрограммированием в структуры данных складывается код и его примитивы. Эта техника используется для реализации функциональности с широкой энтропией вариантов использования.
В Racket вы метапрограммируете по умолчанию, так как язык программирования - это продукт с широкой энтропией вариантов использования.
В целом разработка своего языка программирования - это отличная возможность прокачать себя, как программиста. Начиная делать свой язык программирования, вы можете задаться вопросом, куда его применить. Это уже действительно сложно, так как без применения вы едва ли сможете понять, насколько хорошо у вас получилось. Так что моё предложение здеьс - это начать с разработки своего DSL. DSL можно разработать почти в любом языке программирования, а найти применение можно даже в ваших коммерческих проектах. Для реализации DSL вам придётся использовать все возможности метапрограммирования. Так и прокачаетесь.
Лучше всего в метапрограммировании себя чувствуют языки Lisp, Ruby, Racket, Elixir.
Где мы видим Racket сегодня?
Racket нашел себе место там, где важна скорость разработки и кастомные инструменты:
Naughty Dog: Студия, подарившая нам The Last of Us и Uncharted, использовала Racket для создания внутренних инструментов и скриптовых движков. Когда нужно быстро «набросать» логику сложной игры, Racket оказывается незаменим.
Издательское дело и документация: Благодаря системе Scribble на Racket верстаются сложнейшие технические книги и мануалы, где код и текст должны быть единым целым.