← На главную

Вышел Symbolica 2.0 с программируемыми символами и JIT-компиляцией

05.06.2026 17:13 · hackernews

Symbolica, фреймворк для символьных вычислений на Python и Rust, получил крупное обновление до версии 2.0. Ключевая фича этого релиза — программируемые символы. Теперь пользователи могут научить свои математические объекты упрощаться, дифференцироваться, раскладываться в ряды, выводиться на экран и вычисляться почти как встроенные функции.

В Symbolica 2.0 переработан вывод. Появился автоматический перенос строк с цветными скобками — стало гораздо легче читать огромные вложенные выражения. В блокнотах вроде Jupyter или Marimo по умолчанию включается красочный HTML-режим, но можно легко переключиться на LaTeX. Добавлен и экспорт в Typst.

Сильно улучшен Rust API. Нужно гораздо меньше импортов — новый прелюд собирает самые частые трейты и типы. Добавлены дополнительные перегрузки, автоматические преобразования типов и, что самое удобное, builder-паттерн для сложных настроек. Например, конструкция высокопроизводительного численного оценщика стала понятнее и короче.

Главное нововведение — хуки в жизненном цикле символа. В 2.0 можно определить собственные правила для нормализации, переопределить вывод (включая LaTeX), задать производную, рассказать системе, как функция ведёт себя возле сингулярности (хук для рядов), и зарегистрировать численные реализации для разных типов оценщиков. В статье приводят пример с гамма-функцией — через хуки Symbolica учат правильно раскладывать её возле полюса, применяя тождество Γ(a+1) = aΓ(a).

Оценщики переработаны основательно. Главное — появилась JIT-компиляция через крейт symjit (работали вместе с Шахриаром Ираванианом). JIT-путь поддерживает кастомные хуки и теперь по умолчанию используется в Python. По скорости он конкурирует с генерацией ассемблера, при этом компиляция остаётся быстрой.

Ещё одна важная штука — double-float арифметика. Число хранится как невычисленная сумма двух f64, что даёт примерно 106 бит точности (31 десятичный знак против 16 у обычных double). Это более чем в три раза быстрее, чем произвольная точность через Float. В Python для 32 знаков запускается автоматически.

Наконец, в Symbolica 2.0 завезли кучу спецфункций: полигамма, полилогарифмы, бесселевы функции, дзета-функцию Римана и геометрические функции — с хуками для вычислений и поведением в особых точках. Многие значения нормализуются сразу, а внутри скомпилированных оценщиков константы вроде π и ζ(3) заменяются числами, чтобы не тянуть библиотеку спецфункций.

Автор честно рассказывает, как использовал AI. В основном Codex 5.5 помог с большими рефакторингами и периферией (сайт, документация), но критический код и отладку приходится делать руками. В планах — сделать опциональным бэкенд GMP для произвольной точности (через malachite и astro-float), что позволит собирать Symbolica под WASM и проще на Windows.

Читать оригинал →