#prog #article
Немного (реально немного) о том, почему надо думать о атомарности и модели памяти и о том, как это сказывается на вполне себе прикладном коде. А ещё в кои-то веки внятно рассказано про то, почему операции чтения и записи значений могут быть переставлены.
Немного (реально немного) о том, почему надо думать о атомарности и модели памяти и о том, как это сказывается на вполне себе прикладном коде. А ещё в кои-то веки внятно рассказано про то, почему операции чтения и записи значений могут быть переставлены.
Хабр
Модели памяти C++ и CLR
Это расшифровка-перевод доклада Саши Гольдштейна, признанного лучшим на конференции DotNext 2016 Piter. С годами этот доклад стал лишь актуальнее прежнего: появл...
#prog #rust #article
Толян David Tolnay когда-то писал о том, как можно до некоторой степени сымитировать специализацию для частных случаев, используя тот факт, что Rust может автоматически вставлять ссылку при использовании синтаксиса вызова метода через точку. У этого подхода есть несколько ограничений. Одно из них — это то, что, в отличие от истинной специализации, оно не работает в обобщённых контекстах — и потому не ломает параметричность и пригодно в основном для макросов. Другое — это то, что таким способом можно получить не более двух вариантов различного поведения.
Lukas Kalbertodt развил этот подход, опираясь на в каком-то смысле противоположную фичу deref coercions, и получил подход, позволяющий иметь более одного варианта обобщённого поведения и, более того, явно задавать приоритет применения impl-ов, а не неявно через отношение "строго более специализирован".
Lukas Kalbertodt развил этот подход, опираясь на в каком-то смысле противоположную фичу deref coercions, и получил подход, позволяющий иметь более одного варианта обобщённого поведения и, более того, явно задавать приоритет применения impl-ов, а не неявно через отношение "строго более специализирован".
GitHub
case-studies/autoref-specialization at master · dtolnay/case-studies
Analysis of various tricky Rust code. Contribute to dtolnay/case-studies development by creating an account on GitHub.
Forwarded from partially unsupervised
image_2021-06-29_19-54-41.png
250.8 KB
Дорогие подписчики присылают контент для рубрики "Нерды шутят". Статья, кстати, реально существует.
Forwarded from Linker Unsafe
Boris Usievich:
от макросов надо держаться подальше в 99% случаев
Andrey Davydov:
Спасибо за совет, но я просто держусь подальше от C++
//из @ProCxx
от макросов надо держаться подальше в 99% случаев
Andrey Davydov:
Спасибо за совет, но я просто держусь подальше от C++
//из @ProCxx
Forwarded from мне не нравится реальность (вафель')
Как проверить что строка совпадает с
"a"
? Проще простого!Forwarded from мне не нравится реальность (вафель')
Параноикам просьба отойти от этого поста.
Mara (m_ou_se, активная контрибьюторка раста) придумала как с помощью стабильного компилятора компилировать код, использующий nightly фичи.
Оригинальный пост: [twitter]
Тред с объяснением: [twitter] (честно, я сам не до конца понял как это работает)
Mara (m_ou_se, активная контрибьюторка раста) придумала как с помощью стабильного компилятора компилировать код, использующий nightly фичи.
Оригинальный пост: [twitter]
Тред с объяснением: [twitter] (честно, я сам не до конца понял как это работает)
X (formerly Twitter)
Mara (@m_ou_se) on X
Oh no. It works. On stable.
#prog #rust
На всякий случай, Vec::dedup_by принимает в качестве аргумента функцию от двух
На всякий случай, Vec::dedup_by принимает в качестве аргумента функцию от двух
&mut T
, где левый аргумент — это элемент, который находится правее, а правый аргумент — это аргумент, который находится левее (если считать, что элементы в векторе расположены слева направо). Да, это написано в документации, но кто ж её читает...doc.rust-lang.org
Vec in std::vec - Rust
A contiguous growable array type, written as `Vec<T>`, short for ‘vector’.
#prog #rust
Вы ведь, наверное, слышали про макросы file!, line! и column!, которые разворачиваются в имя файла, строку и колонку места в файле в месте, где они были раскрыты? Это — "магические" макросы, встроенные в компилятор, вы такие написать сами не можете... Точнее, не могли до версии Rust 1.46.
Что поменялось в этой версии? В этой версии появился атрибут
Вы ведь, наверное, слышали про макросы file!, line! и column!, которые разворачиваются в имя файла, строку и колонку места в файле в месте, где они были раскрыты? Это — "магические" макросы, встроенные в компилятор, вы такие написать сами не можете... Точнее, не могли до версии Rust 1.46.
Что поменялось в этой версии? В этой версии появился атрибут
#[track_caller]
(кстати, когда его только предлагали, он назывался blame_caller), который позволяет функции узнать информацию о месте, в котором она была вызвана (ну, почти: месте вызова выше по стеку в первой функции в стеке без этого атрибута). Эта информация предоставляется при помощи магического конструктора std::panic::Location::caller, который возвращает &'static Location<'static>
, и, как показывает пример из документации к конструктору, у Location
есть геттеры, покрывающие функционал вышеуказанных макросов. Таким образом, ничто не мешает написать свой, скажем, line!
, который будет разворачиваться в ::core::panic::Location::caller().line()
.doc.rust-lang.org
file in std - Rust
Expands to the file name in which it was invoked.
Хозяйке на заметку
Опытные программисты на Rust знают, что есть реализация
Опытные программисты на Rust знают, что есть реализация
impl<A, E, V: FromIterator<A>> FromIterator<Result<A, E>> for Result<V, E>
, которая позволяет при помощи .collect()
собирать итератор результатов в результат с коллекцией или с первой ошибкой. Почему-то несколько менее известен тот факт, что для Option
есть аналогичный impl со схожей семантикой.doc.rust-lang.org
FromIterator in core::iter - Rust
Conversion from an [`Iterator`].
Forwarded from Красные пики (Serge Abdulmanov)
Вот эта шайтан-штука — на самом деле церковный сейф времён чуть позже, чем в Эквадор пришли испанцы. Сделан из дерева и черепахового панциря (то есть прочный и тяжёлый). Снаружи выглядит как секретер, который нереально поднять и утащить. Но у него есть много секретных отделений: например, сбоку есть узор, который на самом деле не узор, а ящики. Ещё ящики могут быть внутри других ящиков. Комбинация, что характерно, вводится не чем-то отдельным, а самими ящиками секретера: нужно знать, какие из них открыть в совокупности, чтобы получить нужный секретный.
Простите за качество фото, дело в том, что там нельзя было снимать. Ну вот совсем нельзя.
Простите за качество фото, дело в том, что там нельзя было снимать. Ну вот совсем нельзя.