1.83K subscribers
3.3K photos
132 videos
15 files
3.58K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Извините, сейчас будет сложный прикол по #haskell
Forwarded from Julia Lang
[a, b, c, d, e, f ..] ⇔ map read $ unsafePerformIO $ httpRequest $ “https://oeis.org/search?q=“ ++ (intercalate “,” $ map show [a, b, c, d, e, f])
#prog #rust #rustasync #article

Новая статья Амоса о пристальном взгляде на async в Rust. Чисто с точки зрения человека, который впервые с этим столкнулся, без сильного погружения в тонкости реализации async

(thanks @tapok_satan)
#prog #rust #rustlib

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

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

К счастью, для сокращения бойлерплейта в Rust есть макросы! И есть библиотека, которая фактически привносит список захвата для лямбд: https://lib.rs/crates/closure
Forwarded from <илья as Человек>
я не мог вспомнить его имя, но смог вспомнить эту деталь. хорошая работа, твиттер
#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)
У кое-кого сегодня день рождения 👀
Forwarded from oleg_log (Oleg Kovalov)
Forwarded from Typesafe & Sound
Когда читаешь комменты в коде
Сначала всё было плохо.

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

Зато на расте.
🤡2
(thanks @ilyavenner)
Блог*
Ради чего вы подписаны на канал?
Прошу новоприбывших проголосовать
Блог* pinned «Прошу новоприбывших проголосовать»
#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)