#prog #rust #article
Enter paradis — A new chapter in Rust's parallelism story
Из-за правил относительно тупого borrow checker работать в Rust с разными мутабельными кусками одной структуры неудобно, даже если они заведомо не пересекаются. Для наиболее простых случаев годится
В случае, если у структуры данных есть некоторая разновидность индексации, которая сопоставляет разным индексам разные элементы, то можно раздавать мутабельные ссылки на разные элементы, соответствующие разным наборам непересекающихся индексов. На практике это выливается в некоторый бойлерплейт с unsafe, который ещё и надо написать достаточно аккуратно, чтобы не потерять проверки времён жизни.
Библиотека paradis как раз стремится заполнить этот пробел за счёт предоставления этих наборов уникальных непересекающихся индексов и их комбинаторов, сохраняющих эти свойства, а также, разумеется, геттеров, использующих эти наборы индексов. Для каждой отдельной структуры данных требуется только реализовать геттер по индексу (unsafe, разумеется). Причём так как эти абстракции предназначены для использования в многопотоке, геттер возвращает данные, принимая self по разделяемой ссылке.
Автор отдельно отмечает, что paradis — экспериментальная библиотека и её дизайн ещё может поменяться.
Enter paradis — A new chapter in Rust's parallelism story
Из-за правил относительно тупого borrow checker работать в Rust с разными мутабельными кусками одной структуры неудобно, даже если они заведомо не пересекаются. Для наиболее простых случаев годится
spli_at_mut
на слайсах, но это не распространяется на более сложные структуры данных и на более сложные случаи. Скажем, просто разбить слайс на набор мутабельных ссылок на элементы с чётными и нечётными индексами уже не получается.В случае, если у структуры данных есть некоторая разновидность индексации, которая сопоставляет разным индексам разные элементы, то можно раздавать мутабельные ссылки на разные элементы, соответствующие разным наборам непересекающихся индексов. На практике это выливается в некоторый бойлерплейт с unsafe, который ещё и надо написать достаточно аккуратно, чтобы не потерять проверки времён жизни.
Библиотека paradis как раз стремится заполнить этот пробел за счёт предоставления этих наборов уникальных непересекающихся индексов и их комбинаторов, сохраняющих эти свойства, а также, разумеется, геттеров, использующих эти наборы индексов. Для каждой отдельной структуры данных требуется только реализовать геттер по индексу (unsafe, разумеется). Причём так как эти абстракции предназначены для использования в многопотоке, геттер возвращает данные, принимая self по разделяемой ссылке.
Автор отдельно отмечает, что paradis — экспериментальная библиотека и её дизайн ещё может поменяться.
👍10❤5
Блог*
#meme про женскую одежду. Насколько я знаю из разговоров со знакомыми женщинами — правдивый.
Ну и раз уж речь зашла об одежде...
#meme о том, как перестать быть слабаком и одеваться по-мужски (прямо как в старые добрые)
#meme о том, как перестать быть слабаком и одеваться по-мужски (прямо как в старые добрые)
🥰16💩3👌3🤮1🤡1
Forwarded from The After Times
Доступ к платным статьям на Medium.
Вдруг пригодятся, как пригодились мне.
Ниже два сервиса для обхода ограничений:
https://freedium.cfd/<URL>
https://medium-forall.vercel.app/
Вдруг пригодятся, как пригодились мне.
Ниже два сервиса для обхода ограничений:
https://freedium.cfd/<URL>
https://medium-forall.vercel.app/
🔥22👍3🤔1🙏1
#prog #rust #rustlib
Стандартная библиотека Rust предоставляет типы Path и PathBuf, которые инкапсулируют в себе платформо-специфичные пути в файловой системе. Эти пути не обязательно закодированы в UTF-8, поэтому работать с
Подход std правилен в том смысле, что не делает каких-то предположений о содержимом файловых путей, но на практике подавляющее большинство путей и так в UTF-8, а некоторые программы вообще с не-UTF-8 путями не работают, поэтому такая педантичность мешается.
Библиотека camino позволяет сделать работу с путями более эргономичной. Именно, она предоставляет типы Utf8Path и Utf8PathBuf, которые повторяют функциональность
Если что, camino используется в rust-analyzer.
И ещё: если вам требуется отобразить путь при помощи
Стандартная библиотека Rust предоставляет типы Path и PathBuf, которые инкапсулируют в себе платформо-специфичные пути в файловой системе. Эти пути не обязательно закодированы в UTF-8, поэтому работать с
Path
не очень удобно: Path
не реализует Display
, множество полезных функций для манипуляции строками доступны только на str
, но конвертация из Path
в str
может вернуть ошибку.Подход std правилен в том смысле, что не делает каких-то предположений о содержимом файловых путей, но на практике подавляющее большинство путей и так в UTF-8, а некоторые программы вообще с не-UTF-8 путями не работают, поэтому такая педантичность мешается.
Библиотека camino позволяет сделать работу с путями более эргономичной. Именно, она предоставляет типы Utf8Path и Utf8PathBuf, которые повторяют функциональность
Path
и PathBuf
, но гарантированно в UTF-8. Эта проверка осуществляется только один раз: во время создания этих типов, поэтому преобразование из них в str
всегда успешно, и вдобавок они реализуют Display
.Если что, camino используется в rust-analyzer.
И ещё: если вам требуется отобразить путь при помощи
Display
, то вам пригодится метод display на Path
. Он возвращает тип, который по возможности отображает путь так же, как и str
, и каким-то образом замещает невалидные UTF-8 последовательности.👍15🤡5🔥1💩1
Блог*
#prog #rust #rustreleasenotes Вышла версия Rust 1.79.0! Как обычно, тут только избранные моменты, остальное в полных заметках. ▪️Стабилизированы inline const блоки! Одно из самых непосредственно полезных применений — array repeat expression. Если раньше…
Тут один человек показал, для чего ещё может пригодиться inline const
Telegram
Random Rust Dev
Возможно многие как и я ждут эту фичу.
Она должны быть в следующием релизе на stable.
Она позволяет исправить следующий код что бы тот компилился.
fn get_iter<'a, T>(q: Option<&'a VecDeque<T>>) -> std::collections::vec_deque::Iter<'a, T> {
q.unwrap_o…
Она должны быть в следующием релизе на stable.
Она позволяет исправить следующий код что бы тот компилился.
fn get_iter<'a, T>(q: Option<&'a VecDeque<T>>) -> std::collections::vec_deque::Iter<'a, T> {
q.unwrap_o…
👍2
#prog #amazingopensource
grpcurl is a command-line tool that lets you interact with gRPC servers. It's basically
The main purpose for this tool is to invoke RPC methods on a gRPC server from the command-line. gRPC servers use a binary encoding on the wire (protocol buffers, or "protobufs" for short). So they are basically impossible to interact with using regular
Из недостатков можно отметить, что из пакетных менеджеров есть пока только в homebrew и aur.
grpcurl is a command-line tool that lets you interact with gRPC servers. It's basically
curl
for gRPC servers.The main purpose for this tool is to invoke RPC methods on a gRPC server from the command-line. gRPC servers use a binary encoding on the wire (protocol buffers, or "protobufs" for short). So they are basically impossible to interact with using regular
curl
(and older versions of curl
that do not support HTTP/2 are of course non-starters). This program accepts messages using JSON encoding, which is much more friendly for both humans and scripts.Из недостатков можно отметить, что из пакетных менеджеров есть пока только в homebrew и aur.
❤3👍1🤡1