Oleg
Ну это не совсем то, что ты хочешь, но если сам пишешь генерики, то норм
ну я вот подумал про ассошиэтед тайпс, подумал, что может уже такое есть
Oleg
байтовый размер Option<A> такой же как у А
Oleg
т.е. безтеговое представление
Sergey
Oleg
вот подумал, не дали ли это безтеговое представление в руки кодерам. Но вы мне многократно говорили - нет
Oleg
так и для своей энамки тоже
? для какой моей энамки? у меня нет энамки
Sergey
https://play.rust-lang.org/?gist=72b87df7a72a777496d6075d1797053e&version=stable&mode=debug
Oleg
и как это мне помогает?
Oleg
я лишь продемонстрировал, что
Oleg
Option это всегда 4 байта тэг + sizeof(data)
Oleg
это не всегда
Sergey
да
Sergey
это не всегда
я плюсую к этому
Sergey
https://play.rust-lang.org/?gist=6d71a7cfec37b45e6ddd19a60ab34589&version=stable&mode=debug просто двойной размер
Oleg
но я же не могу сделать енам на 2^32 - 1 значений
Oleg
чтобы воспользоваться этим
Sergey
что ты показываешь мне?
я тебе ничего доказать не пытаюсь)
Sergey
лишь говорю что там нет 4 байта на тег
Oleg
лишь говорю что там нет 4 байта на тег
там есть один байт на тег + выравнивание по 4
պլհկ
Вообще-то вроде не относится к кешу, как я понял.
проблема там следующая 1) записали в x.tmp 2) не синкнули 3) заренеймили x.tmp в x 4) читается из x теперь *новое* (потому что из кэша) 5) на диске x.tmp еще пустой дернули вилку и куку (но в задаче не было про дергание вилки)
Oleg
типа стандартное поведение за исключением нескольких избранных
Sergey
там есть один байт на тег + выравнивание по 4
и почему это выравнивание не видно в случае с 1 1 2 ?
Oleg
ну потому что это особые случаи, о которых я сразу упомянул и в надежде на то, Что это поведение можно эксплоитить пришёл в этот чат
Sergey
а ок
Vladimir
а ок
К булу поидее ещё можно 253 пустых варианта энама прикрутить , и будет один байт👍
Vladimir
Как тебе такое, Илона Маск?
Oleg
мне вот самое близкое такое пришло в голову https://play.rust-lang.org/?gist=67381e9817c1b9c06458fc25dcd81770&version=nightly&mode=debug
Vladimir
мне вот самое близкое такое пришло в голову https://play.rust-lang.org/?gist=67381e9817c1b9c06458fc25dcd81770&version=nightly&mode=debug
Ток тестами не забудь все такое обложить, а то у раста abi не стабильное
Vladimir
И поидее можешь юзать массив
Vladimir
Но извращение это конечно
Oleg
Ой да я конечно никаких настоящих программ писать не намереваюсь. Просто интересуюсь
Sergey
только игрушечные
Vladimir
Да а чё, можно и написать что-то
Vladimir
А в методах сделать работу с сырыми указателями, типа addr&-4 (или какая там маска). И будет у тебя полноценный инт, только без единицы
Vladimir
В опшине
Vladimir
есть мнение что это еще менее эффективно чем Into<Option<i32>> for Shit
Про эффективность никто не говорит, не нужно лишний раз into дергать👍
Cuno
Вообще эту проблему специализация не решает? Нельзя сделать специализацию для типов, которые уже сами по себе имеют "пустое" состояние?
Vladimir
Я не уверен что можно специализировать не свои типы
Vladimir
Вообще да, мы говорим о специализации в том или ином виде.
Cuno
Я не уверен что можно специализировать не свои типы
Нет, идея в том чтобы добавить специализацию для Option
Cuno
но это потребовало бы немного странного, так как там был разный memory layout
Cuno
Кто должен её добавить?
Стандартная библиотека, очевидно
Антон
Почему нет?
Потому что Non**Zero**, а по условию ненулевое значение соптимизировать надо
Vladimir
Стандартная библиотека, очевидно
Специализацию для чего?
Vladimir
Какого именно опшина
Oleg
ага, всё-таки была похожая идея
Oleg
https://doc.rust-lang.org/core/num/struct.NonZeroI32.html
Oleg
но только там выколотое значение - это 0
Oleg
почему-то
Sergey
кстати
Oleg
мне нужно тогда NonTwoPowThirtyOneMinusOne32
Sergey
футурки отменять можно?
Cuno
Какого именно опшина
для Option<T> where T: IsNone, но опять же, тут требуется другой memory layout, это невозможно, нужна новая фича
Антон
Вот завезут const generics — можно будет отдельные значения исключать, наверное
Cuno
футурки отменять можно?
просто перестаешь поллить
Evgεny
У вас тут высокоинтеллектуальные дискуссии, но позвольте простой вопрос: есть функция, в которой открывается файл, а потом делается serde_json, оба могу вернуть ошибки. Как правильно использовать failure или нужен ли он вообще, чтобы нормально описать тип на выходе? Или все-таки мапить ошибки?
Sergey
просто перестаешь поллить
то есть отменить запрос нельзя?
Vladimir
мне нужно тогда NonTwoPowThirtyOneMinusOne32
Да не, трейт только в ноль умеет
Cuno
то есть отменить запрос нельзя?
Смотря что ты подразумеваешь под "отменить запрос"
Sergey
Смотря что ты подразумеваешь под "отменить запрос"
оборвать соединение с сервером (или вообще не отправлять его)
Vladimir
Sergey
дотнет например умеет хендлить отмененные запросы и может роллбечить изменения, если они были
Oleg
я только кучу срактов видел
Vladimir
оборвать соединение с сервером (или вообще не отправлять его)
Если внешне, то екзекутор должен Перестать полить, если екзекутор не умеет, то нужно в футорку пробросить канал который умеет завершать футорку