Oleg
Oleg
байтовый размер Option<A> такой же как у А
Oleg
т.е. безтеговое представление
Sergey
Oleg
вот подумал, не дали ли это безтеговое представление в руки кодерам. Но вы мне многократно говорили - нет
Sergey
https://play.rust-lang.org/?gist=72b87df7a72a777496d6075d1797053e&version=stable&mode=debug
Oleg
Oleg
и как это мне помогает?
Oleg
я лишь продемонстрировал, что
Oleg
Option это всегда 4 байта тэг + sizeof(data)
Oleg
это не всегда
Sergey
да
Sergey
https://play.rust-lang.org/?gist=6d71a7cfec37b45e6ddd19a60ab34589&version=stable&mode=debug
просто двойной размер
Oleg
но я же не могу сделать енам на 2^32 - 1 значений
Oleg
чтобы воспользоваться этим
Oleg
Sergey
лишь говорю что там нет 4 байта на тег
պլհկ
Вообще-то вроде не относится к кешу, как я понял.
проблема там следующая
1) записали в x.tmp
2) не синкнули
3) заренеймили x.tmp в x
4) читается из x теперь *новое* (потому что из кэша)
5) на диске x.tmp еще пустой
дернули вилку и куку (но в задаче не было про дергание вилки)
Oleg
типа стандартное поведение за исключением нескольких избранных
Oleg
ну потому что это особые случаи, о которых я сразу упомянул и в надежде на то, Что это поведение можно эксплоитить пришёл в этот чат
Sergey
а ок
Vladimir
Vladimir
а ок
К булу поидее ещё можно 253 пустых варианта энама прикрутить , и будет один байт👍
Vladimir
Как тебе такое, Илона Маск?
Oleg
мне вот самое близкое такое пришло в голову
https://play.rust-lang.org/?gist=67381e9817c1b9c06458fc25dcd81770&version=nightly&mode=debug
Sergey
Vladimir
Vladimir
И поидее можешь юзать массив
Vladimir
Но извращение это конечно
Oleg
Ой да я конечно никаких настоящих программ писать не намереваюсь. Просто интересуюсь
Sergey
только игрушечные
Антон
Vladimir
Да а чё, можно и написать что-то
Vladimir
А в методах сделать работу с сырыми указателями, типа addr&-4 (или какая там маска). И будет у тебя полноценный инт, только без единицы
Vladimir
В опшине
Cuno
Vladimir
Маjко
Cuno
Вообще эту проблему специализация не решает? Нельзя сделать специализацию для типов, которые уже сами по себе имеют "пустое" состояние?
Vladimir
Я не уверен что можно специализировать не свои типы
Антон
Vladimir
Вообще да, мы говорим о специализации в том или ином виде.
Vladimir
Cuno
но это потребовало бы немного странного, так как там был разный memory layout
Vladimir
Антон
Почему нет?
Потому что Non**Zero**, а по условию ненулевое значение соптимизировать надо
Vladimir
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 — можно будет отдельные значения исключать, наверное
Evgεny
У вас тут высокоинтеллектуальные дискуссии, но позвольте простой вопрос: есть функция, в которой открывается файл, а потом делается serde_json, оба могу вернуть ошибки. Как правильно использовать failure или нужен ли он вообще, чтобы нормально описать тип на выходе? Или все-таки мапить ошибки?
Vladimir
Vladimir
Антон
Oleg
Sergey
дотнет например умеет хендлить отмененные запросы
и может роллбечить изменения, если они были
Oleg
я только кучу срактов видел
Sergey