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 горячую перезагрузку кода, другие — гомоиконичность как ключевое преимущество.
I should have loved biology (2020) 🔥 Горячее
Биология в школе превратилась в список терминов — «Гольджи-аппарат», «Кребсов цикл», «митосоз», «меиоз», «ДНК‑РНК‑тРНК». Учёные же видят в ней динамический процесс, где один зygote превращается в целый организм благодаря градиентам химических сигналов, которые меняют экспрессию генов и порождают специализированные клетки. Это как рекурсивный Lisp‑программный код, где макросы вызывают макросы, а весь геном содержит инструкции к жизни.
Один из самых удивительных эпизодов — эксперимент О. Эвери с бактериями Streptococcus, где смена «гладкой» и «грубой» формы происходила без участия белка, а только за счёт нуклеиновой кислоты. Если бы в школе рассказывали такие истории, ученики бы увидели биологию как поисковый квест, а не как сухой перечень фактов.
Запомните: в эмбрионе небольшая химическая разница может задать «вверх‑вниз», а затем цепная реакция генерирует мозг, ноги и всё остальное.
Цитата: «Эти клетки — источник удивления, которым стоит восхищаться каждый день».
Интересный факт: уже в 1940‑х годах учёные начали раскрывать, что ДНК, а не белок, хранит наследственность.
Биология должна быть представлена как приключение, где каждый открытый механизм — как открытие в космосе, только ближе к дому.
Комментарии (100)
Школьная биология часто сводится к запоминанию терминов, лишая учеников ощущения открытий и экспериментов. В качестве альтернативы предлагают практико-ориентированное обучение, вдохновлённое идеями Паперта и Пиаже: через исследовательскую деятельность, программирование и смысловое понимание, а не сухие лекции. Комментатор ChaitanyaSai подчёркивает приоритет: смысл > мотивация > механика > измерение — без смысла обучение поверхностно. Инженерам и программистам советуют использовать программирование как инструмент для решения биологических задач, а не как карьерную цель. Некоторые рекомендуют делать карьерные паузы и переучиваться в биологии или нейробиологии для расширения перспектив. Базовые знания — термины, формулы — необходимы для понимания сложных тем, но их недостаточно. В биологии часто недооценивают работу: её называют низкооплачиваемой и неуважаемой, что вызывает споры — некоторые видят в таких заявлениях сексизм и предвзятость. Биологию сравнивают с обратным инженерингом эволюции — как с «assembly-кодом» с большим количеством «мёртвого кода», что делает её сложной для инженерного восприятия. Технологии уже позволяют создавать молекулярные структуры, но понимание человеческого тела остаётся далеко за пределами инженерных возможностей. Для школ и микроскул рекомендуется сосредоточиться на смысле и мотивации, а не на измеримых метриках, чтобы вернуть ощущение чудес биологии.
Lisp from Nothing, Second Edition 🔥 Горячее
LISP FROM NOTHING
344 стр., 2025, Lulu Press, 6"×9", 19 иллюстраций, код бесплатно.
Купить: мягкий переплёт | твёрдый | PDF
Исходники | Превью (PDF) | Опечатки | Видео-обзор
Книга исследует минимальный LISP, способный интерпретировать и компилировать себя, и показывает, каким был хакинг в эпоху перфокарт и мейнфреймов. Во втором издании добавлена глава о связи LISP с λ-исчислением, улучшены макросы и стиль.
Примеры кода
- Метациркулярный интерпретатор: CL, Scheme
- Компилятор (~400 строк): liscmp.lisp.html
- Система: lisp.lisp.html
- Сборщик мусора: gc.lisp.html
Весь код книги (~100 КБ)
λ-исчисление в Scheme (~6 КБ)
Генератор перфокарт Postscript
Обложка главы «Let There Be LISP»
Комментарии (97)
- Читатели восторженно отзываются о сайте и книгах Нильса М. Хольма, называя их «личной поэзией» и «культурными артефактами», созданными ради самого процесса.
- Автор подтверждает: главное для него — красота и простота изложения, а не практическая польза или научная новизна.
- Покупатели жалуются на выбор: «хочется всё сразу», но автор советует начать с одной книги и прислал шпаргалку «какую выбрать».
- Обсуждаются входные требования: книга не для новичков; рекомендуют The Little Schemer, ANSI Common Lisp и A Gentle Introduction.
- Возник спор о названии «Lisp from Nothing» при пометке «не вводная книга»; автор уточняет, что «nothing» значит «с нуля», а не «для нулевых».
Do I not like Ruby anymore? (2024)
Перешёл в компанию, где стек — Python. Выбор был не из-за языка: Python мне всегда казался гигантским красным флагом. Тем не менее, начинаю к нему привыкать.
Почему я любил Ruby
Ruby — мой первый «язык-любовь»: всё объект, if можно переписать блоками, method_missing позволяет метапрограммировать. Он черпал у Smalltalk и Lisp, и это вдохновляло.
Почему ненавидел Python
Python казался «хуже Ruby» и «ещё хуже Scheme». if — оператор, а не выражение; lambda уродливые; до Python 3 print вообще был оператором. Один «правильный» способ делать всё раздражал.
Типы для нетипизированного
Потом пришёл TypeScript: мощная система типов, narrowing, conditional types. Плохие конструкции языка прощаются статическим анализом.
Я изменился
TypeScript научил: отсутствие match или if-выражения пережить, если компилятор проверит инициализацию. Rust показал, что мутабельность — не зло.
Python изменился
Теперь в Python есть type hints, match с деструктуризацией, а print — функция.
Комментарии (127)
- Автор рассказал, как после появления VSCode и LSP перестал использовать языки без типов и теперь не хочет возвращаться к Ruby без нормальной типизации.
- Участники обсуждают, что Ruby остаётся элегантным и «радостным», но его отказ от постепенной типизации (включая Sorbet) отталкивает многих.
- Python, напротив, эволюционирует: появились аннотации типов, LSP, но язык стал сложнее и уже не «выучить за выходные».
- Некоторые считают, что страсть к Ruby — это ностальгия, а промышленность требует стабильности и инструментов, которые дают статические языки.
- Общий вывод: выбор языка всё чаще диктуется экосистемой, инструментами и личными приоритетами, а не чистой «красотой» синтаксиса.