Hacker News Digest

Тег: #lisp

Постов: 5

Why Common Lisp is now the best programming language (vivienhenz.com) 💬 Длинная дискуссия

Common Lisp ускоряет обратную связь при разработке благодаря отсутствию чёткой границы между временем чтения, компиляции и выполнения: программа существует как живой образ в памяти, и изменение функции применяется мгновенно без перезапуска. Это критично сейчас, когда LLMs пишут код быстро, а узким местом становится проверка работоспособности — в Common Lisp ошибки не падают программу, а выводят интерактивный отладчик со стек-трейсом и переменными, позволяя LLM сразу исправить код и продолжить выполнение. Макросы, возможные благодаря homoiconicity (код как списки данных), позволяют расширять язык под домен, превращая программирование в создание специализированного языка для задачи. Это особенно ценно в эпоху LLM-поддерживаемой кастомизации: например, ERP-система на собственном доменном языке позволяет пользователям вносить правки через LLM, сохраняя согласованность с исходной концепцией продукта. Программы на Common Lisp часто в 6–7 раз короче эквивалентных на Python благодаря абстракциям через макросы, что снижает стоимость токенов при работе с LLM и увеличивает долю кода, помещающуюся в контекстное окно, уменьшая ошибки из-за частичного видения программы. Хотя стандарт не обновлялся с 1994 года, это стабильность — фундамент не меняется, а пользовательские расширения не ломаются. Недостаток библиотек компенсируется возможностью LLM писать или портировать код самостоятельно, а сложность поиска инженеров не проблема: способность быстро учиться важнее знания конкретного языка, и обучение Common Lisp в интервью отбирает тех, кто будет расти в экспертизе. Таким образом, Common Lisp предоставляет уникальное сочетание скорости итерации, безопасности экспериментов и выразительности, усиливаемое возможностями современных LLM.

by misterchocolat • 06 октября 2026 г. в 02:51 • 150 points

Оригинал • HN

#common-lisp#homoiconicity#lisp#llm#macros#python

Комментарии (199)

Преимущества Common Lisp для LLM‐агентов не уникальны: другие языки (Clojure, Rust, Go, Python) тоже позволяют быстро перезапускать код, а сильные типы и статический анализ часто дают более надёжную обратную связь. Участники отмечают проблемы макросистем Lisp, необходимость учитывать токен‐эффективность и архитектурные решения, а также предлагают измерять производительность агентов в разных языках. Большинство комментаторов согласны, что LLM‐модели работают с любыми языками, а выбор определяется доступностью библиотек и обучающих данных. Для объективной оценки стоит проводить кросс‐языковые бенчмарки, измеряя количество токенов, число повторных попыток, время до рабочей версии и объём ручных правок. Опыт @clx75 показывает, что в Clojure можно достичь похожего «живого образа» через nREPL и clj‐reload, позволяя агенту быстро менять код и перезапускать тесты. По мнению @alexjurkiewicz, современные скриптовые языки (Python, Node) тоже умеют останавливать выполнение на исключениях без развёртывания стека, что уменьшает уникальность Lisp в этом аспекте. @peri-cl указывает, что LLM‐модели часто падают при работе с макросами Lisp, генерируя синтаксически неверные формы с неправильным числом скобок. Как отмечает @onion2k, экономия токенов зависит больше от архитектурных решений и модульности кода, чем от самого языка. По мнению @WalterBright, широкое использование макросов в Lisp приводит к созданию «ад‐хок» DSL, что усложняет поддержку и снижает привлекательность языка. @drwallace напоминает, что в Common Lisp можно определять собственные типы, тем самым частично компенсируя отсутствие статической типизации. @artpar считает, что «медленная часть» разработки — не написание кода, а проектирование и мышление, поэтому ускорение за счёт Lisp не решает главную проблему. @soltanov советует сравнивать LLM‐агентов в разных языках, фиксируя метрики токенов, количество ошибок и время до решения. @sidkshatriya предпочитает, чтобы язык выявлял ошибки на этапе компиляции, а не в рантайме, считая «возобновление» программы после правки несущественным преимуществом. @Karrot_Kream предлагает комбинировать ядро на C или Rust с Lisp‐подобным языком Janet для быстрой итерации, используя живой образ в LLM‐контексте.

A Friendly Introduction to Racket (geometridae.bearblog.dev)

Язык программирования 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, чтобы увидеть, как код превращается в визуальные образы.

by signa11 • 22 августа 2026 г. в 14:08 • 206 points

Оригинал • HN

#2htdp-image#drscheme#graphics#homoiconicity#lisp#macros#programming-language#racket#scheme

Комментарии (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) (jsomers.net) 🔥 Горячее

Биология в школе превратилась в список терминов — «Гольджи-аппарат», «Кребсов цикл», «митосоз», «меиоз», «ДНК‑РНК‑тРНК». Учёные же видят в ней динамический процесс, где один зygote превращается в целый организм благодаря градиентам химических сигналов, которые меняют экспрессию генов и порождают специализированные клетки. Это как рекурсивный Lisp‑программный код, где макросы вызывают макросы, а весь геном содержит инструкции к жизни.

Один из самых удивительных эпизодов — эксперимент О. Эвери с бактериями Streptococcus, где смена «гладкой» и «грубой» формы происходила без участия белка, а только за счёт нуклеиновой кислоты. Если бы в школе рассказывали такие истории, ученики бы увидели биологию как поисковый квест, а не как сухой перечень фактов.

Запомните: в эмбрионе небольшая химическая разница может задать «вверх‑вниз», а затем цепная реакция генерирует мозг, ноги и всё остальное.
Цитата: «Эти клетки — источник удивления, которым стоит восхищаться каждый день».
Интересный факт: уже в 1940‑х годах учёные начали раскрывать, что ДНК, а не белок, хранит наследственность.

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

by tyre • 20 августа 2026 г. в 17:50 • 255 points

Оригинал • HN

#biology#dna#genetics#lisp#streptococcus

Комментарии (100)

Школьная биология часто сводится к запоминанию терминов, лишая учеников ощущения открытий и экспериментов. В качестве альтернативы предлагают практико-ориентированное обучение, вдохновлённое идеями Паперта и Пиаже: через исследовательскую деятельность, программирование и смысловое понимание, а не сухие лекции. Комментатор ChaitanyaSai подчёркивает приоритет: смысл > мотивация > механика > измерение — без смысла обучение поверхностно. Инженерам и программистам советуют использовать программирование как инструмент для решения биологических задач, а не как карьерную цель. Некоторые рекомендуют делать карьерные паузы и переучиваться в биологии или нейробиологии для расширения перспектив. Базовые знания — термины, формулы — необходимы для понимания сложных тем, но их недостаточно. В биологии часто недооценивают работу: её называют низкооплачиваемой и неуважаемой, что вызывает споры — некоторые видят в таких заявлениях сексизм и предвзятость. Биологию сравнивают с обратным инженерингом эволюции — как с «assembly-кодом» с большим количеством «мёртвого кода», что делает её сложной для инженерного восприятия. Технологии уже позволяют создавать молекулярные структуры, но понимание человеческого тела остаётся далеко за пределами инженерных возможностей. Для школ и микроскул рекомендуется сосредоточиться на смысле и мотивации, а не на измеримых метриках, чтобы вернуть ощущение чудес биологии.

Lisp from Nothing, Second Edition (t3x.org) 🔥 Горячее

LISP FROM NOTHING
344 стр., 2025, Lulu Press, 6"×9", 19 иллюстраций, код бесплатно.

Купить: мягкий переплёт | твёрдый | PDF
Исходники | Превью (PDF) | Опечатки | Видео-обзор

Книга исследует минимальный LISP, способный интерпретировать и компилировать себя, и показывает, каким был хакинг в эпоху перфокарт и мейнфреймов. Во втором издании добавлена глава о связи LISP с λ-исчислением, улучшены макросы и стиль.

Примеры кода

Весь код книги (~100 КБ)
λ-исчисление в Scheme (~6 КБ)
Генератор перфокарт Postscript
Обложка главы «Let There Be LISP»

by nils-m-holm • 27 августа 2025 г. в 09:50 • 341 points

Оригинал • HN

#common-lisp#compilers#garbage-collection#interpreters#lambda-calculus#lisp#mainframes#nils-m.-holm#punch-cards#scheme

Комментарии (97)

  • Читатели восторженно отзываются о сайте и книгах Нильса М. Хольма, называя их «личной поэзией» и «культурными артефактами», созданными ради самого процесса.
  • Автор подтверждает: главное для него — красота и простота изложения, а не практическая польза или научная новизна.
  • Покупатели жалуются на выбор: «хочется всё сразу», но автор советует начать с одной книги и прислал шпаргалку «какую выбрать».
  • Обсуждаются входные требования: книга не для новичков; рекомендуют The Little Schemer, ANSI Common Lisp и A Gentle Introduction.
  • Возник спор о названии «Lisp from Nothing» при пометке «не вводная книга»; автор уточняет, что «nothing» значит «с нуля», а не «для нулевых».

Do I not like Ruby anymore? (2024) (sgt.hootr.club)

Перешёл в компанию, где стек — 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 — функция.

by Vedor • 26 августа 2025 г. в 07:00 • 121 points

Оригинал • HN

#lisp#lsp#python#ruby#rust#scheme#smalltalk#sorbet#typescript#vscode

Комментарии (127)

  • Автор рассказал, как после появления VSCode и LSP перестал использовать языки без типов и теперь не хочет возвращаться к Ruby без нормальной типизации.
  • Участники обсуждают, что Ruby остаётся элегантным и «радостным», но его отказ от постепенной типизации (включая Sorbet) отталкивает многих.
  • Python, напротив, эволюционирует: появились аннотации типов, LSP, но язык стал сложнее и уже не «выучить за выходные».
  • Некоторые считают, что страсть к Ruby — это ностальгия, а промышленность требует стабильности и инструментов, которые дают статические языки.
  • Общий вывод: выбор языка всё чаще диктуется экосистемой, инструментами и личными приоритетами, а не чистой «красотой» синтаксиса.