Dependent types and how to get rid of them
Зависимые типы позволяют создавать более точные типы, которые могут зависеть от значений, но их обработка компиляторами различается. В отличие от обычных типов, которые полностью стираются во время компиляции, зависимые типы могут частично сохраняться в исполняемом коде. Это влияет на производительность и возможности оптимизации.
Исследования показывают, что некоторые языки с зависимыми типами, такие как Idris, сохраняют часть информации о типах во время выполнения. Это позволяет выполнять проверки типов во время выполнения, открывая новые возможности для метапрограммирования и рефлексии. Однако такая сохранение типов увеличивает размер исполняемых файлов и может снижать производительность.
Комментарии (60)
- Обсуждение показало, что зависимые типы (dependent types) — это не только академическая концепция, но и практически применимы в языках вроде Zig и TypeScript, хотя с ограничениями.
- Участники обсуждали, что в TypeScript условные типы и в Zig
comptimeдемонстрируют схожие с зависимыми типами идеи, но не покрывают полный спектр возможностей зависимых типов. - Были подняты вопросы о том, что такое "зависимые типы" и как они отличаются от обычных обобщённых типов, с упором на то, что в большинстве языков нет полной поддержки зависимых типов.
- Обсуждались примеры, где тип возвращаемого значения может зависеть от входного значения, и как это может быть реализовано в разных языках.
- Также обсуждались границы между статическим и динамическим анализом типов, и как они влияют на возможность компилятора вычислять и оптимизировать код.
The Socratic Journal Method: A Simple Journaling Method That Works
Сократов дневник: 3 вопроса — 1 страница
-
Какой главный вопрос я себе задаю?
Пишем его сверху. -
Что отвечаю без цензуры?
5–7 коротких строк. -
Какой вывод или следующий вопрос возник?
1 предложение.
Пример
Q: Что съедает энергию?
A: Прокручиваю вчерашний разговор.
→ След. вопрос: Зачем мне это повторять?
Правила
- Таймер 3 мин.
- Любой носитель: бумага, телефон, голос.
- Пропустил день — начни с вопроса «Почему?»
Польза
Снижает тревогу, включает метапозицию, формирует привычку за 30 секунд в день.
Комментарии (74)
- Пользователи делятся опытом: кто-то пишет свободно, кто-то по шаблону, кто-то вообще не ведёт дневник.
- Ключевой спор: структурированное «сократовское» ведение полезно или превращается в чрезмерную метарефлексию, усиливающую тревожность.
- Автор признаёт риск руминации и благодарит за критику, обещая балансировать глубину с добротой к себе.
- Техника: задать себе вопросы, которые «хотел бы задать добрый собеседник», а потом отвечать письменно; медленность письма помогает уплотнить мысли.
- Формат: бумага = хронология и тактильность, цифра = поиск и резервные копии; аудио быстро, но трудно перечитывать.
A new experimental Go API for JSON
Новый экспериментальный 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.
Комментарии (82)
- Вышел экспериментальный
encoding/json v2: новый API, лучшая производительность, но спорные решения по nil-значениям. - Часть пользователей рада росту скорости и модульному пакету
jsontext; другие считают, что костыли сnil → nullостались. - Кто-то уже прогнал тысячи тестов — почти всё прошло; кто-то нашёл регрессию аллокаций. Авторы просят больше отзывов.
- Сравнения со сторонними библиотеками (Sonic, goccy) показывают выигрыш в CPU, но проигрыш в безопасности и поддержке ARM.
- Обсуждение выродилось в холивар: «почему за 15 лет JSON до сих пор не решён» vs «две v2 за всю историю — отличный результат».
Комментарии (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