Хороший, годный RFC, который наконец-то приняли (всего-то через год).
Согласен, годный РФЦ.
Можно на русском, пожалуйста?
А мне вот ненравится, что uninitialized - функция этапа выполнения, а не макрос этапа компиляции.
mem::uninitialized::<!> возвращает тип !, что значит что данная функция не возвращает управление, что значит что всё после неё мёртвый код и его можно выбросить.
Э? Я думал, во время выполнения эта “функция” ничего не делает. Она же память не выделяет?
Выделяет память конечно же. Поэтому она не может быть макросом. Что ты имеешь ввиду?
Как я понимаю, не выделяет - а “просит” незаполнять память нулями.
Мне бы где-то статическую переменную завести неинициализированную, и где-нибудь в мэйне ее присвоить.
Выделяет и просит ничего не делать. Системный аллокатор памяти (jemalloc или обычный из libc) обычно выдаёт неинициализированную память.
Вот. И макрос мог бы выделять в рантайме, а и при компиляции, если это статик, то просить, чтобы компилятор выделил.
Ничего не понимаю.
Статические данные будут положены в .data и проинициализируются нулём в любом случае.
Зачем ты хочешь статик, который не инициализирован?
Чтобы не инициализировать их явно. Допустим, у меня в структуре тыща полей, и они все инитятся в меине.
Если я хочу себе такую глобальную переменную, то я вынужден их все перечислить и инициализировать. А мне это ненужно, потому что из меин оно все равно перетрется.
lazy_static! в этом случае тоже плох - так как в него нельзя передавать аргументы.