Forwarded from мне не нравится реальность
TL;DR того, что случилось за 3 часа стрима:
— Кратко рассказал о том, что было на предыдущем стриме
— Написал небольшой типчик
— Переписал крейт с использования
— Написал метод
— Придумал как правильно и просто написать проверки корнер кейсов в
Итоговая реализация
— Кратко рассказал о том, что было на предыдущем стриме
— Написал небольшой типчик
Mrc<_>
, который по сути немного-более-безопасный указатель— Переписал крейт с использования
StaticRc
, на Mrc
— Попытался написать {l,r}get_mut
, понял что для BiHashMap
такие методы не имеют смысла, разочаровался в жизни и впал в уныние— Написал метод
lreplace
— Неудачно попытался добавить проверки корнер кейсов в insert
— Долго пытался исправить проверки и избавиться от UB— Придумал как правильно и просто написать проверки корнер кейсов в
insert
(оказалось почти совсем просто)Итоговая реализация
insert
греет мне душу :)#prog #python #rust #article
Статья про оптимизацию одной симуляции. Несмотря на (очевидное) переписывание на расте, автор смог добиться четырёхкратного ускорения исключительно за счёт правок в коде на питоне.
Статья про оптимизацию одной симуляции. Несмотря на (очевидное) переписывание на расте, автор смог добиться четырёхкратного ускорения исключительно за счёт правок в коде на питоне.
Tinkering
Optimization story - quantum mechanics simulation speedup
As part of my PhD I do computational modeling of quantum-biological systems. One of my simulations was misbehaving and in certain cases could take 8 hours to complete. That's really bad when you're trying to iterate quickly. This post describes how I made…
👍3
#prog #rust #rustlib
document-features — макрос для генерирования документации по фичам крейта. Фактически реализует док-комментарии для фич в Cargo.toml:
document-features — макрос для генерирования документации по фичам крейта. Фактически реализует док-комментарии для фич в Cargo.toml:
[dependencies]
document-features = "0.1"
## ...
[features]
## The foo feature enables the `foo` functions
foo = []
## The bar feature enables the [`bar`] module
bar = []
#! ### Experimental features
#! The following features are experimental
## Activate the fusion reactor
fusion = []
...И всё это в итоге преобразовывается макросом document_features::document_features!
в строку, которую можно вставить в #[doc]
using map = std::unordered_map<std::remove_reference_t<decltype(nums)>::value_type, int>;
Не давайте растистам (мне) писать код на C++.
#prog
Данила рассказывает, когда read-write lock может быть хуже обычного mutex в, казалось, идеально подходящем под read-write lock сценарии, и что с этим делать
Данила рассказывает, когда read-write lock может быть хуже обычного mutex в, казалось, идеально подходящем под read-write lock сценарии, и что с этим делать
Telegram
Experimental chill
Локи на чтение [1/2]
Я видел десятки, а то и сотни раз, как люди используют ReaderMutexLock или std::shared_mutex/std::shared_lock на секции, которые только читают данные.
void Set(std::string value) {
// Writer lock.
std::unique_lock lock(mutex_);…
Я видел десятки, а то и сотни раз, как люди используют ReaderMutexLock или std::shared_mutex/std::shared_lock на секции, которые только читают данные.
void Set(std::string value) {
// Writer lock.
std::unique_lock lock(mutex_);…
👍2
#prog #rust
Вафель рассказывает про макрос
Вафель рассказывает про макрос
pin!
, добавленный в std совсем недавно, и про то, чем он отличается от аналогичных макросов из tokio и futuresTelegram
Мне не нравится реальность
В std добавили (PR смерджен 2 часа назад, будет в следующем найтли) pin! макрос!
tl;dr он позволяет делать так:
let foo: Pin<&mut PhantomPinned> = pin!(PhantomPinned);
stuff(foo);
Он работает аналогично tokio::pin! или futures::pin_mut! — припинивает значение…
tl;dr он позволяет делать так:
let foo: Pin<&mut PhantomPinned> = pin!(PhantomPinned);
stuff(foo);
Он работает аналогично tokio::pin! или futures::pin_mut! — припинивает значение…
👍5
Forwarded from мне не нравится реальность
cursed-fact-of-the-day: бинарный поиск по массиву из 2^20 элементов примерно на 20% медленнее, чем бинарный поиск по массиву из 2^20 + 123 элементов.
Причина: https://en.algorithmica.org/hpc/cpu-cache/associativity/
Источник: twitter@sergey_slotin
Причина: https://en.algorithmica.org/hpc/cpu-cache/associativity/
Источник: twitter@sergey_slotin
👎1
Forwarded from Санечка Ъысь (Anna Weiss)
This media is not supported in your browser
VIEW IN TELEGRAM
👍8👎4🤔2
The mermaid is taking over Google search in Norway — неизвестный спамер создал сайт, который вылезает в поисковой выдаче Google в Норвегии по практически любому запросу
ALEXSKRA
The mermaid is taking over Google search in Norway - ALEXSKRA
A weird thing is going on with Google search in Norway right now. Spammers are taking over.
Так, чтобы решить возможные споры раз и навсегда, предлагаю вашему вниманию следующий вопрос:
Вафель классный?
Вафель классный?
Anonymous Poll
24%
Да
4%
Конечно
8%
Разумеется
4%
Ещё бы
7%
Безусловно
8%
Несомненно
46%
Нет/Я Вафель
Первый элемент односвязного списка и последующий список обычно называют head и tail. Если вам по каким-то причинам потребовалось делить список на первый элемент, второй элемент и остаток, предлагаю второй элемент называть neck
👍16😁4
Forwarded from мне не нравится реальность
В старых версиях раста для работы с коллизиями в хэшмапах использовалось линейная зондирование (???, linear probing), а сиды переиспользовались. ~5 лет назад было обнаружено что это приводит к (неожиданно) квадратичному поведению.
Вот отличный writeup на эту тему: Accidentally Quadratic: Rust hash iteration+reinsertion
Эта проблема была позже разрешена тем, что хэшмапы по умолчанию используют случайный сид для хэшера, что делает порядки элементов в разных хэшмапах независимыми.
Так-же hashbrown, библиотека которую использует std, после редизайна использует ~квадротичное зондирование, что тоже помогает с этим.
Если интересно как редезайнули hashbrown (SwissTable), то можно прочитать вот тут: https://gankra.github.io/blah/hashbrown-tldr/
Цитируя авторку статьи:
> it was such an improvement that it reduced compile times for basically every rust program by ~10% (rustc is just several HashMaps in a trenchcoat)
Вот отличный writeup на эту тему: Accidentally Quadratic: Rust hash iteration+reinsertion
Эта проблема была позже разрешена тем, что хэшмапы по умолчанию используют случайный сид для хэшера, что делает порядки элементов в разных хэшмапах независимыми.
Так-же hashbrown, библиотека которую использует std, после редизайна использует ~квадротичное зондирование, что тоже помогает с этим.
Если интересно как редезайнули hashbrown (SwissTable), то можно прочитать вот тут: https://gankra.github.io/blah/hashbrown-tldr/
Цитируя авторку статьи:
> it was such an improvement that it reduced compile times for basically every rust program by ~10% (rustc is just several HashMaps in a trenchcoat)
Tumblr
Post by @accidentallyquadratic · 2 images
💬 1 🔁 45 ❤️ 95 · Rust hash iteration+reinsertion · It was recently discovered that some surprising operations on Rust’s standard hash table types could go quadratic.
Perhaps the simplest illustr…
Perhaps the simplest illustr…
👍2
Forwarded from Технологический Болт Генона
> The first erroneous computation example is CVE-2021-39137 which is an interesting go-ethereum bug identified by Guido Vranken. The bug caused a netsplit in the Ethereum network and essentially results from the ability to have a mutable and non-mutable slice referencing the same chunk of memory.
A deeper dive into CVE-2021-39137 – a Golang security bug that Rust would have prevented
https://research.nccgroup.com/2022/02/07/a-deeper-dive-into-cve-2021-39137-a-golang-security-bug-that-rust-would-have-prevented/
И что б два раза не вставать. Интересный пост
> On 2/2/2022, I reported a critical security issue to Optimism—an "L2 scaling solution" for Ethereum—that would allow an attacker to replicate money on any chain using their "OVM 2.0" fork of go-ethereum (which they call l2geth).
Attacking an Ethereum L2 with Unbridled Optimism
https://www.saurik.com/optimism.html
A deeper dive into CVE-2021-39137 – a Golang security bug that Rust would have prevented
https://research.nccgroup.com/2022/02/07/a-deeper-dive-into-cve-2021-39137-a-golang-security-bug-that-rust-would-have-prevented/
И что б два раза не вставать. Интересный пост
> On 2/2/2022, I reported a critical security issue to Optimism—an "L2 scaling solution" for Ethereum—that would allow an attacker to replicate money on any chain using their "OVM 2.0" fork of go-ethereum (which they call l2geth).
Attacking an Ethereum L2 with Unbridled Optimism
https://www.saurik.com/optimism.html
Nccgroup
Cyber Security Research
Cutting-edge cyber security research from NCC Group. Find public reports, technical advisories, analyses, & other novel insights from our global experts.
🤯2
Блог*
#prog #article Заметка о неожиданном взаимодействии fork и kill.
#prog #c #article
Статья о том, как правильно использовать этот ваш fork (спойлер: СЛОЖНО)
habr.com/ru/post/586604/
Статья о том, как правильно использовать этот ваш fork (спойлер: СЛОЖНО)
habr.com/ru/post/586604/
❤9