Size: a a a

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

2020 October 10

SD

Sergey Duck in Rust — русскоговорящее сообществo
Есть куча аудио-сэмплов, есть ли какой нибудь крейт чтобы их соединить в один(а еще регулировать громкость, каналы) ?
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Sergey Duck
Есть куча аудио-сэмплов, есть ли какой нибудь крейт чтобы их соединить в один(а еще регулировать громкость, каналы) ?
Манг над ффмпег?
источник

SD

Sergey Duck in Rust — русскоговорящее сообществo
Boris Vinogradov
Манг над ффмпег?
Что такое манг?
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Sergey Duck
Что такое манг?
Обёртка
источник

SD

Sergey Duck in Rust — русскоговорящее сообществo
Boris Vinogradov
Обёртка
Ну, возможно
источник

KA

Korolll And in Rust — русскоговорящее сообществo
привет, подскажите как корректно решить такую проблему, рабочий код который мне не нравится:

use std::marker::PhantomData;

enum IDTree<C, T, Predicate>
where
   Predicate: Fn(T) -> bool {
   Leaf(C),
   Brnch { left: Box<IDTree<C, T, Predicate>>, right: Box<IDTree<C, T, Predicate>>, predicate: Predicate },
   Phantom(PhantomData<T>)
}


если удалить последнюю опцию в энаме всё ломается вот с такой ошибкой

 --> src/main.rs:2:16
 |
2 | enum IDTree<C, T, Predicate>
 |                ^ unused parameter
 |
 = help: consider removing `T`, referring to it in a field, or using a marker such as `std::marker::PhantomData`


возможно решить эту проблему как-то иначе
источник

Э

Эрик in Rust — русскоговорящее сообществo
Korolll And
привет, подскажите как корректно решить такую проблему, рабочий код который мне не нравится:

use std::marker::PhantomData;

enum IDTree<C, T, Predicate>
where
   Predicate: Fn(T) -> bool {
   Leaf(C),
   Brnch { left: Box<IDTree<C, T, Predicate>>, right: Box<IDTree<C, T, Predicate>>, predicate: Predicate },
   Phantom(PhantomData<T>)
}


если удалить последнюю опцию в энаме всё ломается вот с такой ошибкой

 --> src/main.rs:2:16
 |
2 | enum IDTree<C, T, Predicate>
 |                ^ unused parameter
 |
 = help: consider removing `T`, referring to it in a field, or using a marker such as `std::marker::PhantomData`


возможно решить эту проблему как-то иначе
Недавно выше было. Никак.
источник

p

polunin.ai in Rust — русскоговорящее сообществo
а есть какой-то крейт для обработки generics в derive macro? я хочу сделать имплементацию для типа, но для этого мне нужно объявить в impl<> дженерики и в самом типе, а самому писать перекидывание токенов не очень хочется
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Korolll And
привет, подскажите как корректно решить такую проблему, рабочий код который мне не нравится:

use std::marker::PhantomData;

enum IDTree<C, T, Predicate>
where
   Predicate: Fn(T) -> bool {
   Leaf(C),
   Brnch { left: Box<IDTree<C, T, Predicate>>, right: Box<IDTree<C, T, Predicate>>, predicate: Predicate },
   Phantom(PhantomData<T>)
}


если удалить последнюю опцию в энаме всё ломается вот с такой ошибкой

 --> src/main.rs:2:16
 |
2 | enum IDTree<C, T, Predicate>
 |                ^ unused parameter
 |
 = help: consider removing `T`, referring to it in a field, or using a marker such as `std::marker::PhantomData`


возможно решить эту проблему как-то иначе
логичнее PhantomData прицепить к варианту Branch, чем вводить новый
источник

KA

Korolll And in Rust — русскоговорящее сообществo
ещё раз привет, вопрос такой, как без копирование разбить вектор по предикату
источник

KA

Korolll And in Rust — русскоговорящее сообществo
на два соответственно вектора
источник

Э

Эрик in Rust — русскоговорящее сообществo
Korolll And
ещё раз привет, вопрос такой, как без копирование разбить вектор по предикату
Лол, никак, только на итераторы.
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Korolll And
привет, подскажите как корректно решить такую проблему, рабочий код который мне не нравится:

use std::marker::PhantomData;

enum IDTree<C, T, Predicate>
where
   Predicate: Fn(T) -> bool {
   Leaf(C),
   Brnch { left: Box<IDTree<C, T, Predicate>>, right: Box<IDTree<C, T, Predicate>>, predicate: Predicate },
   Phantom(PhantomData<T>)
}


если удалить последнюю опцию в энаме всё ломается вот с такой ошибкой

 --> src/main.rs:2:16
 |
2 | enum IDTree<C, T, Predicate>
 |                ^ unused parameter
 |
 = help: consider removing `T`, referring to it in a field, or using a marker such as `std::marker::PhantomData`


возможно решить эту проблему как-то иначе
В Phantom можешь добавить ! или аналог, чтобы было zero-cost.

См так-же: lib.rs/ghost
источник

Э

Эрик in Rust — русскоговорящее сообществo
Без копирования можно только на два слайса разбить, но не на два вектора.
источник

KA

Korolll And in Rust — русскоговорящее сообществo
Эрик
Без копирования можно только на два слайса разбить, но не на два вектора.
а как это делается, и можно ли тогда не вектор, а слайс на два слайса разбить?
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Korolll And
ещё раз привет, вопрос такой, как без копирование разбить вектор по предикату
Возможно, тебе нужен крейт bytes, он такое умеет
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Korolll And
а как это делается, и можно ли тогда не вектор, а слайс на два слайса разбить?
источник

Э

Эрик in Rust — русскоговорящее сообществo
fn split_by_pred<T, F>(s: &mut [T], mut predicate: F) -> (&mut [T], &mut [T])
where
F: FnMut(&mut T) -> bool,
{
let mut left = 0;
let mut right = s.len();
while left < right {
 if predicate(&mut s[left]) {
  right -= 1;
  s.swap(left, right);
 } else {
  left += 1;
 }
}

s.split_at_mut(left);
}
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
fn split_by_pred<T, F>(s: &mut [T], mut predicate: F) -> (&mut [T], &mut [T])
where
F: FnMut(&mut T) -> bool,
{
let mut left = 0;
let mut right = s.len();
while left < right {
 if predicate(&mut s[left]) {
  right -= 1;
  s.swap(left, right);
 } else {
  left += 1;
 }
}

s.split_at_mut(left);
}
.split_at_mut(.iter().position(pred))

же
источник

Э

Эрик in Rust — русскоговорящее сообществo
вафель 🧇
.split_at_mut(.iter().position(pred))

же
А ему не надо их по предикату сначала распихать налево и направо?
источник