Size: a a a

Rust — русскоговорящее сообществo

2020 November 30

TT

Test For Test in Rust — русскоговорящее сообществo
Спасяб)
источник

N

Nikita in Rust — русскоговорящее сообществo
Снова тупой вопрос: можно ли работать с JSON? ( принимать, отправлять и т.ж )
источник

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
Nikita
Снова тупой вопрос: можно ли работать с JSON? ( принимать, отправлять и т.ж )
можно
источник

CM

Chingiz Mamiyev in Rust — русскоговорящее сообществo
Nikita
Снова тупой вопрос: можно ли работать с JSON? ( принимать, отправлять и т.ж )
+
источник

IB

Ivan Boldyrev in Rust — русскоговорящее сообществo
Nikita
Снова тупой вопрос: можно ли работать с JSON? ( принимать, отправлять и т.ж )
источник

c

call eax in Rust — русскоговорящее сообществo
Nikita
Снова тупой вопрос: можно ли работать с JSON? ( принимать, отправлять и т.ж )
источник

p

polunin.ai in Rust — русскоговорящее сообществo
инкрементальная компиляция при изменении чего-то в роутах warp увеличивается с 11 секунд до 21, при том что из изменений - добавление пяти роутов. это нормально?
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Привет!

Коллеги, подскажите, пожалуйста, можно ли как-то выразить трейт с ассоциативным типом так, чтобы его можно было затем помещать в виде Trait object в какой-нибудь контейнер? Например, в Box или Vec?

То есть нечто вроде такого:

trait A: Send + Sync {
   type Assoc: B + ?Sized;
}

trait B {}

struct S {
   a: Box<dyn A<Assoc = dyn B>>,
}

struct SA {}

struct SB {}

impl B for SB {}

impl A for SA {
   type Assoc = SB;
}

fn f() {
   let s = S { a: Box::new(SA {}) };
}
источник

r

red75prime in Rust — русскоговорящее сообществo
Ilya Lakhin
Привет!

Коллеги, подскажите, пожалуйста, можно ли как-то выразить трейт с ассоциативным типом так, чтобы его можно было затем помещать в виде Trait object в какой-нибудь контейнер? Например, в Box или Vec?

То есть нечто вроде такого:

trait A: Send + Sync {
   type Assoc: B + ?Sized;
}

trait B {}

struct S {
   a: Box<dyn A<Assoc = dyn B>>,
}

struct SA {}

struct SB {}

impl B for SB {}

impl A for SA {
   type Assoc = SB;
}

fn f() {
   let s = S { a: Box::new(SA {}) };
}
А в чём проблема? Этот код компилируется: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1c09366cad5d25d568b7b134b7c9514e
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
red75prime Прошу прощения, я немного ввел в заблуждение. Там на самом деле предполагалось: a: Box<dyn A<Assoc = dyn B>>,

То есть, чтобы ассоциативный тип в контейнере как-то динамически диспатчился тоже.
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Подправил сниппет.
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
источник

r

red75prime in Rust — русскоговорящее сообществo
Ilya Lakhin
red75prime Прошу прощения, я немного ввел в заблуждение. Там на самом деле предполагалось: a: Box<dyn A<Assoc = dyn B>>,

То есть, чтобы ассоциативный тип в контейнере как-то динамически диспатчился тоже.
Я вижу только вариант с добавлением типа обёртки, который конвертирует конкретный тип в dyn B. https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=aba2a009e721383578d952059e3158b3
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
red75prime
Я вижу только вариант с добавлением типа обёртки, который конвертирует конкретный тип в dyn B. https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=aba2a009e721383578d952059e3158b3
Да, это навернео подходящий воркэраунд. Большое спасибо!
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
red75prime А, нет, боюсь не очень подходящий. Мне же придется делать статические обертки на каждый случай, тогда просто теряется смысл динамического диспатчинга
источник

r

red75prime in Rust — русскоговорящее сообществo
Ilya Lakhin
red75prime А, нет, боюсь не очень подходящий. Мне же придется делать статические обертки на каждый случай, тогда просто теряется смысл динамического диспатчинга
Если ассоциированный тип используется только как тип возвращаемого значения методов, то можно сделать blanket impl. А вот если он используется как тип параметра метода, то сделать тут уже ничего нельзя.

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=588a692b7b46fee0ad2501c8e8c5570c
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Dmitry
В упрощённом варианте примерно так:

let mut m = [0u8; 100];
let mut s: &[u8] = m[20..40];
let mut d: [u8; 20] = s;

d.change();     // данные меняются
m                      // данные должны быть изменены

s может передаваться в функцию принимающую тип как у d
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Впрочем я поздно, вопрос уже решён даже через std
источник

p

polunin.ai in Rust — русскоговорящее сообществo
как создать мутабельную C-строку? мне нужен *mut c_char
источник

p

polunin.ai in Rust — русскоговорящее сообществo
у CString нет возможности преобразования в *mut c_char, как я понял
источник