Forwarded from Блог*
Forwarded from Блог*
#prog #rust
Пара советов по строкам в Rust:
1) Если вам нужно разбить строку по одному из нескольких возможных символов — не спешите расчехлять регулярки, для это задачи вполне хватит стандартной библиотеки. Множество строковых методов навроде {, r}split{, _terminator}, trim{, _start, _end}_matches, find и прочие принимают в качестве аргумента для поиска значение, тип которого реализует пока нестабильный трейт Pattern. В настоящий момент его реализуют
2) Если функция принимает на вход
Вызвать `next`?
Нет.
Также вызвать `next_back`?
Нет.
Это всё неполные ответы. Если мы получаем мутабельную ссылку на
Покажу на примере.
Вот первый способ вытащить строку из
Второй способ (побыстрее и не требующий аллокаций):
Пара советов по строкам в Rust:
1) Если вам нужно разбить строку по одному из нескольких возможных символов — не спешите расчехлять регулярки, для это задачи вполне хватит стандартной библиотеки. Множество строковых методов навроде {, r}split{, _terminator}, trim{, _start, _end}_matches, find и прочие принимают в качестве аргумента для поиска значение, тип которого реализует пока нестабильный трейт Pattern. В настоящий момент его реализуют
&str, &&str, &String, impl FnMut(char) -> bool и (почему-то малоизвестный) &[char]. Таким образом, разбить строку по нескольким символам легко:let result = "Hello, world!".split(&['o', 'l'][..]).collect::<Vec<_>>();
assert_eq!(result, vec!["He", "", "", ", w", "r", "d!"]);
2) Если функция принимает на вход
&mut std::str::Chars, что она может с ним сделать?Вызвать `next`?
Нет.
Также вызвать `next_back`?
Нет.
Это всё неполные ответы. Если мы получаем мутабельную ссылку на
Chars, мы можем редактировать произвольным образом, в том числе и поменять его целиком. Chars внутри себя содержит строки, символы которой он перебирает, и при помощи метода Chars::as_str эту строку можно достать. Таким образом, имея мутабельную ссылку на Chars, можно вытащить из него строку, вырезать из строки нужный кусок и переписать переданный итератор .chars() от этого кусочка.Покажу на примере.
Вот первый способ вытащить строку из
Chars (медленный, требующий аллокаций и не совсем корректный):fn extract_line2(chars: &mut Chars) -> String {
chars.take_while(|&ch| !matches!(ch, '\r' | '\n')).collect()
}Второй способ (побыстрее и не требующий аллокаций):
fn extract_line<'s>(chars: &mut Chars<'s>) -> Option<&'s str> {
let s = chars.as_str();
let line = s.lines().next()?;
*chars = s[line.len()..].chars();
Some(line)
}doc.rust-lang.org
Pattern in std::str::pattern - Rust
A string pattern.
Forwarded from Блог*
#prog #article
Продолжение темы от того же автора: Names are not type safety.
https://lexi-lambda.github.io/blog/2020/11/01/names-are-not-type-safety/
В рассуждениях автора легко провести параллели с тем, как использовать и ограничивать unsafe-код в Rust.
Продолжение темы от того же автора: Names are not type safety.
https://lexi-lambda.github.io/blog/2020/11/01/names-are-not-type-safety/
В рассуждениях автора легко провести параллели с тем, как использовать и ограничивать unsafe-код в Rust.
Forwarded from Блог*
#prog #rust #article
Статья про то, как писать код с инициализацией данных, сохранив сильную exception safety.
Статья про то, как писать код с инициализацией данных, сохранив сильную exception safety.
Arthur::Carcano
Exception safety in Rust: using transient droppers to prevent memory leaks
In this post, we dive into a common Rust pattern to prevent memory leaks in case of exceptions in unsafe code, as used in the `array-init` crate.
Forwarded from Так говорит Алиса (John Meow)
DEV Community
How to debug rust applications with VIM
This is a simple guide to configure the loved (and hated) VIM editor to develop and debug rust applications.
Forwarded from Так говорит Алиса (John Meow)
Forwarded from Блог*
#prog #rust #article
Обстоятельная статья о трейтах
Обстоятельная статья о трейтах
Send и Sync и о том, что они означают с точки зрения написания кода.nyanpasu64.github.io
An unsafe tour of Rust’s Send and Sync
Rust’s concurrency safety is based around the Send and Sync traits. For people writing safe code, you don’t really need to understand these traits on a deep level, only enough to satisfy the compiler when it spits errors at you (or switch from std threads…
Forwarded from Блог*
#prog #rust #моё #article
Здрасьте. Сегодня поста не будет — но только потому, что я решил написать статью для Хабра. Собственно, вот она.
И напоминаю: если вам это понравилось — поддержите копеечкой автора, я вам благодарен буду: 4274 3200 5402 8520.
Здрасьте. Сегодня поста не будет — но только потому, что я решил написать статью для Хабра. Собственно, вот она.
И напоминаю: если вам это понравилось — поддержите копеечкой автора, я вам благодарен буду: 4274 3200 5402 8520.
Хабр
Как написать FizzBuzz на собеседовании
Здравствуй, Хабр. Недавно я проходил собеседование в одну солидную айтишную контору. Когда мы разобрались с формальностями, начался технический этап, на котором мне поручили написать fizzbuzz. По не...