Hacker News Digest

Тег: #immutability

Постов: 3

Email immutability matters more in a world with AI (fastmail.com)

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

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

by brongondwana • 02 октября 2025 г. в 18:00 • 134 points

ОригиналHN

#email#dkim#gpg#llm#fastmail#privacy#immutability#authentication

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

  • Обсуждается ценность иммутабельности email в сравнении с другими формами коммуникации, где сообщения могут быть отредактированы или удалены.
  • Поднимаются вопросы о реальной неизменности email, включая возможность модификации на стороне провайдера и использование динамического контента в HTML-письмах.
  • Участники делятся техническими решениями для обеспечения подлинности и неизменности писем, такими как DKIM, GPG-подписи и локальное архивирование.
  • Высказываются опасения по поводу использования AI провайдерами, включая Fastmail, и сильное желание сохранить традиционный email-сервис без AI-функций.
  • Обсуждается роль AI в создании и распространении misinformation, а также потенциальные технические решения для аутентификации цифрового контента.

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.

I'm working on implementing a programming language all my own (eli.li)

Я пишу свой язык Baba Yaga — чисто из любви к эстетике кода. Рабочий интерпретатор есть, но полноценной среды пока нет; планирую браузерный «бесконечный холст» в духе Smalltalk.

Язык — эксперимент ради удовольствия: неизменяемость, функциональный стиль, минимальный синтаксис, базовые «батарейки». Это Toki Pona для Haskell.

Синтаксис и типы

Объявления переменных и функций одинаковы; скобки не нужны, каррирование бесплатно.

transport : "Chicken House"
add : x y -> x + y
add5 : add 5

Базовые неизменяемые типы: Int, Float, String, Bool, List, Table.

numbers : [1, 2, 3]
person : {name: "Lucy", age: 23}

Типы можно указать явно; без аннотаций всё проверяется только во время вызова.

Управление потоком

Единственный способ — when (pattern matching). Нет if/else или switch.

describe : x ->
  when x is
    0 then "Zero"
    _ then "Something else"

processUser : user ->
  when user is
    {name: n, age: a, active: true} -> "Adult: " .. n
    _ -> "Unknown"

Пример: жизнь Конвея уже работает.

by ingve • 27 августа 2025 г. в 16:24 • 77 points

ОригиналHN

#programming-languages#haskell#functional-programming#immutability#pattern-matching#currying#smalltalk

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

  • Участники делятся опытом создания языков: @codr7 показал фреймворк Shi, @aldousd666 рассказал о своих интерпретаторах, начавшихся в 2006-м.
  • Разгорелся спор о синтаксисе: одни хвалят «:» для присваивания, другие защищают «=» как уже устоявшийся символ.
  • Кто-то предлагает отказаться от точек с запятой, кто-то считает их полезным разделителем.
  • Обсуждаются математические корни обозначений: одни считают «=» сравнением, другие — утверждением.
  • Предлагаются альтернативы: «:=», «<-», «=>», а также идея вызывать функции в порядке чтения.