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
պլհկ
В чем сложность-то
Cuno
Ма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
Как понятно?
там поинтер, любое "специальное" значение впихнуть за тег
Cuno
Marat
Маjко
А, типа Option<Vec>::None == Vec::pointer=NULL?
Cuno
պլհկ
Cuno
Cuno
Cuno
если repr(c)
Marat
А не не любой енам
Marat
Только если енам из двух елементов один NonZero, другой пустой, тогда могут соптимизировать
Marat
Ну это логично
Cuno
Cuno
ну вот, а Я думал они оба по 8 и компилятор творит какую-то лютую магию
Cuno
Поля он кстати не реордерит, хоть и мог бы. Т.е. без [repr(c)] так же 12
Cuno
И даже если поля в одинаковом порядке то так же 12, еще есть куда развиваться.
պլհկ
Marat
Ладно зачем-то выяснил, что растовский Duration конвертит внутри себя все в наносекунды и падает с overflow если не может это сделать. Не то, что бы конечно кому-то в здравом уме это понадобится, но все таки, а как же безопасность?
Anton
Berkus
red75prime
Anton
Да, дебажить будет трудно :)
Marat
Хмм, а на play.rust-lang.org не падает
Marat
Видимо это на маке зачем то конвертит
Cat
Marat
А не, это вообще я хуйню несу, я ж там передаю его дальше, а там его таймер конвертит
Cat
red75prime
И
This constructor will panic if the carry from the nanoseconds overflows the seconds counter.
red75prime
500 миллиардов лет и переполнение в наносекундах
Cat
эм
Cat
это же немного про другое
Cat
про то, что паникует в случае, когда (избыток наносекунд + секунды) > u64::MAX
Cat
Денис
ну пора уже вводить константные дженерики, или как там это называется
Marat
Денис
чтобы невозможно было задать наносекунд больше, чем 1e9
Cat
да, и чтобы 2^64 ≠ 0
Marat
Ну так там все равно все в двух полях хранится, зачем вообще переносить
Денис
^ that
Marat
Marat
Когда запросят тогда и париться
Cat
а если часто просят?
Денис
блжад кто это апвоутит https://www.reddit.com/r/rust/comments/940jtb/cargolight_a_cargo_subcommand_that_finds_shadowed/
Marat
Хотя конечно конструктор скорее всего будет вызываться реже чем запрашивается
Marat
А вот кстати методы as_nanos они сделали чтобы никаких паник не было
Cat
так в этом есть смысл
fail fast, или как оно там называется
պլհկ
Денис
во-первых клиппи это и так умеет, во-вторых этот "плагин" юзабелен только если ты прям ваще не используешь шадоуинг, а мне всегда казалось, что это вполне себе позитивный паттерн в расте
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
ну мог бы, наверное... эшли вроде норм нахуевертила