Вопросы с тегом «rust»

100
Идиоматические обратные вызовы в Rust

В C / C ++ я обычно выполняю обратные вызовы с помощью простого указателя на функцию, возможно, также передав void* userdataпараметр. Что-то вроде этого: typedef void (*Callback)(); class Processor { public: void setCallback(Callback c) { mCallback = c; } void processEvents() { for (...) { ......

100
Как перебрать диапазон с помощью настраиваемого шага?

Как я могу перебрать диапазон в Rust с шагом, отличным от 1? Я работаю с C ++, поэтому я хотел бы сделать что-нибудь вроде for(auto i = 0; i <= n; i+=2) { //... } В Rust мне нужно использовать эту rangeфункцию, и не похоже, что есть третий аргумент для использования настраиваемого шага. Как я...

96
Можно ли сделать шрифт только подвижным, а не копируемым?

Примечание редактора : этот вопрос задавался до Rust 1.0, и некоторые утверждения в вопросе не обязательно верны в Rust 1.0. Некоторые ответы были обновлены с учетом обеих версий. У меня есть эта структура struct Triplet { one: i32, two: i32, three: i32, } Если я передаю это функции, она неявно...

95
Что есть в Rust вместо сборщика мусора?

Я понимаю, что в Rust нет сборщика мусора, и мне интересно, как освобождается память, когда привязка выходит за рамки. Итак, в этом примере я понимаю, что Rust освобождает память, выделенную для 'a', когда она выходит за пределы области видимости. { let a = 4 } Проблема, с которой я столкнулся,...

95
Как я могу создать несколько двоичных файлов с помощью Cargo?

Я хотел бы сделать проект с a daemonи a client, подключаясь через сокет unix. A clientи a daemonтребуют двух двоичных файлов, так как мне сказать, что Cargoнужно создать две цели из двух разных источников? Чтобы добавить немного фантазии, я хотел бы иметь a libraryдля основной части daemon, и...

92
Как использовать макрос в файлах модуля?

У меня есть два модуля в отдельных файлах в одном ящике, в котором ящик был macro_rulesвключен. Я хочу использовать макросы, определенные в одном модуле, в другом модуле. // macros.rs #[macro_export] // or not? is ineffectual for this, afaik macro_rules! my_macro(...) // something.rs use macros;...

91
Что такое «толстый указатель» в Rust?

Я уже читал термин «толстый указатель» в нескольких контекстах, но я не уверен, что именно он означает и когда он используется в Rust. Указатель кажется вдвое больше обычного указателя, но я не понимаю почему. Это также имеет какое-то отношение к объектам-признакам....

90
Зачем создавать язык с уникальными анонимными типами?

Это то, что меня всегда беспокоило как особенность лямбда-выражений C ++: тип лямбда-выражения C ++ уникален и анонимен, я просто не могу его записать. Даже если я создам две лямбда-выражения, которые синтаксически совершенно одинаковы, результирующие типы определены как разные. Следствием этого...

89
Какие типы Rust обозначаются одним апострофом?

Я встречал в Rust несколько типов, обозначенных одним апострофом: 'static 'r 'a Какое значение имеет этот апостроф? Может это модификатор ссылок ( &)? Универсальная типизация для ссылок? Понятия не имею, где прячется документация по этому поводу....

88
Что такое нелексические времена жизни?

В Rust есть RFC, связанный с нелексическим временем жизни, который был одобрен для реализации в языке в течение длительного времени. В последнее время поддержка этой функции в Rust значительно улучшилась и считается полной. У меня вопрос: что такое нелексическая жизнь?...

88
Как преобразовать целое число в строку?

Я не могу скомпилировать код, преобразующий тип из целого числа в строку. Я использую пример из учебника Rust для Rubyists, в котором есть различные преобразования типов, такие как: "Fizz".to_str()и num.to_str()(где num- целое число). Я думаю, что большинство (если не все) этих to_str()вызовов...

88
Каковы накладные расходы типа Option в Rust?

В Rust ссылки никогда не могут быть нулевыми, поэтому, если вам действительно нужен ноль, например связанный список, вы используете Optionтип: struct Element { value: i32, next: Option<Box<Element>>, } Сколько накладных расходов связано с выделением памяти и действиями по разыменованию...

87
Как создать литерал HashMap?

Как я могу создать литерал HashMap в Rust? В Python я могу это сделать так: hashmap = { 'element0': { 'name': 'My New Element', 'childs': { 'child0': { 'name': 'Child For Element 0', 'childs': { ... } } } }, ... } А в Go вот так: type Node struct { name string childs map[string]Node } hashmap :=...

86
Когда в Rust следует использовать inline?

В Rust есть "встроенный" атрибут, который можно использовать в одном из этих трех вариантов: #[inline] #[inline(always)] #[inline(never)] Когда их следует использовать? В справочнике Rust мы видим раздел встроенных атрибутов, в котором говорится Компилятор автоматически встраивает функции на...

85
Преобразование из Option <String> в Option <& str>

Очень часто я получаю Option<String>вычисление и хочу использовать это значение или жестко заданное значение по умолчанию. С целым числом это было бы тривиально: let opt: Option<i32> = Some(3); let value = opt.unwrap_or(0); // 0 being the default Но с a Stringи a &strкомпилятор...