Блог*
А это значит, что в ближайшем будущем mpmc-канал наверняка будет и в std!
#prog #rust хайлайты
Я был несколько оптимистичен, но в итоге mpmc в std быть!
https://github.com/rust-lang/rust/pull/126839
Я был несколько оптимистичен, но в итоге mpmc в std быть!
https://github.com/rust-lang/rust/pull/126839
GitHub
Add multi-producer, multi-consumer channel (mpmc) by obeis · Pull Request #126839 · rust-lang/rust
Closes #125712
Tracking issue: #126840
r? m-ou-se
Tracking issue: #126840
r? m-ou-se
🔥7🎉2❤1
Forwarded from Кустарный мыслепоток (Konstantin Redkin)
И снова про контору.
Доставка в мой дом - 335 рублей
Доставка в дом, что соприкасается с моим, стоит прям рядом - 135 рублей
Олимпиадники играли в алгоритмы и проиграли.
Доставка в мой дом - 335 рублей
Доставка в дом, что соприкасается с моим, стоит прям рядом - 135 рублей
Олимпиадники играли в алгоритмы и проиграли.
🤡17👍6😁4
#prog #rust хайлайты
Умудрился пропустить в своё время очень важное изменение, влитое в сентябре:
Stabilize &mut (and *mut) as well as &Cell (and *const Cell) in const
Изменение, которое значительно повышает возможности для кода в const-контексте. Судя по milestone, до стейбла дойдёт в версии 1.83
Умудрился пропустить в своё время очень важное изменение, влитое в сентябре:
Stabilize &mut (and *mut) as well as &Cell (and *const Cell) in const
Изменение, которое значительно повышает возможности для кода в const-контексте. Судя по milestone, до стейбла дойдёт в версии 1.83
GitHub
Stabilize `&mut` (and `*mut`) as well as `&Cell` (and `*const Cell`) in const by RalfJung · Pull Request #129195 · rust-lang/rust
This stabilizes const_mut_refs and const_refs_to_cell. That allows a bunch of new things in const contexts:
Mentioning &mut types
Creating &mut and *mut values
Creating &T ...
Mentioning &mut types
Creating &mut and *mut values
Creating &T ...
👍11
Forwarded from Кустарный мыслепоток (Konstantin Redkin)
Linux, linux.. зацени че у меня винда умеет
🔥27🤣15😁3
Forwarded from Install Wizard
Год программирования на расте и непрограммирования на плюсах меня испортил. Я начал считать, что программирование - это что-то хорошее
😁37🤔12
#prog #cpp #python
Что общего у C++ и Python?
Правильно: что в C++, что в Python нельзя распаковывать кортежи в аргументах лямбды.
Что общего у C++ и Python?
Правильно: что в C++, что в Python нельзя распаковывать кортежи в аргументах лямбды.
Stack Overflow
Structured binding in lambda arguments
Why I cannot use C++17 structured binding in this case?
std::map<int, int> m;
std::find_if( m.cbegin(), m.cend(), []( const auto & [x, y] ){ return x == y; } );
std::map<int, int> m;
std::find_if( m.cbegin(), m.cend(), []( const auto & [x, y] ){ return x == y; } );
🌚11👌4
Блог*
#prog #cpp #python Что общего у C++ и Python? Правильно: что в C++, что в Python нельзя распаковывать кортежи в аргументах лямбды.
#prog #python
Причём в Python 2.x можно было писать код вида
, а в Python 3 это убрали после PEP 3113, причём по причинам, которые, на мой взгляд, можно было бы и исправить.
Причём в Python 2.x можно было писать код вида
lambda (x, y): (y, x)
, а в Python 3 это убрали после PEP 3113, причём по причинам, которые, на мой взгляд, можно было бы и исправить.
Python Enhancement Proposals (PEPs)
PEP 3113 – Removal of Tuple Parameter Unpacking | peps.python.org
Tuple parameter unpacking is the use of a tuple as a parameter in a function signature so as to have a sequence argument automatically unpacked. An example is:
🤡8🤮2😢1🤣1
#prog #article
You Really Shouldn't Roll Your Own Crypto: An Empirical Study of Vulnerabilities in Cryptographic Libraries (pdf)
<...> Among our most interesting findings is that only 27.2% of vulnerabilities in cryptographic libraries are cryptographic issues while 37.2% of vulnerabilities are memory safety issues, indicating that systems-level bugs are a greater security concern than the actual cryptographic procedures
<...>
Of the most severe CVEs, just 3.57% were cryptographic, a substantially lower percentage compared to 27.24% of all CVEs.
You Really Shouldn't Roll Your Own Crypto: An Empirical Study of Vulnerabilities in Cryptographic Libraries (pdf)
<...> Among our most interesting findings is that only 27.2% of vulnerabilities in cryptographic libraries are cryptographic issues while 37.2% of vulnerabilities are memory safety issues, indicating that systems-level bugs are a greater security concern than the actual cryptographic procedures
<...>
Of the most severe CVEs, just 3.57% were cryptographic, a substantially lower percentage compared to 27.24% of all CVEs.
arXiv.org
You Really Shouldn't Roll Your Own Crypto: An Empirical Study...
The security of the Internet rests on a small number of open-source cryptographic libraries: a vulnerability in any one of them threatens to compromise a significant percentage of web traffic....
🤔5
Forwarded from Технологический Болт Генона
🫡
Скорость отступа: в РФ хотят запретить использование сервиса SpeedTest
https://iz.ru/1775426/valerii-kodacigov/skorost-otstupa-v-rf-hotat-zapretit-ispolzovanie-servisa-speedtest
В Госдуме и ФСБ поддержали предложение о том, чтобы исключить использование российскими операторами измерителя скорости интернета SpeedTest американской компании Ookla.
. . .
Ookla работает в тесной связи со спецслужбами США — американцы смогли создать по всему миру систему тестового контроля сетей связи, объясняет свою обеспокоенность президент Международной академии связи Анастасия Оситис в своем обращении в Госдуму (документ есть у «Известий»).
. . .
Системы тестового контроля позволяют получить информацию о сетях связи: их конфигурации, используемом на них оборудовании, нагрузке, пропускной способности и многом другом, перечисляет академик МАС Сергей Мельник. По его словам, эти данные, попав в руки иностранных спецслужб, могут быть использованы, к примеру, для организации адресных DDoS-атак.
Скорость отступа: в РФ хотят запретить использование сервиса SpeedTest
https://iz.ru/1775426/valerii-kodacigov/skorost-otstupa-v-rf-hotat-zapretit-ispolzovanie-servisa-speedtest
🤡31🤣7
#prog #rust #rustlib #article
Designing A Fast Concurrent Hash Table
Статья о дизайне papaya, многопоточной в основном lock-free хэш-мапы с упором на пропускную способность на операциях чтения из мапы и предсказуемые задержки (без пиков). Также пока что является, кажется, единственной подобной структурой данных, которую можно использовать из асинхронного кода.
Для того, чтобы избежать пиков задержки, использует инкрементальное изменение размера — и это одно из немногих мест, где используются блокировки.
Так как многопоточная мапа по определению не может иметь аналог entry API (по крайней мере, без кучи тонкостей из-за потенциальных гонок с другими потоками), papaya предоставляет операции по атомарной модификации отдельных записей, использующие переданные коллбеки для выполнения нужной операции. Для наиболее ходовых операций есть отдельные методы, а для тех, которые в эти методы не укладываются, есть операция compute. Коллбек, переданный в этот метод, должен возвращать значение типа Operation, описывающий требуемое действие:
В конце автор сравнивает свою реализацию с другими подобными библиотеками для Rust и поясняет, почему может иметь смысл использовать их вместо papaya.
Designing A Fast Concurrent Hash Table
Статья о дизайне papaya, многопоточной в основном lock-free хэш-мапы с упором на пропускную способность на операциях чтения из мапы и предсказуемые задержки (без пиков). Также пока что является, кажется, единственной подобной структурой данных, которую можно использовать из асинхронного кода.
Для того, чтобы избежать пиков задержки, использует инкрементальное изменение размера — и это одно из немногих мест, где используются блокировки.
Так как многопоточная мапа по определению не может иметь аналог entry API (по крайней мере, без кучи тонкостей из-за потенциальных гонок с другими потоками), papaya предоставляет операции по атомарной модификации отдельных записей, использующие переданные коллбеки для выполнения нужной операции. Для наиболее ходовых операций есть отдельные методы, а для тех, которые в эти методы не укладываются, есть операция compute. Коллбек, переданный в этот метод, должен возвращать значение типа Operation, описывающий требуемое действие:
enum Operation<V, T> {
Insert(V),
Remove,
Abort(T),
}
В конце автор сравнивает свою реализацию с другими подобными библиотеками для Rust и поясняет, почему может иметь смысл использовать их вместо papaya.
Ibraheem Ahmed
Designing A Fast Concurrent Hash Table
I recently released papaya, a fast and feature-complete concurrent hash table for Rust. In this post I want to dive into the design and research that went into creating it, as well as why you might consider using it over existing solutions.
🔥7❤5
#prog #rust #rustreleasenotes
Вышла версия Rust 1.82.0! Как всегда, тут только избранные части, а полный ченджлог отдельно.
▪️Теперь в некоторых случаях можно использовать pattern matching, не упоминая ненаселённые паттерны:
▪️Добавили новый синтаксис, который позволяет явно указать, какие лайфтайм-параметры будут использованы для обобщённых параметров типа
▪️Стабилизировали операции на числами с плавающей точкой в const fn. В качестве не вполне приятного дополнения const fn теперь могут возвращать разные результаты в о время компиляции и в рантайме. С другой стороны, в настоящий момент эта оговорка существует лишь из-за тонкостей насчёт гарантий битового представления NaN. Если вас это не интересует (а так оно, скорее всего, и есть), то const fn продолжают сохранять равенство рантайм и компилтайм поведения.
▪️Стабилизировали операции для взятия адреса place expression без создания промежуточной ссылки:
▪️В Rust добавили ключевое слово
▪️Макрос
▪️Некоторые атрибуты — например,
С edition 2024 (да, ещё не стабилизированной) подобные атрибуты нужно будет помечать, как
В предыдущих edition по соображениям обратной совместимости это не требуется, но есть соответствующий линт (по умолчанию выключенный).
⬇️⬇️⬇️
Вышла версия Rust 1.82.0! Как всегда, тут только избранные части, а полный ченджлог отдельно.
▪️Теперь в некоторых случаях можно использовать pattern matching, не упоминая ненаселённые паттерны:
enum Void {}
fn foo() -> Result<u32, Void> {
todo!()
}
fn main() {
let Ok(x) = foo();
match foo() {
Ok(x) => {}
}
}
▪️Добавили новый синтаксис, который позволяет явно указать, какие лайфтайм-параметры будут использованы для обобщённых параметров типа
impl Trait
в возвращаемой позиции: + use<'a>
. Это позволяет, в частности, убрать из списка лайфтайм-параметров те, которые по факту не используются в возвращаемом типе. У меня не получилось кратко объяснить, для чего это нужно, читайте блогпост. Из досадных ограничений: анонимный тип обязан перечислять в use
все обобщённые типы и константные параметры из окружения, даже если они не используются. Это планируют исправить в будущих версиях.▪️Стабилизировали операции на числами с плавающей точкой в const fn. В качестве не вполне приятного дополнения const fn теперь могут возвращать разные результаты в о время компиляции и в рантайме. С другой стороны, в настоящий момент эта оговорка существует лишь из-за тонкостей насчёт гарантий битового представления NaN. Если вас это не интересует (а так оно, скорее всего, и есть), то const fn продолжают сохранять равенство рантайм и компилтайм поведения.
▪️Стабилизировали операции для взятия адреса place expression без создания промежуточной ссылки:
&raw const
и &raw mut
, ранее доступные через макросы std::ptr::addr_of{, _mut}
. Также в качестве багфикса их использование на static
определениях теперь не триггерит сообщение о небезопасной операции.▪️В Rust добавили ключевое слово
safe
... Ну, почти. extern
-определения по определению не могут быть проверены компилятором на корректность, поэтому в общем случае доступ к ним требует unsafe
-блока. Начиная с этой версии определение в extern
-блоке можно пометить, как safe
, обозначая тем самым, что доступ к определению не требует соблюдения каких-либо специальных предусловий. Например, таковыми можно пометить большинство функций из libm — математической составляющей стандартной библиотеки C.▪️Макрос
offset_of!
теперь можно использовать для вычисления сдвига вложенного поля:struct Inner {
field: u32,
}
struct Outer {
inner: Inner,
}
const _: usize = std::mem::offset_of!(Outer, inner.field);
▪️Некоторые атрибуты — например,
#[no_mangle]
и #[export_name]
— могут приводить к некорректным программаv даже в отсутствие какого-либо unsafe
кода. Например, вот эта простая программа при запуске на *nix-системе почти наверняка упадёт с SIGSEGV:fn main() {
println!("Hello, world!");
}
#[no_mangle]
fn malloc() -> usize { 1 }
С edition 2024 (да, ещё не стабилизированной) подобные атрибуты нужно будет помечать, как
unsafe
:#[unsafe(no_mangle)]
fn this_is_not_in_global_namespace() {}
В предыдущих edition по соображениям обратной совместимости это не требуется, но есть соответствующий линт (по умолчанию выключенный).
⬇️⬇️⬇️
👍7🔥6🥰1😍1
▪️Стабилизировали пачку API. Некоторые из них:
🔸
🔸std::thread::Builder::spawn_unchecked —
🔸
🔸Временами нужная std::iter::repeat_n. В отличие от
🔸...Но чуть менее нужная, поскольку
🔸Функции на умных указателях для выделения неинициализированной памяти (new_uninit/new_uninit_slice) и соответствующие небезопасные функции для утверждения инициализированности (assume_init/assume_init). Есть для
🔸
▪️Для cargo теперь доступна команда
🔸
{Rc,Arc}::make_mut()
теперь работает с другими unsized типами: Path
, OsStr
и CStr
.🔸std::thread::Builder::spawn_unchecked —
unsafe
функция для запуска потоков без проверки времени жизни. Не очень нужная функция сама по себе, но позволяет строить поверх API, работающий с потоками — такие, как scoped threads, например — без грязных хаков с transmute
-ом в 'static
-типы.🔸
is_sorted
(включая *_by
и *_by_key
варианты) на слайсах и итераторах.🔸Временами нужная std::iter::repeat_n. В отличие от
repeat(x).take(n)
может не клонировать на последней итерации.🔸...Но чуть менее нужная, поскольку
Take<Repeat<T>>
и Take<RepeatWith<T>>
теперь реализуют ExactSizeIterator
, а Take<Repeat<T>>
ещё и DoubleEndedIterator
.🔸Функции на умных указателях для выделения неинициализированной памяти (new_uninit/new_uninit_slice) и соответствующие небезопасные функции для утверждения инициализированности (assume_init/assume_init). Есть для
Box
, Rc
и Arc
.🔸
from_str_radix
в const-контексте▪️Для cargo теперь доступна команда
cargo info
для отображения информации о пакете. Удобнее, чем читать непосредственно манифест.doc.rust-lang.org
Builder in std::thread - Rust
Thread factory, which can be used in order to configure the properties of a new thread.
👍11❤🔥1🥰1