Anonymous
а это костыль из-за их отсутствия
доня.
для формата макро лучше
Anonymous
о чем весь разговор и шел
доня.
разговор шёл о том что формат макро — костыль
Anonymous
блять
доня.
я тебе говорю шо макрос тут лучше функции
分解物質
потому что вариадик аргументы должны быть фичей
тогда у функции принимающей неопределённое количество аргументов они должны быть все однотипные или нет?
доня.
^
и?
доня.
ты написал шо format — костыль но ведь нет
Anonymous
ты написал шо format — костыль но ведь нет
та часть что отвечает за вариадик аргументы это костыль
分解物質
то есть все аргументы могут быть разного типа но реализующие конкретный трейт?
分解物質
это вызовет сложность в реализации
分解物質
ну по крайней мере уже не zero-cost
доня.
хз, вот сахарок для опциональных аргументов использующий Option наверное неплохо было бы
доня.
это вызовет сложность в реализации
ну вектор трейт обжектов, не сложно, но не zero-cost, да
分解物質
runtime type information теперь и в rust
分解物質
нужно больше абстракций
分解物質
а то программировать слишком сложно
Vladimir
та да, я говорил про вариадики, что они с такой же вероятностью должны появится как и перегрузка (так как частный случай онной)
Vladimir
и имхо этого не будет
Vladimir
но эт не точно
Anonymous
ну по крайней мере уже не zero-cost
https://play.rust-lang.org/?gist=71114170aa3ff3b8d36601c6c4f90c67&version=nightly
Anonymous
runtime type information теперь и в rust
а разве это runtype type information?
Маjко
У меня тут с новым гипером непонятки. Он не дает засунуть в обработчик никакой контекст, даже если контекст обернут в Arc/Rc.
Маjко
lazy_static, конечно, спасет ситуацию
Маjко
Но это как-то оч странно и я надеюсь, что есть другое решение
Маjко
Может кто подсказать чего от меня хочет гипер?
Loo
Я прост не понял что он не даёт)
Маjко
Лол, а так сработало. let auth = Authenticator::new(); let server = Http::new().bind(&addr, move || Ok(AuthMiddleware::new(&auth))).unwrap(); server.run().unwrap();
Маjко
Хотя по факту он всё так же мувает
Маjко
Вот так ругался, что параметр bind не реализует Fn let auth = Rc::new(Authenticator::new()); let server = Http::new().bind(&addr, || Ok(AuthMiddleware::new(auth))).unwrap(); server.run().unwrap();
Loo
Возьми Arc и перед let server попробуй let auth = auth.clone();
Маjко
Окей, ща попробуем
Маjко
Но всё же, почему с ссылкой сработало то?
Маjко
Либо это баг, либо там не нужны гарантии Arc
Маjко
@LooMaclin всё, я понял зачем ему Fn и почему с ссылкой работает)
Anonymous
почему?
Маjко
Он хочет эту кложу повторять для каждого запроса
Маjко
Соответственно кложа, мувающая данные не подойдет
Маjко
Так как после первого раза данных уже нет
Маjко
А ссылка "реализует" Copy
Маjко
И ее можно много раз мувнуть)
Маjко
Но почему компилер требует мувнуть auth в кложу и это устраивает hyper я все равно не понял
Маjко
Это какая-то borrowck-магия
Маjко
Сейчас на гитхаб залью
分解物質
а разве это runtype type information?
да информация о типе в рантайме где-то хранится чтобы можно было распознать на что указывает Box и решить какую функцию для преобразования в строку использовать
Anonymous
это разве не в компайл тайме?
Маjко
Трейт-объект не дает сведений в рантайме о реальном типе
Anonymous
даже typeid не в рантайме работает
Маjко
Это просто таблица с указателем на данные и указателями на реализации методов трейта
分解物質
это разве не в компайл тайме?
ну а как наперёд test() может знать когда и с какими типами ему будут подсовывать вектор?
Anonymous
он и не должен это знать ведь
分解物質
как он тогда решает на какой элемент какую функцию вызывать?
分解物質
Debug же отдельно для каждого типа реализован
Anonymous
при кастинге в трейт компилятор будет знать какую имплементацию использовать
Маjко
@LooMaclin https://github.com/DevHeap/circles-server/blob/firebase-auth/services/dispatcher/src/main.rs
Anonymous
https://play.rust-lang.org/?gist=71114170aa3ff3b8d36601c6c4f90c67&version=nightly
кстати какой-то очень огромный асм
Anonymous
вот есть полный список ошибок компиляции, а есть такой же для warnings?
分解物質
при кастинге в трейт компилятор будет знать какую имплементацию использовать
блин, test() скомпиился в 181 строку абсолютно непонятного асм кода, даже не знаю
Anonymous
в релиз режиме?
分解物質
opt-level=3
Маjко
Там же формат. это норма
Anonymous
надо без него попробовать
分解物質
при кастинге в трейт компилятор будет знать какую имплементацию использовать
а, ну да, он так только какие-то указатели на vtable загружает перед вызовом test()
Vladimir
покажи код
պլհկ
Напоминаю: http://meetu.ps/e/D6FjB/n6fTM/a
Loo
impl Map<String, Value> { /// Makes a new empty Map. #[inline] pub fn new() -> Self { Map { map: MapImpl::new() } } #[cfg(not(feature = "preserve_order"))] /// Makes a new empty Map with the given initial capacity. #[inline] pub fn with_capacity(capacity: usize) -> Self { // does not support with_capacity let _ = capacity; Map { map: BTreeMap::new() } }
Loo
ахах. это божественно
Loo
serde_json это
Alex
պլհկ
https://www.reddit.com/r/rust/comments/6zdvza/my_experience_participating_in_highload_cup_re/?st=J7G2U5AW&sh=eb3042eb
Маjко
Ору
Маjко
Пойду на говнокод закину
Alex
> I’m not a backend developer. I have some understanding of servers, but no working experience in the area. Финита
Alex
> I picked Rocket as framework because it allows to skip the boilerplate К черту асинхронщину