HeadlinesBriefing favicon HeadlinesBriefing.com

Три способа пронести SQLite в Nix

Hacker News •
×

Проект nixpkgs-multiverse использует JSON-индексы (versions.json 5,3 МБ, history.json 7,5 МБ), охватывающие 305 492 версии пакетов в 31 904 пакетах. Встроенная функция Nix builtins.fromJSON жадно разбирает целые файлы, из-за чего одиночный поиск стоит столько же, сколько полное сканирование.

Существует три обходных пути. builtins.exec (с 2017) запускает SQLite и разбирает его вывод в формате Nix, но порождает процесс на каждый запрос. builtins.importNative (с 2014) загружает общую библиотеку с кэшированными дескрипторами SQLite, избегая накладных расходов на запуск. Оба требуют allow-unsafe-native-code-during-evaluation.

Третий подход преобразует индекс в файл Nix размером 6,0 МБ, используя ленивую оценку Nix для обращения только к нужным атрибутам. Четвёртый вариант, builtins.wasm (март 2026), вызывает функции WebAssembly, расширяя Nix без новых встроенных функций.

Ключевые сущности: Компании: Determinate Systems | Люди: Eelco, rickynils, fmzakari