Marat
И без нон зиро он два байта
Cuno
Marat
А точно
Cuno
Vec<T> и Option<Vec<T>> тоже одинаковых размеров, интересно
Cuno
https://play.rust-lang.org/?gist=96100c2381c79bdd8746631ce6f4e2c8&version=nightly&mode=debug&edition=2015 Как он это делает
-__-
https://github.com/rust-lang/rfcs/issues/1230
պլհկ
Ну в смысле как? Пишет ноль и считает что это None
պլհկ
В чем сложность-то
Маjко
Null
Cuno
https://play.rust-lang.org/?gist=ab9150a2b3785adb6b9215f936f2f040&version=nightly&mode=debug&edition=2015
Cuno
С вектором понятно, с NonZero понятно
Маjко
Хотя с вектором не понятно
Cuno
вот кейс по линку объясните плс
Маjко
Как понятно?
Маjко
В векторе явно не 8 байт указателя
Маjко
Там то ли 16 то ли 24
Cuno
Как понятно?
там поинтер, любое "специальное" значение впихнуть за тег
Маjко
А, типа Option<Vec>::None == Vec::pointer=NULL?
Marat
А что ещё?
Ну для любых енамов
-__-
вот кейс по линку объясните плс
Раст может реордерить поля структуры
Cuno
если repr(c)
Marat
А не не любой енам
Marat
Только если енам из двух елементов один NonZero, другой пустой, тогда могут соптимизировать
Marat
Ну это логично
Cuno
https://play.rust-lang.org/?gist=ab9150a2b3785adb6b9215f936f2f040&version=nightly&mode=debug&edition=2015
А тьфу, там размер 12. Option просто использует тег Test
Cuno
ну вот, а Я думал они оба по 8 и компилятор творит какую-то лютую магию
Cuno
Поля он кстати не реордерит, хоть и мог бы. Т.е. без [repr(c)] так же 12
Cuno
И даже если поля в одинаковом порядке то так же 12, еще есть куда развиваться.
Marat
Ладно зачем-то выяснил, что растовский Duration конвертит внутри себя все в наносекунды и падает с overflow если не может это сделать. Не то, что бы конечно кому-то в здравом уме это понадобится, но все таки, а как же безопасность?
red75prime
вот кейс по линку объясните плс
Одно значение тэга энума берётся под Option::None . Опоздал
Anton
Да, дебажить будет трудно :)
Marat
Хмм, а на play.rust-lang.org не падает
Marat
Видимо это на маке зачем то конвертит
Berkus
Да, дебажить будет трудно :)
ну ты делаешь слип, а дальше это проблемы твоих потомков уже)
Marat
А не, это вообще я хуйню несу, я ж там передаю его дальше, а там его таймер конвертит
red75prime
И This constructor will panic if the carry from the nanoseconds overflows the seconds counter.
red75prime
500 миллиардов лет и переполнение в наносекундах
Cat
эм
Cat
это же немного про другое
Cat
про то, что паникует в случае, когда (избыток наносекунд + секунды) > u64::MAX
Cat
а так да, всего каких-то
Денис
ну пора уже вводить константные дженерики, или как там это называется
Денис
чтобы невозможно было задать наносекунд больше, чем 1e9
Cat
да, и чтобы 2^64 ≠ 0
Berkus
Ну это да, но тоже непонятно зачем
чтобы вместо 584 миллиардов лет не получилось 0?
Marat
Ну так там все равно все в двух полях хранится, зачем вообще переносить
Cat
Ну так там все равно все в двух полях хранится, зачем вообще переносить
> fn new(secs: u64, nanos: u32) -> Duration предлагаешь просто откидывать избыток?
red75prime
Ну так там все равно все в двух полях хранится, зачем вообще переносить
чтобы можно было сделать Duration::new(0,3_000_000_000) и не париться с конвертацией
Денис
^ that
Marat
Когда запросят тогда и париться
Cat
а если часто просят?
Денис
блжад кто это апвоутит https://www.reddit.com/r/rust/comments/940jtb/cargolight_a_cargo_subcommand_that_finds_shadowed/
Marat
Хотя конечно конструктор скорее всего будет вызываться реже чем запрашивается
Cat
Хотя конечно конструктор скорее всего будет вызываться реже чем запрашивается
и представь, ты в один момент обнаруживаешь, что всё работало нормально, но внезапно .as_secs() на миллиардный раз паникнуло
Marat
А вот кстати методы as_nanos они сделали чтобы никаких паник не было
Cat
так в этом есть смысл fail fast, или как оно там называется
պլհկ
блжад кто это апвоутит https://www.reddit.com/r/rust/comments/940jtb/cargolight_a_cargo_subcommand_that_finds_shadowed/
А че? Там недавно чувак жаловался что нашел багу из-за шедоуинга
Денис
во-первых клиппи это и так умеет, во-вторых этот "плагин" юзабелен только если ты прям ваще не используешь шадоуинг, а мне всегда казалось, что это вполне себе позитивный паттерн в расте
Berkus
let pook = 1; let pook = pook + 1;
Cat
плюсую к позитивности
Roma
у cargo new кроме bin и lib нету темплейтов, да? (типа таких https://github.com/technomancy/leiningen/blob/master/doc/TEMPLATES.md) нужно нестандартные штуки типа https://github.com/ashleygwilliams/cargo-generate или https://github.com/Keats/kickstart использовать?
Berkus
нету, а зачем
Roma
ну типа актикс мог бы поставлять темлпейт для актикс апки, токио для токио апки, cortex-m-rftm для rtfm
Roma
чот вот трут тут https://internals.rust-lang.org/t/pre-rfc-cargo-templates/5056/40
Berkus
ну мог бы, наверное... эшли вроде норм нахуевертила