Pull to refresh

Comments 7

А кто-нибудь знает откуда взялась конструкция &raw mut . Кто-то криво лайфтайм написал или новое ключевое слово завезли?

Это замена макросу addr_of, позволяет создавать указатели без промежуточной ссылки (reference), что позволяет избежать UB, возникающее при создании ссылки на выражение, которое не выровнено в памяти (not aligned) или не инициализировано.

"Теперь можно использовать изменяемые ссылки в константных контекстах". Чем это отличается от OnceCell и lazy_static? Просто интересно

OnceCell и lazy_static вычисляются один раз, но при выполнении программы, когда происходит первый раз доступ к ним. const как бы тоже вычисляется один раз, но при компиляции программы, и служит не как какое-то конкретное значение, а как текстовый шаблон для подстановки в разных местах программы, так можно написать const v = const { Vec::new() } и в любом месте, где напишешь v будет подставлен свой вектор, а не один заранее вычисленный, на которой будут ссылаться все v. Так можно написать let a = [Vec::new(); 2] и компилятор забракует этот код, т.к ты пытаешься размножить вектор в каждую ячейку массива, а если написать a = [const { Vec::new() }; 2], то все будет норм, как будто ты просто руками написал [Vec::new(), Vec::new()], или будто это тривиально копируемое значение

А разве нельзя было раньше просто запихнуть мутабельную логику в макрос и результат в виде токен стрима подставлять к const? Вроде как по сути тоже самое.

Не знаю точно о чем вы, макросов я избегаю, но думаю, что с макросом так лаконично не получится.

Sign up to leave a comment.

Articles