Αλεχ
ну напиши второй вариант)
Αλεχ
скорее всего как второй трейт
Αλεχ
в один трейт нельзя запихнуть разные требования к базовой сигнатуре
պլհկ
trait MyService {
fn do_something(&self) -> Box<Future<Item = i32, Error = ()>> {
self.do_something2()
}
fn do_something2(&self) -> Box<Future<Item = i32, Error = ()> + Send>;
}
🤔
Anton
ох уж эти хаскелоиды
Αλεχ
а что если так? https://play.rust-lang.org/?gist=72a645d3f017f2e7cf3e818a0b3fe6fa&version=stable&mode=debug&edition=2015
Anton
А как правильно? Не надоедает в каждую дырку хкт пихать? В чате раста, без контекста обсуждения типов?
Roma
Roma
варвары
Anton
для верности надо было писать лопата
Oleg
А для чего в новом tokio нужен reactor::Handle, если у него нет spawn?
Vladimir
Рома
можно пример как проинициализировать 10000 объектов указанных в другом объекте
Рома
struct Game <'a> {
blocks: [Button <'a>; 10000],
}
კაცი
impl Game {
fn new(blocks: Blocks) -> Game {
Game {blocks}
}
}
Рома
კაცი
что за Blocks?
ну это как пример, можешь туда свой тип вписать или определить алиас
კაცი
type Blocks = <your-type>
Рома
а сама инициализация?
Рома
как должна выглядить
Маjко
Ну или методом new, тогда вроде можно через алиас
Рома
это все я уже делал, а именно во время объявление объекта нужно проиницализировать 10000 array
Рома
обычно если мало я просто делаю так object{n: 32};
Маjко
Маjко
Сорри, ток проснулся.
Уже вижу сниппеты выше
Маjко
Я б так сделал:
let blocks: [Button<'a>; 10000] = unsafe { mem::uninitialized() }
for block in blocks.iter_mut() {
*block = initialize()
}
Маjко
Ну или есть у тебя Button: Copy, то можно просто
let blocks = [Button::default(); 10000]
Маjко
Но там у тебя лайфтайм, видимо она явно не Copy)
Денис
ваще в зависимости от того, что такое Button, всё может обернуться по-разному
Денис
Маjко
Маjко
Это массив
Маjко
Он статически должен инициализироваться [в сейф-расте]
Денис
бл, я тупой
Денис
а Copy тогда точно достаточно? то есть он для "непростых" типов тоже работает?
Маjко
Для непростых Copy не бывает
Маjко
Copy по сути означает что все типы внутри тоже Copy
Денис
в общем да, A repeat expression [x; N], which produces an array with N copies of x. The type of x must be Copy.
Рома
сделал так
let mut gg: Game = Game::new(unsafe { mem::uninitialized() });
gg.createworld(&primit1);
Денис
вообще это всё выглядит как пиздец, говоря откровенно
Денис
Рома
Roma
а почему тогда &primit1 не передать в new? %)
Roma
у тебя ща получается что между new и createworld твоя Game в ёбаном стейте
Денис
Roma
да, но это как-то не энфорсится API, ничто не мешает объебаться и отдать дальше недоинициализированный Game
Roma
Vladimir
Рома
сделал как говорили)
Рома
но как Mike и говорил, у меня там все равно чтения не было
Рома
Маjко
Нельзя
Маjко
Это UB
Рома
через цикл внес нужные мне данные
Маjко
Если нужно не все, то хранить стоит Option и по дефолту инициализировать None
Рома
не, мне все нужно
Vladimir
Копи, но mut там или обычная?
Вряд-ли мут раз 1к объектов, сток уникального не будет, но я у тому что по лайфтаймц не понятно копи или нет
Маjко
Там случаем не завезли фичу со сборкой депенденси в релиз при отладочной сборке?
Рома
thread '<unknown>' has overflowed its stack
fatal runtime error: stack overflow
պլհկ
шок, если создать хуилион объектов на стеке
он может закончиться
kalloc
как же, разве Rust бизнес логику не разбирает за разработчика!??
Маjко
Roma
кажется, @GabrielFallen тоже жаловался на маленький стек
Roma
шок, у раста маленький стек
Alexander
https://stackoverflow.com/questions/44003589/how-to-increase-the-stack-size-available-to-a-rust-library
Alexander
Я больше жаловался на отсутствие TCE. 😊
պլհկ
какой поставишь, такой и будет
Денис
Маjко
Αλεχ
https://habr.com/company/hh/blog/418079/