Hacker News Digest

Тег: #reflection

Постов: 4

Dependent types and how to get rid of them (chadnauseam.com)

Зависимые типы позволяют создавать более точные типы, которые могут зависеть от значений, но их обработка компиляторами различается. В отличие от обычных типов, которые полностью стираются во время компиляции, зависимые типы могут частично сохраняться в исполняемом коде. Это влияет на производительность и возможности оптимизации.

Исследования показывают, что некоторые языки с зависимыми типами, такие как Idris, сохраняют часть информации о типах во время выполнения. Это позволяет выполнять проверки типов во время выполнения, открывая новые возможности для метапрограммирования и рефлексии. Однако такая сохранение типов увеличивает размер исполняемых файлов и может снижать производительность.

by pie_flavor • 03 ноября 2025 г. в 17:49 • 111 points

ОригиналHN

#dependent-types#idris#zig#typescript#type-checking#metaprogramming#reflection#static-typing#dynamic-typing

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

  • Обсуждение показало, что зависимые типы (dependent types) — это не только академическая концепция, но и практически применимы в языках вроде Zig и TypeScript, хотя с ограничениями.
  • Участники обсуждали, что в TypeScript условные типы и в Zig comptime демонстрируют схожие с зависимыми типами идеи, но не покрывают полный спектр возможностей зависимых типов.
  • Были подняты вопросы о том, что такое "зависимые типы" и как они отличаются от обычных обобщённых типов, с упором на то, что в большинстве языков нет полной поддержки зависимых типов.
  • Обсуждались примеры, где тип возвращаемого значения может зависеть от входного значения, и как это может быть реализовано в разных языках.
  • Также обсуждались границы между статическим и динамическим анализом типов, и как они влияют на возможность компилятора вычислять и оптимизировать код.

The Socratic Journal Method: A Simple Journaling Method That Works (mindthenerd.com)

Сократов дневник: 3 вопроса — 1 страница

  1. Какой главный вопрос я себе задаю?
    Пишем его сверху.

  2. Что отвечаю без цензуры?
    5–7 коротких строк.

  3. Какой вывод или следующий вопрос возник?
    1 предложение.

Пример
Q: Что съедает энергию?
A: Прокручиваю вчерашний разговор.
→ След. вопрос: Зачем мне это повторять?

Правила

  • Таймер 3 мин.
  • Любой носитель: бумага, телефон, голос.
  • Пропустил день — начни с вопроса «Почему?»

Польза
Снижает тревогу, включает метапозицию, формирует привычку за 30 секунд в день.

by surprisetalk • 10 сентября 2025 г. в 14:03 • 180 points

ОригиналHN

#journaling#reflection#self-improvement#productivity

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

  • Пользователи делятся опытом: кто-то пишет свободно, кто-то по шаблону, кто-то вообще не ведёт дневник.
  • Ключевой спор: структурированное «сократовское» ведение полезно или превращается в чрезмерную метарефлексию, усиливающую тревожность.
  • Автор признаёт риск руминации и благодарит за критику, обещая балансировать глубину с добротой к себе.
  • Техника: задать себе вопросы, которые «хотел бы задать добрый собеседник», а потом отвечать письменно; медленность письма помогает уплотнить мысли.
  • Формат: бумага = хронология и тактильность, цифра = поиск и резервные копии; аудио быстро, но трудно перечитывать.

A new experimental Go API for JSON (go.dev)

Новый экспериментальный JSON-API в Go

Go 1.25 предлагает encoding/json/v2 и encoding/json/jsontext — переработанные пакеты для работы с JSON. Они решают давние проблемы стандартного encoding/json и пока доступны только по флагу GOEXPERIMENT=jsonv2.

Главные недостатки старого API

  • Неточности синтаксиса: принимает невалидный UTF-8, дублирует ключи, трактует числа как float64.
  • Производительность: 2-3× медленнее современных альтернатив; каждый вызов тратит память на рефлексию.
  • Гибкость: нельзя пропустить неизвестные поля, работать с потоковым JSON, получать исходный текст, сохранять порядок ключей, использовать сторонние типы.

Что нового в v2

  • Три пакета
    jsontext — низкоуровневое чтение/запись токенов, сохраняет формат.
    json — высокоуровневый marshal/unmarshal, совместим с v1, но строже и быстрее.
    jsontext можно использовать отдельно для потоковой обработки.

  • Строгость
    UTF-8 проверяется, дубли ключей — ошибка, числа не теряют точность.

  • Производительность
    Без рефлексии в hot-path, 2-3× быстрее, меньше аллокаций.

  • Новые возможности
    Пропуск неизвестных полей, сохранение порядка, работа с any, доступ к сырому JSON, совместимость с v1 через теги.

Как попробовать

GOEXPERIMENT=jsonv2 go mod download
import "encoding/json/v2"

Фидбек приветствуется: golang.org/issue/71497.

by darccio • 09 сентября 2025 г. в 14:54 • 243 points

ОригиналHN

#go#json#utf-8#performance#encoding#api#reflection

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

  • Вышел экспериментальный encoding/json v2: новый API, лучшая производительность, но спорные решения по nil-значениям.
  • Часть пользователей рада росту скорости и модульному пакету jsontext; другие считают, что костыли с nil → null остались.
  • Кто-то уже прогнал тысячи тестов — почти всё прошло; кто-то нашёл регрессию аллокаций. Авторы просят больше отзывов.
  • Сравнения со сторонними библиотеками (Sonic, goccy) показывают выигрыш в CPU, но проигрыш в безопасности и поддержке ARM.
  • Обсуждение выродилось в холивар: «почему за 15 лет JSON до сих пор не решён» vs «две v2 за всю историю — отличный результат».

C++26 Reflections adventures and compile-time UML (reachablecode.com)

by ibobev • 03 августа 2025 г. в 00:12 • 139 points

ОригиналHN

#c++#reflection#uml#metaprogramming#cpp

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

Whenever I start to feel like a real programmer making games and webapps and AI-enhanced ETL pipelines, I inevitably come across the blog post of a C++ expert and reminded that I am basically playing with legos and play-doh. I had to do a UML thing for the first time in years for