1.93K subscribers
3.57K photos
136 videos
15 files
3.79K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
4:19

Зачем MAX при открытии отправляет запрос к серверу Телеграма?
https://qna.habr.com/q/1408720

4:20
🤣32😁62🤔2👍1
#prog #rust #article

В стандартной библиотеке Rust есть несколько ассоциативных контейнеров: HashMap, HashSet, BTreeMap и BTreeSet. Часто на практике в качестве ключей в них хранятся строки — String. Требовать от пользователя для поиска значение типа String неудобно и чревато проблемами в производительности. Потому у этих структур данных есть API, позволяющие использовать для поиска ключи других, "похожие" на те, что хранятся в контейнере.

Возьмём в качестве примера HashMap::get:

fn get<Q>(&self, k: &Q) -> Option<&V>
where
K: Borrow<Q>,
Q: Hash + Eq + ?Sized,


Как видно из кода, тип для поиска (Q) не обязан совпадать с типом хранимых ключей (K), но на K есть ограничение K: Borrow<Q>. Трейт Borrow выглядит таким образом:

trait Borrow<Borrowed>
where
Borrowed: ?Sized,
{
fn borrow(&self) -> &Borrowed;
}


В процессе поиска значения на хранимых ключах вызывается метод <K as Borrow<Q>>::borrow, и результат возвращаемого значения сравнивается со значением, переданным в get. Именно благодаря этому API (и реализациям в std, разумеется) коллекцию HashMap<String, Thing> можно индексировать значениями типа &str.

Но у этого API есть недостаток. Именно, оно требует, чтобы предоставляемое значение было ссылкой и чтобы из ссылки на ключ можно было получить ссылку на Q. Это ограничивает применимость API. Если, например, в мапе в качестве ключей хранятся (String, String), то логичный невладеющий эквивалент для индексации (&str, &str) не будет работать, потому что это кортеж ссылок, а не ссылка.

В короткой статье Borrowed tuple indexing for HashMap рассказывается, как с некоторым количеством бойлерплейта можно обойти это ограничение.

Для сравнения, hashbrown (поверх которого сделаны мапы в std) от подобных ограничений не страдает, поскольку там в API используется более гибкий трейт Equivalent:

trait Equivalent<K>
where
K: ?Sized,
{
fn equivalent(&self, key: &K) -> bool;
}
👍10🤯3🤡1
#meme про котов
14🤔4🖕2😁1💯1😭1
Блог*
HashMap<String, Thing> можно индексировать значениями типа &str.
BTW это было в Rust std с самой первой версии, то есть с середины 2015 года. В #cpp подобная вещь называется heterogeneous lookup, и хотя она реализована для контейнеров в std, она opt-in. Для упорядоченных контейнеров нужно явно дописывать std::less<> в шаблонные параметры типа, а для неупорядоченных вообще надо самостоятельно писать хешер и явно дописывать is_transparent в определении. Вдобавок heterogeneous lookup на упорядоченных контейнерах был с C++14, а вот на неупорядоченных его не было до выхода C++20 — то есть на четыре года позже, чем в Rust.
👍7
Forwarded from Neural Machine
Я боюсь программировать, я могу заплакать.
🤝223🔥1
Forwarded from AlexTCH
Microsoft C/C++ compilation toolchain is quite literally FUBAR for ages. People have written hundreds lines long scripts to simply try to locate all the necessary executables and libraries. Alas, anything short of full filesystem search breaks at one point or the other.

Luckily, Jonathan Marler recently managed to develop a single-file versioned (sic!) installation manager akin to nvm, uv and similar:
https://marler8997.github.io/blog/fixed-windows/
8🤣1
😁20❤‍🔥1
😁13🤯9🍌3💯1
❤‍🔥13😁122👏1🤨1
#prog #rust #article

Making cargo-semver-checks faster - Google Summer of Code 2025

Overall, I reduced the typical runtime on very large crates down to ~2s from ~8s - nearly an 80% speedup - without compromising performance on smaller crates. Along the way I reduced test time from ~7min to ~1min.
6
Такое комментировать - только портить

Создатель средств блокировки Рунета мигрирует с российского ПО на устаревший Microsoft Exchange 2019
https://www.cnews.ru/news/top/2026-02-18_sozdatel_runeta_migriruet

Занимающееся созданием суверенного Рунета «РДП Энтерпрайз», принадлежащее структурам «Ростелекома», ищет подрядчика для переноса электронных почтовых ящиков с российского программного обеспечения на Microsoft Exchange 2019. В компании объяснили планы экономической целесообразностью. Эксперты считают, что таким образом разработчик избавится от необходимости дополнительного найма специалистов высокой квалификации. При этом во ФСТЭК уже предупредили, что Microsoft Exchange 2019 интересен хакерам.
. . .
«Выбор Microsoft Exchange Server обусловлен экономической целесообразностью: платформа уже интегрирована с отделенной ИТ-инфраструктурой и не требует дополнительных затрат на миграцию, переобучение и переделку интеграций. Альтернативные решения приведут к росту совокупной стоимости владения и операционных рисков. Для коммерческой компании приоритетом является финансовая эффективность и непрерывность бизнес-процессов», — пояснили CNews в пресс-службе «Ростелекома», комментируя ситуацию в RDP E. Более подробного ответа в «Ростелекоме» не предоставили.


Ссылка на площадку

Закупка выполнения работ по развертыванию миграции Exchange и KSMG
https://bidzaar.com/process/light/019c5734-238e-7220-9331-af9c9c1ef65c
😁23👌3🌚1
#meme про плен обстоятельств
😭8😁4🌚3
Блог*
💅
💅
1🎉1🤡11
Блог*
💅
Если вы находитесь в Ереване — можете записаться на маникюр к @Nishadrina, у которой я последние покрытий десять и делал. Прекрасный мастер, очень качественно работает, нарадоваться не могу
😍19🔥55❤‍🔥3🤡3🥰2