Святая Корова! — Продолжение (Holy std: borrow: Cow! — Redux)

оригинал: llogic • перевод: Сергей Ефремов • обучение • поддержите на Patreon

Последний раз я использовал очень полезный Cow, чтобы разобраться с тем, нужно ли клонировать str или просто заимствовать её. Это было моё первое применение аннотаций времён жизни, и это было явно похоже на достижение. : -)

На /r/rust, пользователь Artemciy спросил меня очень хороший вопрос

[…] Как это работает? Похоже на какую-то магию. Имею ввиду, как String становится str?

А также предложил свой вариант ответа:

P. S. Похоже, что в String есть реализация IntoCow’, которая преобразует её в str, но если посмотреть на эту реализацию — опять какая-то магия. Может String в тайне является str?

(выделено мной)

Хороший вопрос. На самом деле, наверное, вы бы хотели прочитать про обмен догадками, озарение, исследования, неправильные решения и драму в интернете. Но увы! У кого есть на это время? Поэтому попытаюсь донести всю суть от начала и до конца.

Анонс Rust 1.8

оригинал: The Rust Core Team • перевод: Станислав Ткач • новости • поддержите на Patreon

Мы рады представить новую версию Rust 1.8. Rust — это системный язык программирования, нацеленный на безопасную работу с памятью, скорость и параллельное выполнение кода.

Как обычно, вы можете установить Rust 1.8 с соответствующей страницы официального сайта, а также ознакомиться с подробным списком изменений в этой версии на GitHub. В этот релиз вошло порядка 1400 патчей.

Что вошло в стабильную версию 1.8

В релиз вошли две новые возможности, а ещё у нас есть хорошие новости для пользователей Windows! Также продолжаются работы по замене make в нашей билд-системе на Cargo.

Во-первых, различные операторы составного присваивания, такие как += и -=, теперь могут быть перегружены через соответствующие трейты. Это изменение было результатом RFC 953 и выглядит следующим образом:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use std::ops:: AddAssign;

#[derive(Debug)]
struct Count {
    value: i32,
}
   
impl AddAssign for Count {
    fn add_assign(&mut self, other: Count) {
        self.value += other.value;
    }
}  

fn main() {
    let mut c1 = Count { value: 1 };
    let c2 = Count { value: 5 };

    c1 += c2;

    println!("{:?}", c1);
}

Как пользоваться типажами From и Into

оригинал: llogic • перевод: Сергей Ефремов • обучение • поддержите на Patreon

(Эта статья написана для Rust 1.4, и код по-прежнему работает в 1.7 без изменений)

Пришло время поговорить про типажи From и Into (и некоторые с ними связанные) и задать вопрос, где и когда их использовать. Заметьте, что есть ещё специфические типажи (например, IntoIterator) и более конкретные их варианты (например, FromStr); надо быть в курсе всего этого при написании кода на Rust.

Мы начинаем продажу эксклюзивного издания Растономикона!

• Михаил Панков • новости • поддержите на Patreon

Добрый день, дорогие читатели. Как вы знаете, наше сообщество перевело книгу о продвинутом и небезопасном программировании на Rust — «Rustonomicon». Мы решили, что хорошее содержимое должно быть в хорошей форме, и объявляем об уникальном издании этой книги, которая должна быть на полке каждого программиста на Rust.

Конечно, мы не могли обойти стороной отсылку к Лавкрафту. Напомним, что Некрономико́н (англ. Necronomicon) — вымышленная книга, придуманная Говардом Лавкрафтом и часто упоминаемая в литературных произведениях, основанных на мифах Ктулху. Согласно рассказу «Ведьмин Лог», в этой книге описаны все магические ритуалы, а также полная история Древних, которые постоянно вели ожесточённые войны.

Отладка приложений на Rust с помощью GDB

• Александр Яшкин • обучение • поддержите на Patreon

Введение

По мотивам статьи Михаэля Петерсона, которую мы переработали и сделали актуальной на данный момент.

В этой статье мы рассмотрим, как можно использовать отладчик GDB с программами на Rust. Для этого я использую:

1
2
3
4
5
$ rustc -V
rustc 1.7.0 (a5d1e7a59 2016-02-29)

$ gdb --version
GNU gdb (GDB) 7.11

Перед тем, как мы начнём, хочу сказать, что я не эксперт в отладчике GDB и я ещё только изучаю Rust. С помощью таких статей я веду как бы конспект для себя. Приветствую любые замечания и советы по поводу содержания этой статьи в комментариях.