Hacker News Digest

Тег: #datomic

Постов: 3

Optimizing Datalog for the GPU (danglingpointers.substack.com)

by blakepelton • 04 ноября 2025 г. в 14:31 • 107 points

ОригиналHN

#datalog#cuda#hip#spir-v#cozodb#codeql#souffle#datomic

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

  • Использование Datalog-подобных систем в разных контекстах: от CozoDB до CodeQL и от Rust до GPU-фреймворков.
  • Обсуждение того, какие именно технологии используются в продакшене: от Datomic до CozoDB и от Soufflé до CodeQL.
  • Разговор о том, какие технологии используются для запросов к данным: от SQL-подобных до Datalog-подобных.
  • Обсуждение того, какие технологии используются для запросов к данным в контексте GPU: CUDA, HIP и SPIR-V.

Clojure's Solutions to the Expression Problem (infoq.com)

Clojure и «проблема выражений»

  • Проблема: добавлять новые типы данных и новые операции без перекомпиляции всего кода и без нарушения существующих вызовов.
  • ООП-языки решают лишь половину: легко новый класс, трудно новый метод.
  • Функциональные языки наоборот: легко новая функция, трудно новый вариант данных.

Как Clojure объединяет лучшее

  1. Протоколы

    • Описывают набор методов без привязки к типу.
    • Реализуются для любого существующего класса поздно, «извне».
    • Компилируются в обычный Java-интерфейс, быстрый вызов.
  2. Мультиметоды

    • Выбор реализации по произвольной функции-диспетчеру (тип, значение, метаданные).
    • Позволяют «разрезать» иерархию по другим осям, не только по классу.
  3. Records и types

    • defrecord создает неизменяемую структуру с заранее известными полями и автоматическим доступом по ключам как к карте.
    • deftype даёт полный контроль, поля хранятся примитивно, без лишних обёрток.
  4. reify

    • «Анонимный класс» на Clojure: создаёт объект, реализующий нужные протоколы/интерфейсы, без отдельного файла.

Практический итог

  • Новый тип → defrecord/deftype + реализация нужных протоколов.
  • Новая операция → добавляем метод в протокол и реализуем для всех существующих типов.
  • Старый клиентский код не трогается, компиляция не требуется.

by adityaathalye • 07 сентября 2025 г. в 19:31 • 141 points

ОригиналHN

#clojure#functional-programming#object-oriented-programming#protocols#multimethods#datomic#selenium#immutability#jvm#repl

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

  • Протоколы в Clojure теперь умеют диспатчиться по метаданным, а не только по типу.
  • Участники скучают по временам, когда посты о продуктивности были про REPL, функциональность, композабельность и иммутабельность.
  • Поделились ссылкой на демонстрацию решения «expression problem» в Clojure.
  • Люди недооценивают готовые решения вроде Datomic и вместо этого пишут свои костыли.
  • Один из участников вспомнил, как в 2013–15 писал тесты на Clojure и расширял фреймворк для Selenium.

Poor man's bitemporal data system in SQLite and Clojure (evalapply.org)

Бюджетная битемпоральная система на SQLite + Clojure

Автор: Адитья Атхалье, 14–15 июля 2025
Цель: «бедняцкая» реализация половины битемпоральной СУБД, удовлетворяющая «десятому закону Хендерсона».


Идея

Смешать SQLite с идеями из бухгалтерии, Clojure, Datomic, XTDB, Rama и Local-First, чтобы хранить факты и время двух видов:

  • valid-time — когда событие произошло в реальности.
  • tx-time — когда мы это узнали и записали.

Мир фактов и времени

  • Сущность = полная история её жизни.
  • Факт может быть истинным или ложным; при столкновении фактов нужны правила приоритета.
  • Наблюдение ≠ реальность: база фиксирует не саму реальность, а наши заметки о ней.
  • Материализованная реальность зависит от того, кто спрашивает и «когда» он спрашивает.

Архитектура

  • Две маленькие VM: одна работает, вторая — резерв.
  • Дёшевые диски для хранилища временных данных.
  • Clojure: пространства имён и неизменяемость как главные инструменты.
  • Trade-off: сложно спроектировать, но легко строить, запускать, поддерживать и обучать.

Подход

  1. Храним каждое изменение как добавление нового факта (append-only).
  2. Используем SQLite как простой, надёжный движок.
  3. Через Clojure-обёртку реализуем:
    • вставку с двойной временной меткой;
    • «time-travel» запросы (as-of valid-time, as-of tx-time).
  4. Ограничиваемся минимальной сложностью на уровне всей системы.

Итог

Получили «половину» битемпоральной СУБД: медленную, сырую, но дешёвую, понятную и пригодную для локального использования.

by adityaathalye • 03 сентября 2025 г. в 17:47 • 149 points

ОригиналHN

#clojure#sqlite#bitemporal#datomic#xtdb#append-only#time-travel#postgresql#tstzrange#eav-model

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

  • XTDB и другие битемпоральные СУБД хвалят за возможность запросов «как было на дату X»; примеры из жизни — P&L за март по данным на 4 апреля.
  • Некоторые участники уже годами реализуют похожее вручную: PostgreSQL + tstzrange, append-only-логи, триггеры, EAV-модель.
  • Критика: Clojure-сообщество «герметично», а сама идея «fetch-as-of» кажется многим неинтересной.
  • В крупных аналитических СУБД (ClickHouse, DuckDB, BigQuery, Snowflake, Spanner) AsOf-джоины уже доступны «из коробки».
  • Автор блога пришёл к выводу: хранить всё как append-only-лог фактов и не плодить «две системы» (основная БД + аудит).