Size: a a a

2021 March 28
Блог*
#prog #rust

Замыкания в Rust могут работать в двух режимах: без ключевого слова move они захватывают значения по ссылке (разделяемой или уникальной — в зависимости от использования), а с ключевым словом move они захватывают все значения по значению. Как правило, этого достаточно, но иногда требуется часть значений захватить по значению, а часть — по ссылке.

В C++ у лямбда-функций есть отдельные списки захвата переменных, поэтому там эта задача решается достаточно просто. Синтаксис Rust не предлагает прямолинейного способа решения этой проблемы. Единственный вариант — это вручную ввести новые привязки к ссылкам на нужные значения и "передать" их в move-замыкание. Это вариант рабочий, но утомительный.

К счастью, для сокращения бойлерплейта в Rust есть макросы! И есть библиотека, которая фактически привносит список захвата для лямбд: https://lib.rs/crates/closure
источник
2021 March 29
Блог*
я не мог вспомнить его имя, но смог вспомнить эту деталь. хорошая работа, твиттер
источник
Блог*
#prog

Данила рассказывает, почему при написании SIMD-кода имеет смысл держать версии не только на AVX, но и на SSE.

t.me/experimentalchill/87
Telegram
Experimental chill
Когда я оптимизировал многие вещи с помощью SIMD инструкций, всегда вставал вопрос о том, почему версии с AVX (как SSE, только операции с регистрами по 256 бит вместо 128) не так уж и классно работают. Тогда я узнал о такой вещи, как CPU downclocking: процессоры начинают понижать свою частоту при "сложных" (или как говорят в английских гайдлайнах, "heavy") инструкций, например FMA инструкции, которые умеют делать c += a * b для векторов по 8-16 чисeл с плавающей точкой одновременно, что можно использовать в dot product алгоритмах. Первые процессоры с AVX вообще понижали частоту даже при лёгких инструкциях. Доходило до смешного — на микробенчмарках я получал +25-30% ускорения, в проде всего 7-10% или вообще в минус, расстраивался, конечно, что не так хорошо и классно получалось.

Когда вышел AVX-512, ситуация была ещё хуже, понижение частоты было совсем грустным, например, см. картинку на stackoverflow.

Со временем процессоры развивались и вот Ice Lake и Rocket Lake семейства у Intel уже хорошо работают с 256…
источник
2021 March 30
Блог*
#prog #amazingopensource

autoperf simplifies the instrumentation of programs with performance counters on Intel machines. Rather than trying to learn how to measure every event and manually programming event values in counter registers or perf, you can use autoperf which will repeatedly run your program until it has measured every single performance event on your machine. autoperf tries to compute a schedule that maximizes the amount of events measured per run, and minimizes the total number of runs while avoiding multiplexing of events on counters.

(thanks @folexeyy)
источник
2021 March 31
Блог*
У кое-кого сегодня день рождения 👀
источник
Блог*
#prog #rust #meme
источник
Блог*
источник
Блог*
#prog #meme
источник
Блог*
Когда читаешь комменты в коде
источник
Блог*
Сначала всё было плохо.

Потом пришли растоманы и сделали ещё хуже.

Зато на расте.
источник
2021 April 01
Блог*
источник
Блог*
(thanks @ilyavenner)
источник
Блог*
источник
Блог*
dereference_pointer_there
Ради чего вы подписаны на канал?
Анонимный опрос
15%
Мемы
23%
Типострадания на расте
22%
Разбор теоретических концепций (вроде аффинных типов)
16%
Ссылки на (научно-) популярные статьи
18%
Ссылки на статьи по CS
4%
Рекомендации видеоигр
2%
Другое (в @decltype_chat_ptr_t)
Проголосовало: 853
Прошу новоприбывших проголосовать
источник
2021 April 02
Блог*
#prog #rust #article

Очень хорошая демонстрация пользы от type-level наворотов.

The Rust language offers a promising approach to safe systems programming based on the principle of aliasing XOR mutability: a value may be either aliased or mutable, but not both at the same time. However, to implement pointer-based data structures with internal sharing, such as graphs or doubly-linked lists, we need to be able to mutate aliased state. To support such data structures, Rust provides a number of APIs that offer so-called interior mutability: the ability to mutate data via method calls on a shared reference. Unfortunately, the existing APIs sacrifice flexibility, concurrent access, and/or performance, in exchange for safety.

In this paper, we propose a new Rust API called GhostCell which avoids such sacrifices by separating permissions from data: it enables the user to safely synchronize access to a collection of data via a single permission. GhostCell repurposes an old trick from typed functional programming: branded types (as exemplified by Haskell's ST monad), which combine phantom types and rank-2 polymorphism to simulate a lightweight form of state-dependent types. We have formally proven the soundness of GhostCell by adapting and extending RustBelt, a semantic soundness proof for a representative subset of Rust, mechanized in Coq.

plv.mpi-sws.org/rustbelt/ghostcell

(thanks @dogeshibu)
источник
Блог*
#prog #bio #meme
источник
Блог*
источник
Блог*
"Как Тоха, так сразу"
источник
2021 April 03
Блог*
Всем советую, отлично работает
источник
Блог*
Палю лайфхак
источник