Size: a a a

2021 November 10
Блог*
#prog

libphonenumber — библиотека для парсинга и форматирования телефонных номеров. Почему это необходимо? Ну, потому что телефонные номера — запутанная вещь.
источник
Блог*
Я уволился.
источник
2021 November 11
Блог*
источник
Блог*
#prog #article

Статья о PubGrub — алгоритме разрешения ограничений, который используется в pub — пакетном менеджере для Dart — для выбора версий зависимостей.

Во главе алгоритма лежит идея несовместимостей (incompatibilities) — набор ограничений на версии, которые не могут быть удовлетворены все одновременно. Замечательной особенностью несовместимостей является то, что они являются фактами конкретного набора ограничений: неважно, какие именно версии будут выбраны в процессе разрешения зависимостей, они не могут инвалидировать уже обнаруженные несовместимости.

Алгоритм состоит из двух частей: unit propagation и decision making (нет, я не смог придумать перевода, который бы звучал не коряво). Unit propagation анализирует несовместимости и выводит конкретные факты (то бишь ограничение на версии), которые должны быть справедливы при текущем выборе версий. Так как эти факты зависят от принятых решений, в базу знаний они добавляются не напрямую, а в виде несовместимостей. Эта фаза продолжается до тех пор, пока получение новых фактов возможно.

Вторая фаза, decision making, вступает в силу, если unit propagation закончил работу, но в отношении конкретных выбранных версий ещё осталась неопределённость. Алгоритм пробует одну из возможных альтернатив для выбора версии и пытается вывести версии, исходя из этого решения. Важным тут является то, что когда выбор альтернативы приводит к конфликту ограничений, этот факт записывается в базу знаний в виде несовместимости. Это позволяет не терять полученную информацию и и использовать её при выборе альтернатив, существенно снижая список альтернатив для проб за счёт пропуска диапазонов версий, которые заведомо не приведут к решению.

Так как несовместимости могут выводиться из других несовместимостей, их набор представляет собой не просто множество, а направленный ациклический граф (DAG), где направленные рёбра являются логической импликацией. Само по себе это не влияет на работу алгоритма, но позволяет серьёзно улучшить диагностику для случаев, когда набор ограничений на версии несовместим: вместо того, чтобы просто сказать "я не могу, у меня лапки", PubGrub показывает пошаговое объяснение, почему выбрать удовлетворяющий ограничениям набор версий зависимостей не удалось.

P. S.: не смотря на мои объяснения, советую прочитать оригинальную статью: мало того, что я мог понять что-то неправильно, так ещё и там работа алгоритма демонстрируется на наглядном конкретном примере.
источник
2021 November 12
Блог*
#prog #meme
Я старый(
источник
Блог*
источник
2021 November 13
Блог*
#prog #rust #article
источник
Блог*
rustc известен своей медлительностью, но есть ли улучшения в этом плане?

TL;DR: The Rust compiler has gotten faster again
источник
Блог*
#prog #typescript #article
источник
Блог*
Новая статья — о простом тайп-левел представлении UUID:
https://ybogomolov.me/type-level-uuid
источник
Блог*
Решаю повторить на расте
@
Начинаю расписывать через const generics
@
Понимаю, что стейбл слишком немощный, и подрубаю nightly с #![feature(const_adt_params, generic_const_exprs)]
@
ВНЕЗАПНО ICE (internal compiler error)
@
Минифицирую
@
ВНЕЗАПНО ICE-ится и на стейбле, не смотря на использование фичей
@
Заполняю issue
@
Попутно, проверяя, не дубликат ли это, нахожу вот это issue, открытое несколько часов назад
@
"Привет, у нас тут можно, оказывается, написать Drop с более сильными ограничениями на тип, чем в объявлении, что позволяет промоутить произвольный тип до 'static, что может привести к use after free, кстати, вот пример для воспроизведения"
@
Лейбл: regression-from-stable-to-stable
@
Как страшно жить
источник
Блог*
источник
Блог*
#prog #rust

Тут подписчик сделал compile-time валидацию UUID.

(thanks @Kolsky)
источник
2021 November 14
Блог*
TIL в postgres можно накатывать ограничения только для новых записей

ALTER TABLE orders 
   ADD CONSTRAINT check_price_gt_zero
       CHECK (price >= 0) NOT VALID;

Вот это вот NOT VALID говорид постгре "падажжи, не проверяй старые записи, а вот новые валидируй"

https://hakibenita.com/postgresql-unknown-features#add-constraints-without-validating-immediately
источник
Блог*
Вафелька подсказал, что страшное issue закрыли
источник
2021 November 15
Блог*
#soc #article

Срачегонная статья на тему ситуации с зарплатами в России
источник
Блог*
#rust

Оаоаоаоаоа, наконец-то!
источник
2021 November 16
Блог*
И даже своё лицо начало себе нравиться. Удивительно.
источник
Блог*
#prog #rust #article

У serde не самая интуитивная архитектура. В данной паре статей автор попытался показать её на примере. В первой статье автор разбирает код для десериализации, сгенерированный derive для простого примера. Во второй статье автор показывает, как самостоятельно написать десериализатор для простого формата.
источник
Блог*
источник