Hacker News Digest

Тег: #scheme

Постов: 13

Lisp: Notes on its Past and Future (1980) (www-formal.stanford.edu)

LISP просуществовал 21 год к 1980 году, потому что представляет собой приблизительный локальный оптимум в пространстве языков программирования. Маккарти отмечает, что язык накопил некоторые "балластные" элементы, которые следует устранить, и упустил возможности для улучшений. Языку помогло бы совместное обслуживание, особенно в создании и поддержке библиотек программ. Компьютерно проверяемые доказательства корректности программ теперь возможны для чистого LISP и некоторых расширений, но для полного использования математической основы языка требуется больше теории и упрощения самого языка.

В примечании 1999 года Маккарти отмечает, что его взгляды 1980 года в основном соответствуют текущим. Основная идея заключается в том, что LISP, несмотря на свою долговечность, нуждается в очистке от лишних элементов и улучшении для раскрытия его полного потенциала, особенно в области формальных доказательств корректности программ.

by birdculture • 02 ноября 2025 г. в 19:05 • 181 points

ОригиналHN

#lisp#clojure#scheme#llm#genetic-programming#metaprogramming#formal-verification

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

  • Обсуждение показало, что Lisp и его диалекты всё ещё живы, но в нишевых формах: от Clojure на JVM до CHICKEN Scheme, компилирующего в C.
  • Участники отмечают, что язык остаётся мощным инструментом, но его экосистема и сообщество сильно сократились, и нет признаков возвращения в мейнстрим.
  • Некоторые подчеркнули, что Lisp-языки всё ещё важны для AI-исследований, генетического программирования и метапрограммирования.
  • Сообщество отметило, что популярность языка упала не из-за технических причин, а из-за смены парадигмы в разработке ПО от символического AI к нейронным сетям и статистическому программированию.

Structure and Interpretation of Classical Mechanics (2014) (tgvaughan.github.io)

Классическая механика в интерпретации Сассмана и Виздомса представлена как вычислительная дисциплина, где математические структуры реализуются через программирование. Второе издание неофициальной HTML-версии книги MIT охватывает лагранжеву и гамильтонову механику, твердые тела и канонические преобразования, предлагая читателям глубокое понимание фундаментальных физических законов через призму вычислений.

Книга уникальна своим подходом к механике: она использует Scheme для реализации физических концепций, исследует такие темы как принцип стационарного действия, уравнения Эйлера-Лагранжа, тензор инерции и теорему Нётер. Особое внимание уделяется вычислительным методам анализа механических систем, включая поверхности сечения, экспоненциальное расхождение и теорему Лиувилля, что делает текст одновременно теоретическим и практическим руководством для изучающих классическую механику с вычислительной точки зрения.

by the-mitr • 27 октября 2025 г. в 04:27 • 96 points

ОригиналHN

#scheme#racket#mit#classical-mechanics#lagrangian-mechanics#hamiltonian-mechanics#computational-physics

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

  • Обсуждение вращается вокруг книги SICP и её влияния на образ мышления, а также вокруг трудностей запуска примеров кода и альтернативных реализаций.
  • Участники обсуждают, как лучше всего подойти к изучению фундаментальных концептов, и какие инструменты (например, Scheme в Racket или scmutils в MIT Scheme) лучше всего подходят для этого.
  • Также поднимается вопрос о том, как современные технологии и подходы могли бы облегчить обучение и взаимодействие с такими фундаментальными концептами.
  • Некоторые участники делятся личными историями о том, как они познакомились с книгой и как она повлияла на их мышление и подход к программированию.
  • Обсуждается идея написать современный аналог "Structure and Interpretation of Classical Mechanics" и "Structure and Interpretation of Quantum Mechanics" с использованием современных инструментов и подходов.

Practical Scheme (practical-scheme.net)

Practical Scheme — это коллекция библиотек и расширений для использования Scheme в качестве инструмента для повседневных задач системных инженеров и программистов. Автор, в настоящее время использующий Perl, стремится заменить его Scheme для обработки файлов, генерации отчетов, отслеживания процессов и создания GUI-оболочек. На сайте представлены как готовые приложения, так и библиотеки, некоторые из которых находятся в стадии alpha/beta. Основная цель проекта — сделать жизнь автора счастливее, без каких-либо гарантий для пользователей.

Среди ключевых инструментов — Gauche (версия 0.9.15, 2024), реализация R7RS Scheme с быстрым запуском и встроенными системными интерфейсами; WiLiKi, движок вики (0.6.2, 2014); и escm, фильтр для обработки Scheme-выражений в текстовых файлах. Также доступны библиотеки Gauche-gl (OpenGL, версия 0.6, 2014) и Gauche-gtk2 (GTK2, версия 0.6.1, 2022). Сайт содержит документы по применению Scheme в реальных проектах, включая создание баз данных для трекинга производства и обработку чисел с плавающей запятой.

by ufko_org • 21 октября 2025 г. в 05:47 • 121 points

ОригиналHN

#scheme#gauche#r7rs#opengl#gtk#chez-scheme#chicken#gambit#bigloo

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

  • Сайт не обновляется, поэтому список инструментов устарел, но в целом он всё ещё полезен как ориентир.
  • Список не охватывает все реализации, но охватывает те, которые действительно важны.
  • Существует несколько реализаций Scheme, которые могут компилировать в исполняемые файлы, включая Chez Scheme, Chicken, Gambit и Bigloo.
  • Некоторые из них могут компилировать в исполняемые файлы, но не все.
  • Некоторые из них могут компилировать в исполняемые файлы, но не все.

Code from MIT's 1986 SICP video lectures (github.com)

Репозиторий felipap/sicp-code содержит оцифрованный код из знаменитых лекций MIT SICP 1986 года. Эти лекции, основанные на классическом учебнике "Структура и интерпретация компьютерных программ", считаются одними из самых влиятельных в истории компьютерных наук. Проект представляет собой историческую ценность, сохраняя для потомков примеры кода, которые формировали мышление поколений программистов.

Код в репозитории организован по лекциям и включает примеры на языке Scheme, демонстрирующие фундаментальные концепции функционального программирования и абстракций. Репозиторий служит не только образовательным ресурсом, но и памятником эволюции программирования, показывая, как фундаментальные идеи остаются актуальными десятилетиями после создания.

by felipap • 17 октября 2025 г. в 20:18 • 133 points

ОригиналHN

#scheme#functional-programming#abstractions#computer-science#education#historical#github

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

  • SICP и его лекции остаются актуальными, но код из книги 1985 года может не работать в современных реалиях.
  • Сообщество активно делится ссылками на ресурсы: форматированная HTML-версия книги, PDF, EPUB, а также исходники примеров кода.
  • Обсуждение затрагивает вопрос о том, насколько CS — это наука, и какие именно изменения в парадигме ML влияют на эту точку зрения.
  • Участники делятся личными впечатлениями от чтения книги и просмотра лекций, а также обсуждают, как технический долгоживущий код может быть устаревшим.

Show HN: Kent Dybvig's Scheme Machine in 400 Lines of C (Heap-Memory Model) (gist.github.com)

Виртуальная машина для языка Scheme реализована на C с использованием кучи для хранения пар. Основана на модели из работы Дабвига «Three Implementation Models for Scheme», что делает её компактным учебным примером интерпретатора Lisp-подобных языков.

Лексический анализатор разбивает входную строку на токены, а парсер строит из них списковые структуры через функцию cons. Пары хранятся в статическом массиве text, что упрощает управление памятью. Поддерживаются базовые конструкции: атомы, списки, цитирование через апостров. Вывод структур реализован рекурсивно с учётом точечной нотации.

by swatson741 • 06 октября 2025 г. в 14:06 • 210 points

ОригиналHN

#scheme#c#lisp#interpreter#chez-scheme#mit-scheme#memory-management#compiler#github

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

  • Обсуждение производительности и особенностей различных реализаций Scheme, включая Chez Scheme, MIT Scheme и другие.
  • Упоминание роли Кента Дибвига как создателя Chez Scheme и его влияния как преподавателя и исследователя.
  • Вопросы о технических деталях и возможных ошибках в представленном коде, включая проблемы с указателями и порядком вычислений.
  • Идеи о бутстраппинге компиляторов и интерпретаторов, включая использование LLM для генерации ассемблерного кода.
  • Общие положительные отзывы о минималистичных и элегантных реализациях Scheme, таких как обсуждаемый код.

Scm2wasm: A Scheme to WASM compiler in 600 lines of C, making use of WASM GC (git.lain.faith)

Разработан экспериментальный компилятор Scheme в WebAssembly, который автор сам называет «очень плохим» и минималистичным. Он написан преимущественно на C (97.2%) и способен преобразовывать код Scheme в валидный WASM-модуль, который затем можно запускать через Wasmtime.

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

by todsacerdoti • 28 сентября 2025 г. в 15:43 • 172 points

ОригиналHN

#scheme#webassembly#wasm-gc#c#wasmtime#asm.js#compiler#oop

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

  • Упомянуты проекты на WebAssembly: минимальный OOP рантайм, Forth, компилятор в твите и книга о WebAssembly.
  • Обсуждается компилятор Scheme в WebAssembly (Guile Hoot), его особенности и поддержка WASM-GC.
  • Затронуты технические вопросы: возможность использования как интерпретатора, поддержка tail call и call/cc.
  • Отмечается важность самодостаточных инструментов и независимости от платформ.
  • Поднята тема различий между Asm.js и WebAssembly в контексте исторического развития.

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

  • Обсуждаются исторические Lisp-процессоры (SCHEME-78, Symbolics 'Ivory', TI) и причины их коммерческого неуспеха: высокая стоимость, проприетарность и несоответствие массовому рынку.
  • Выдвигается тезис, что даже если бы такие процессоры выбрали для IBM PC, они бы проиграли из-за архитектурных недостатков и быстрого прогресса традиционных CPU и компиляторов.
  • Отмечается связь между разработчиками SCHEME-78 (Гай Стил, Дэнни Хиллис) и их работой в MIT, а также последующим созданием Connection Machine.
  • Упоминается важность работ Линн Конвей по VLSI-дизайну и курса, на котором студенты впервые проектировали и производили чипы.
  • Обсуждается превосходство специализированных сред, подобных Interlisp-D, над современными инструментами разработки.

Advanced Scheme Techniques (2004) [pdf] (people.csail.mit.edu)

- PDF-файл повреждён: вместо текста — поток сжатых байтов.  
- Содержимое невозможно прочитать без распаковки и декодирования.  
- Перевод и сокращение не применимы: исходных данных нет.  

by mooreds • 12 сентября 2025 г. в 15:44 • 92 points

ОригиналHN

#scheme#continuations#closures#cps#macros

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

  • Scheme обманчиво прост, но сложен для компиляции: гигиеничные макросы и продолжения первого класса требуют особых подходов.
  • CPS-преобразование — популярный, но не единственный способ реализовать continuations; подходят и байт-код/виртуальные машины, и другие схемы.
  • Реализация closures и правильная работа с пустым списком (не «ложь» в Scheme) добавляют сложности.
  • Полезны материалы: диссертация Dybviga, доклад Олега Киселёва, статья о секвентном исчислении как IR.

Anonymous recursive functions in Racket (github.com)

Репозиторий показывает, как в Racket писать анонимные рекурсивные функции без letrec и имен.
Ключевая идея — Y-комбинатор: лямбда получает себя как аргумент и вызывает его для следующего шага.

(define Y
  (λ (f)
    ((λ (x) (x x))
     (λ (x) (f (λ (a) ((x x) a)))))))

((Y (λ (fact)
      (λ (n)
        (if (zero? n) 1 (* n (fact (sub1 n)))))))
 5) ; 120

Такой приём работает для любой рекурсии: факториал, fib, обход списков и т.д.

by azhenley • 04 сентября 2025 г. в 00:39 • 80 points

ОригиналHN

#racket#scheme#functional-programming#recursion#y-combinator#lambda-calculus#clojure#python#go#github

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

  • Обсуждение началось с примера анонимной рекурсии на Racket; оказалось, что код совместим с любым R6RS-Scheme, включая проект scheme-rs.
  • Участники сравнили подходы: в Clojure нужен явный recur, в Racket хвостовые вызовы оптимизируются автоматически.
  • Кто-то спросил, стоит ли брать Racket для повторного изучения ФП; советуют почитать «zen of Racket» и быть готовым к узкой, но мощной экосистеме.
  • Появились порты идеи на Python и Go (через Y-комбинатор), но часть людей предпочла бы обычный цикл для отладки.
  • Сообщество предупреждает: в нишевых языках придётся уметь докручивать библиотеки «с нуля» и держать редких специалистов.

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

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

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

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

GNU Artanis – A fast web application framework for Scheme (artanis.dev)

GNU Artanis — первый production-ready веб-фреймворк на Scheme. Лёгкий, быстрый, с поддержкой JSON/XML/SXML, WebSocket, i18n, MySQL/SQLite/PostgreSQL, кэширования, шаблонов и статики.

(use-modules (artanis artanis))
(init-server)
(get "/hello" (λ () "hello world"))
(run #:port 8080)

Скачать

Документация
Официальное руководство

Исходники

История
2013 — рождение на hack-potluck Guile; 2014 — награда «Lisp In Summer Projects»; 2015 — первая стабильная версия и вступление в GNU; 2021 — переход под крыло HardenedLinux.

Контакты
Почта: artanis@gnu.org
GitLab: https://gitlab.com/hardenedlinux/artanis

by smartmic • 26 августа 2025 г. в 20:06 • 243 points

ОригиналHN

#scheme#gnu#websockets#mysql#sqlite#postgresql#json#xml

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

  • Участники обсуждают фреймворк Artanis для Guile Scheme: кто-то хвалит простоту синтаксиса и встроенный веб-сервер, кто-то жалуется на отсутствие CSRF, 404-ссылок и слабое tooling.
  • Почему Guile не стал популярен? Недостаток LSP, отладки, туториалов и узкая аудитория.
  • Название «Artanis» — отсылка к Sinatra (Ruby) и палиндрому «Sinatra» задом-наперёд.
  • Сайт без JS и шрифтов выглядит чисто, но кто-то считает текст слишком крупным и структуру странной.
  • По безопасности: при грамотных разработчиках Scheme-системы могут быть безопаснее «обычных».

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

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

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

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

Compiling a Lisp: Lambda lifting (bernsteinbear.com)

Переписал Ghuloum-туториал на Python (~300 строк). Убрал читалку S-выражений и бинарный код — теперь текстовая ассемблерная печать.

Lambda-lifting требует:

  • знать связанные переменные;
  • собирать свободные переменные лямбд;
  • накапливать создаваемые code-объекты.

Связывают let и lambda; для них обновляем окружение.

Lifter

class LambdaConverter:
    def __init__(self):
        self.labels = {}

    def convert(self, expr, bound, free):
        match expr:
            case int() | Char() | bool():
                return expr
            case str() if expr in bound or expr in BUILTINS:
                return expr
            case str():
                free.add(expr)
                return expr
            case ["if", t, c, a]:
                return ["if",
                        self.convert(t, bound, free),
                        self.convert(c, bound, free),
                        self.convert(a, bound, free)]

lift_lambdas запускает обход и возвращает (labels …).

Lambda

Лямбда:

  • связывает параметры;
  • выделяет код;
  • захватывает внешнее окружение.

Пример:

(lambda () x)  ; x свободна

превращается в

(labels ((f0 (code () (x) x)))
  (closure f0 x))

Даже если x связан снаружи, внутри лямбды он считается свободным.

by azhenley • 10 августа 2025 г. в 22:35 • 146 points

ОригиналHN

#python#lisp#compiler#lambda-lifting#racket#scheme#c#c++#cuda#artificial-intelligence

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

  • Участники рекомендуют три современные книги по компиляторам, вдохновлённые статьёй Ghuloum: «Writing a C Compiler» (Sandler), «Essentials of Compilation» на Racket и Python (Siek).
  • Обсуждали «lambda lifting»: преобразование, выносящее замыкания наверх, уменьшая их размер вплоть до полного исчезновения.
  • Уточнили, что «lambda lifting» в статье связан с разделом 3.11 о сложных константах в Scheme.
  • Разбирали, почему современный ИИ использует Python, а не Lisp: удобство как «клея» для C++/CUDA, упадок доли рынка Lisp и смена парадигмы ИИ.