A Friendly Introduction to Racket
Язык программирования Racket — это современный потомок Lisp, родившийся в 1995 году как эволюция PLT Scheme. Он сочетает минималистичный синтаксис с мощной системой создания новых языков, что делает его идеальным для обучения и экспериментов. В отличие от «классического» Lisp, Racket предлагает гибкую архитектуру, где язык можно адаптировать под конкретную задачу — будь то анализ данных, генерация кода или визуализация.
Главная идея Racket — homoiconicity: код представлен как данные, что позволяет писать макросы и динамически модифицировать язык. Например, через (define-syntax-rule (while condition body ...) ...) можно добавить цикл while, которого нет в базовом синтаксисе. Это не просто текстовая замена, а полноценная языковая конструкция, генерируемая во время компиляции. Такие возможности делают Racket уникальным: вы не просто пишете программы, вы создаёте инструменты для их написания. Для понимания достаточно открыть DrRacket, ввести простой пример вроде (factorial 5) и увидеть результат — 120. Экспериментируйте с графикой через #lang racket и библиотекой 2htdp/image, чтобы увидеть, как код превращается в визуальные образы.
Комментарии (107)
Racket поддерживает создание нативных исполняемых файлов, включая кросс-компиляцию GUI-приложений (например, с macOS на Windows); официальное руководство содержит инструкции по сборке, подтверждая встроенные средства деплоя. Существуют реальные приложения — camp от Joël Dueck и remember от defn.io — что опровергает утверждение об отсутствии практического применения. Сообщество предоставляет ресурсы: Awesome Racket, Beautiful Racket, Racket Stories, собирающие библиотеки, учебные материалы и примеры проектов. Споры возникают вокруг вводной части статьи: одни считают её «не дружелюбной» из-за предположений о знании λ и синтаксиса, другие — что она достаточна для мотивированного читателя. Исторически Lisp утратил лидерство в ИИ из-за падения финансирования и появления Prolog, что объясняет его нишевый статус. Многие пользователи Emacs не осознают, что используют Emacs Lisp как язык программирования. Рекомендации: обратить внимание на дополнительные литералы (хеш-таблицы, регулярные выражения), не упомянутые в вводной статье; для оценки производительности макросов сравнивать с SBCL, где функции компилируются в нативный код, а макросы исполняются до компиляции. Изучение проектов camp и remember, а также ресурсов beautifulracket.com и racket-stories.com, помогает глубже освоить язык. Личный опыт показывает, что знание Racket может открыть профессиональные возможности — например, контракт в сфере CAD. Некоторые ценят в Racket горячую перезагрузку кода, другие — гомоиконичность как ключевое преимущество.
Why I chose Lua for this blog
Автор перевел свой блог с Racket на Lua, чтобы снизить сложность и обеспечить долгосрочную стабильность. Основная причина — разочарование в быстро меняющихся экосистемах вроде JavaScript и Ruby, где постоянные обновления и ломающие изменения усложняют поддержку. Lua привлек медленным развитием: между версиями 5.1 (2006) и 5.4 (2020) различия минимальны, а язык требует лишь компилятора C89.
Блог работает по старинке — через CGI-скрипты, с SQLite в качестве базы и шаблонизацией Mustache. Несмотря на кажущуюся архаичность, автор ценит простоту, минимальное количество зависимостей (около десяти) и возможность писать собственные легковесные библиотеки. Ключевой вывод: блог — это пространство для экспериментов, где можно отказаться от модных инструментов в пользу того, что действительно работает и приносит удовольствие.
Комментарии (135)
- Предложение возродить создание собственных движков для блогов как учебного проекта для инженеров из-за его низкого риска и возможностей для экспериментов.
- Обсуждение выбора Lua как стабильного и минималистичного языка для веб-разработки, несмотря на его недостатки (1-based индексация, разрыв между версиями, мало стандартных библиотек).
- Критика сложности современных стеков для блогов и аргументы в пользу простых решений: статические генераторы (Hugo), чистый HTML или минимальные скрипты (Python, Lua).
- Упоминание альтернативных технологий и подходов: Redbean, Perl, Caddy, XSLT, Web Components, Fennel, OpenResty и другие.
- Подчёркивание важности личного выбора, удовольствия от процесса и независимости от внешних сервисов при создании блога.
Knotty: A domain-specific language for knitting patterns 🔥 Горячее
Knotty — это предметно-ориентированный язык (DSL) для описания вязальных паттернов, реализованный в Racket. Он позволяет программировать схемы вязания, используя код вместо традиционных графических или текстовых инструкций. Основная идея заключается в автоматизации создания сложных узоров, что упрощает работу дизайнеров и энтузиастов.
Язык предоставляет модули для ввода-вывода данных, примеры кода и справочник, облегчая освоение и применение. Knotty демонстрирует, как нишевые DSL могут решать специализированные задачи, сочетая программирование с ремеслом.
Комментарии (49)
- Обсуждение исторических связей между программируемыми ткацкими станками (Жаккардовы машины) и современными компьютерами.
- Восхищение проектом как примером элегантного и практичного инженерного решения, продолжающего исторические традиции.
- Размышления о параллелях между вязанием и функциональным программированием, где физические ограничения сравниваются с системой типов.
- Интерес к современным DIY-станкам для вязания и возможностям автоматизации создания узоров с помощью ИИ.
- Шуточные комментарии об ожиданиях увидеть что-то другое (например, терминальный эмулятор) и отсылки к поп-культуре.