Αλεχ
ну напиши второй вариант)
Αλεχ
скорее всего как второй трейт
Αλεχ
в один трейт нельзя запихнуть разные требования к базовой сигнатуре
պլհկ
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
варвары
Anton
для верности надо было писать лопата
Anton
лучше конечно покопипастить методы с 2 3 4 для каждого кайнда
Ну нету этого в расте, что поделать? Пишите рфц предлогайте имплиментацию
Oleg
А для чего в новом tokio нужен reactor::Handle, если у него нет spawn?
Рома
можно пример как проинициализировать 10000 объектов указанных в другом объекте
Рома
struct Game <'a> { blocks: [Button <'a>; 10000], }
კაცი
impl Game { fn new(blocks: Blocks) -> Game { Game {blocks} } }
კაცი
что за Blocks?
ну это как пример, можешь туда свой тип вписать или определить алиас
კაცი
type Blocks = <your-type>
Рома
а сама инициализация?
Рома
как должна выглядить
Маjко
а сама инициализация?
<your-type> { ••• }
Маjко
Ну или методом new, тогда вроде можно через алиас
Рома
это все я уже делал, а именно во время объявление объекта нужно проиницализировать 10000 array
Рома
обычно если мало я просто делаю так object{n: 32};
Рома
Именно массив?
не понял вопроса
Ма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, всё может обернуться по-разному
Денис
Ну или есть у тебя Button: Copy, то можно просто let blocks = [Button::default(); 10000]
там Clone достаточно емнип https://doc.rust-lang.org/std/macro.vec.html
Ма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
сделал так let mut gg: Game = Game::new(unsafe { mem::uninitialized() }); gg.createworld(&primit1);
оно uninitialized не просто так же; лучше сделай как выше показали, внутри new uninit.. и в цикле присунь туда чот валидное
Roma
а почему тогда &primit1 не передать в new? %)
Денис
так у меня createworld закидывает
так может тебе тогда лучше в хипе выделять память и не трахать мозг?
Roma
у тебя ща получается что между new и createworld твоя Game в ёбаном стейте
Маjко
у тебя ща получается что между new и createworld твоя Game в ёбаном стейте
Если он в createworld не пытается читать из массива, а только пишет и инициализирует всё, то норм
Roma
да, но это как-то не энфорсится API, ничто не мешает объебаться и отдать дальше недоинициализированный Game
Маjко
Разве ссылки не копи?
Копи, но mut там или обычная?
Рома
сделал как говорили)
Рома
но как Mike и говорил, у меня там все равно чтения не было
Маjко
сделал как говорили)
Ты ВСЕ ячейки инициализировал же?
Маjко
Нельзя
Маjко
Это UB
Рома
через цикл внес нужные мне данные
Маjко
Если нужно не все, то хранить стоит Option и по дефолту инициализировать None
Рома
не, мне все нужно
Vladimir
Копи, но mut там или обычная?
Вряд-ли мут раз 1к объектов, сток уникального не будет, но я у тому что по лайфтаймц не понятно копи или нет
Маjко
Там случаем не завезли фичу со сборкой депенденси в релиз при отладочной сборке?
Рома
thread '<unknown>' has overflowed its stack fatal runtime error: stack overflow
պլհկ
шок, если создать хуилион объектов на стеке он может закончиться
kalloc
как же, разве Rust бизнес логику не разбирает за разработчика!??
Roma
кажется, @GabrielFallen тоже жаловался на маленький стек
Roma
шок, у раста маленький стек
Alexander
https://stackoverflow.com/questions/44003589/how-to-increase-the-stack-size-available-to-a-rust-library
Alexander
Я больше жаловался на отсутствие TCE. 😊
պլհկ
какой поставишь, такой и будет
Маjко
Roma
Дефолтный для ОС
Вы мне заголовки портите!
Αλεχ
https://habr.com/company/hh/blog/418079/