Hacker News Digest

Тег: #interpreters

Постов: 4

JIT: So you want to be faster than an interpreter on modern CPUs (pinaraf.info)

Проект JIT-компилятора для PostgreSQL сталкивается со сложностями из-за особенностей современных процессоров. Автор объясняет, что даже хорошо написанный интерпретатор может проигрывать в производительности из-за непредсказуемости переходов в switch-based интерпретаторах.

Используя технику "computed gotos" (динамических переходов), можно значительно ускорить интерпретацию, сделав шаблоны переходов более предсказуемыми для предсказателя ветвления процессора. Это может дать до 15-20% прироста производительности.

Автор также упоминает, что его JIT-решение для PostgreSQL будет использовать этот подход, а также другие оптимизации, такие как векторизация и inlining, чтобы превзойти стандартный интерпретатор PostgreSQL.

Кроме того, автор отмечает, что оптимизация под современные процессоры (особенно с их out-of-order исполнением и предсказанием ветвлений) требует осторожного подхода. Например, код должен быть структурирован так, чтобы минимизировать зависимости по данным и максимизировать параллелизм на уровне инструкций.

В итоге, проект направлен не только на создание JIT-компилятора, но и на то, чтобы переосмыслить, как должен работать интерпретатор, чтобы эффективно использовать современные процессоры.

by pinaraf • 12 октября 2025 г. в 19:08 • 158 points

ОригиналHN

#postgresql#jit#ios#apple#performance#optimization#compilers#interpreters

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

  • Обсуждение затронуло ограничения JIT в iOS из-за политики Apple, что влияет на производительность и возможности использования JIT в этой системе.
  • Участники обсудили, что JIT-компилятор может быть полезен для оптимизации, но его отсутствие в iOS ограничивает возможности приложений.
  • Также обсуждались различные аспекты производительности интерпретатора и JIT, включая влияние на предсказание переходов и спекулятивное исполнение.
  • Участники упомянули, что JIT может быть полезен для DSL или других специализированных языков, но ограничения iOS могут затруднить это.

Implementing Forth in Go and C (eli.thegreenplace.net)

  • Почему Forth?
    20 лет назад прочёл про язык в книге по embedded, но не вник. В июне 2025-го захотелось просто писать код и наткнулся на статьи Dave Gauera — решил попробовать.

  • Два уровня Forth
    User: просто пользуешься языком.
    Hacker: IF…THEN, BEGIN…UNTIL и прочие конструкции — обычные слова, которые можно переопределить; язык описывает сам себя.

  • goforth (Go)
    «Чистый» интерпретатор: слово хранит исходный текст, который повторно интерпретируется. Для пользователя работает, но нельзя реализовать IF внутри Forth — всё контролирует Go.

  • ctil (C)
    Классическая реализация: связанный словарь, токен-трединг, большая часть на Forth. Позволяет писать:

: variable create 1 cells allot ;

: if   ' 0branch , here 0 , ; immediate
: then here swap - swap ! ; immediate
: else ' branch , here 0 , swap dup here swap - swap ! ; immediate

Итого: два эксперимента, показывающие разницу между «просто работает» и «можно копнуть душу языка».

by Bogdanp • 27 августа 2025 г. в 13:19 • 149 points

ОригиналHN

#forth#go#c#interpreters#stack-based-languages#embedded-systems

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

  • Реализация Forth на Go оказалась «не по канонам»: стек и память описаны отдельными структурами, поэтому многие стандартные слова не работают.
  • Кто-то показал элегантный вариант на C++ с continuation-passing style и musttail-атрибутом clang.
  • Всплыли воспоминания о Forth-диалекте FCode в Open Firmware старых Mac, но выяснилось, что Intel-Mac’и использовали EFI, а не Open Firmware.
  • Читатели посетовали на читаемость кода без комментариев о стеке и отметили, что «high-level» реализации могут потерять дух Forth.
  • Автор ответил: первая версия на Go была экспериментом, а «правильная» реализация на C хранит код и данные вместе, как положено.

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» значит «с нуля», а не «для нулевых».

Build Your Own Lisp (buildyourownlisp.com) 🔥 Горячее

by lemonberry • 05 августа 2025 г. в 11:55 • 267 points

ОригиналHN

#lisp#programming-languages#interpreters

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

I learned recently that the creator of the Iosevka typeface did so using their own Lisp implementation.The typeface:https://github.com/be5invis/IosevkaThe language:https://github.com/be5invis/PatELTheir tool which they used to build the language:https://github.com/be5invis/patris