The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск Rust 1.72. Решение поставлять макрос  serde_derive только в скомпилированном виде, opennews (??), 24-Авг-23, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


29. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  –1 +/
Сообщение от Аноним (29), 24-Авг-23, 23:48 
> требует обязательной инициализации значений переменных перед использованием

Может и безопасно, но снижает производительность.

Ответить | Правка | Наверх | Cообщить модератору

30. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  –1 +/
Сообщение от Ananimus (?), 24-Авг-23, 23:50 
>> требует обязательной инициализации значений переменных перед использованием
> Может и безопасно, но снижает производительность.

Говорят нам любители сишных strlen() и LIST_FOR_EACH(), ага :D

Ответить | Правка | Наверх | Cообщить модератору

38. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  –1 +/
Сообщение от burjui (ok), 25-Авг-23, 01:44 
Производительность чего, чтения мусора из памяти?
Ответить | Правка | К родителю #29 | Наверх | Cообщить модератору

49. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от _ (??), 25-Авг-23, 04:13 
Ну если у тебя в памяти мусор то И ...
Но ты ведь помнишь как дебиановцы "лохов" из OpenBSD/OpenSSH поправили и проинициализировали :)
После этого пароль подбирался на простом кнопочном калькуляторе за 5 минут.
Откатили после всепланетного рофла :)
Так что же выходит - не весь мусор в памяти одинаково вреден? Представляю как растишек в этом месте "... разрывает на части!(С)" :)
Ответить | Правка | Наверх | Cообщить модератору

74. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от burjui (ok), 25-Авг-23, 09:48 
> Ну если у тебя в памяти мусор

Чтение неинициализированной памяти - UB, будь то Rust или C, если за читаемым адресом действительно память, а не MMIO.

> Но ты ведь помнишь как дебиановцы "лохов" из OpenBSD/OpenSSH поправили и проинициализировали

Не помню, напомните.

Ответить | Правка | Наверх | Cообщить модератору

77. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (80), 25-Авг-23, 09:53 
https://github.com/g0tmi1k/debian-ssh
Ответить | Правка | Наверх | Cообщить модератору

128. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +1 +/
Сообщение от burjui (ok), 25-Авг-23, 12:55 
Для инициализации PRNG следует использовать специально для этого предназначенные источники энтропии, и в Linux это /dev/random, а не мусор из памяти.
Ответить | Правка | Наверх | Cообщить модератору

187. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от _ (??), 26-Авг-23, 17:29 
Ну дык что - пропвтчишь ssh то, покажешь лохам как надо? Или так потрепалсО и в кусты? :-)
Ответить | Правка | Наверх | Cообщить модератору

217. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от burjui (ok), 27-Авг-23, 14:52 
Иди сам пропатч, чудо. Этому багу уже больше 10 лет.
Ответить | Правка | Наверх | Cообщить модератору

91. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +1 +/
Сообщение от Аноним (91), 25-Авг-23, 10:10 
> Чтение неинициализированной памяти - UB, будь то Rust или C

нет, расширяй кругозор

https://github.com/u-boot/u-boot/blob/291055efee4e1ae4ad0b62...

Ответить | Правка | К родителю #74 | Наверх | Cообщить модератору

118. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноньимъ (ok), 25-Авг-23, 11:21 
Объясните как из приведенной ссылки следует что это не UB ?
Ответить | Правка | Наверх | Cообщить модератору

120. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 25-Авг-23, 11:43 
> как из приведенной ссылки следует что это не UB ?

нужно чтение но результат чтения не имеет значения - если контроллер памяти не выдаёт ошибку таймаута при доступе за пределами первого ранка то память двухранковая.

Для тебя есть примеры попроще - многоядерные системы с общей памятью, или просто шаред мемори  в многопотоке - инициализация нужна только с одной стороны, с другой вообще может быть только ридонли.

Ответить | Правка | Наверх | Cообщить модератору

123. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от morphe (?), 25-Авг-23, 12:37 
А при чём тут железо вообще? UB это про то, что компилятор имеет право подобный код скомпилировать как угодно
https://research.swtch.com/ub#uninit
Ответить | Правка | Наверх | Cообщить модератору

127. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 25-Авг-23, 12:49 
> А при чём тут железо вообще?

при том что ответ был на пост про железо

> Чтение неинициализированной памяти - UB, будь то Rust или C, если за читаемым адресом действительно память, а не MMIO.

и привёл примеры где нет никакого неопределенного поведения при доступе к неинициализированной памяти "не MMIO"

https://en.wikipedia.org/wiki/Memory-mapped_I/O_and_port-map...

Ответить | Правка | Наверх | Cообщить модератору

135. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Ананимус (?), 25-Авг-23, 13:22 
> и привёл примеры где нет никакого неопределенного поведения при доступе к неинициализированной памяти

Примеры чего? В стандарте написано что чтение неинициализированной переменной это UB.

Например:

int b;

if (b > 10)
    puts("опеннетчики не могут в стандарт C");
else
    puts("опеннетчики точно не могут в стандарт C");

Вот это применр невалидного кода, с которым цомпилятор может сделать что угодно. Например, выкинуть обе ветки.

Ответить | Правка | Наверх | Cообщить модератору

146. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 25-Авг-23, 14:16 
> Примеры чего? В стандарте написано что чтение неинициализированной переменной это UB.

примеры того что можешь подтереться стандартами и UB нет

> цомпилятор может сделать что угодно. Например, выкинуть обе ветки

для таких случаев есть volatile int b - иди подучись

Ответить | Правка | Наверх | Cообщить модератору

147. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Ананимус (?), 25-Авг-23, 14:19 
> примеры того что можешь подтереться стандартами и UB нет

Ты же понимаешь что компилятор не очень заботит чем ты подтираешься и он будет следовать стандарту?

> для таких случаев есть volatile int b

То есть ты настолько настроен писать говнокод что вместо инициализации переменной будешь volatile совать?

Ответить | Правка | Наверх | Cообщить модератору

149. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 25-Авг-23, 14:32 
> вместо инициализации переменной будешь volatile совать?

конечно если это нужно, а ты переменную в памяти которую можно только читать будешь инициализировать ?

Ответить | Правка | Наверх | Cообщить модератору

150. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Ананимус (?), 25-Авг-23, 14:52 
> конечно если это нужно, а ты переменную в памяти которую можно только читать будешь инициализировать ?

Ветка вообще не про это.

Ответить | Правка | К родителю #149 | Наверх | Cообщить модератору

153. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 25-Авг-23, 15:07 
> Ветка вообще не про это.

как раз про это - ты не понимаешь что часто требуется не инициализировать память, но ведь чтобы понять надо опыт программирования иметь а не языком чесать про безопасность.

Ответить | Правка | К родителю #150 | Наверх | Cообщить модератору

154. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Ананимус (?), 25-Авг-23, 15:31 
> как раз про это - ты не понимаешь что часто требуется не инициализировать память, но ведь чтобы понять надо опыт программирования иметь а

Ох... это требуется в двух случаях: tight loop и общение с железом. В первом случае нет никаких чтений неинициализированной памяти (потому что это мать его UB), а второе это специальный случай с volatile.

Ответить | Правка | К родителю #153 | Наверх | Cообщить модератору

209. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 27-Авг-23, 10:03 
> Ох... это требуется в двух случаях: tight loop и общение с железом. В первом случае нет никаких чтений неинициализированной памяти (потому что это мать его UB), а второе это специальный случай с volatile.

в ядре Linux 80% кода это драйверы железа, т.е примерно всегда, охай дальше

Ответить | Правка | К родителю #154 | Наверх | Cообщить модератору

219. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Ананимус (?), 27-Авг-23, 18:15 
Прекрасно, как код драйвера железа относится к exfat?
Ответить | Правка | К родителю #209 | Наверх | Cообщить модератору

220. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 27-Авг-23, 19:07 
>> в ядре Linux 80% кода это драйверы железа
> как код драйвера железа относится к exfat?

exfat по твоему к железу относится ? тебя кто-то обманул

Ответить | Правка | К родителю #219 | Наверх | Cообщить модератору

221. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Ананимус (?), 27-Авг-23, 21:06 
> exfat по твоему к железу относится

Нет, я спрашиваю как exfat или device mapper относятся к железу. Потому что дыреней там из-за пердолева с неинициализированной памятью не меньше.

Ответить | Правка | К родителю #220 | Наверх | Cообщить модератору

222. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 27-Авг-23, 23:10 
> Нет, я спрашиваю как exfat или device mapper относятся к железу. Потому что дыреней там из-за пердолева с неинициализированной памятью не меньше.

ты знаешь что не относится к железу но всё равно спрашиваешью Это наверно как-то должно отменить факт что доступ к регистрам MMIO повсеместно через volatile, может ты считаешь что CPU програмно должен инициализировать тысячи регистров в железе а не его аппаратный сброс и это как-то поможет устранить ошибки exfat и device mapper ? Тебя кто сильно обманул.

Ответить | Правка | К родителю #221 | Наверх | Cообщить модератору

231. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Ананимус (?), 28-Авг-23, 12:48 
> Это наверно как-то должно отменить факт что доступ к регистрам MMIO повсеместно через volatile

Это прекрасно, но то что доступ к MMIO через volatile не отменяет того факта что код вокруг этого volatile это капля в море и все равно специальный случай.

Ответить | Правка | К родителю #222 | Наверх | Cообщить модератору

232. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Ананимус (?), 28-Авг-23, 12:51 
>> Нет, я спрашиваю как exfat или device mapper относятся к железу. Потому что дыреней там из-за пердолева с неинициализированной памятью не меньше.
> наверно как-то должно отменить факт что доступ к регистрам MMIO повсеместно
> через volatile, может ты считаешь что CPU програмно должен инициализировать тысячи
> регистров в железе а не его аппаратный сброс

Чтобы не быть голословным:

$ cd ~/src/linux/drivers/net/ethernet/intel
$ git grep -c volatile .
e1000/e1000_hw.h:11
i40e/i40e_txrx.h:1

Ответить | Правка | К родителю #222 | Наверх | Cообщить модератору

233. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 28-Авг-23, 15:54 
> $ cd ~/src/linux/drivers/net/ethernet/intel
> $ git grep -c volatile .

в коде драйверов кроссплатформенные readX/writeX, ioreadX/iowriteX и тд и надстройки над ними, а  implmentation defined реализации этих ф-ций в /arch

https://www.opennet.ru/openforum/vsluhforumID3/131335.html#172

Ответить | Правка | К родителю #232 | Наверх | Cообщить модератору

234. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Ананимус (?), 28-Авг-23, 16:14 
> в коде драйверов кроссплатформенные readX/writeX, ioreadX/iowriteX и тд и надстройки над ними, а  implmentation defined реализации этих ф-ций в /arch

Ага. Поэтому у тебя работа с volatile спрятана в двух функциях и не торчит наружу. Прямо как ненавидимый местными поциентами unsafe :D

Ответить | Правка | К родителю #233 | Наверх | Cообщить модератору

236. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 28-Авг-23, 17:45 
> работа с volatile спрятана в двух функциях

она не спрятана - ф-ции чтения/записи с гарантией того что вызовы не будут переупорядочены зависит от модели памяти архитектуры на которой исполняется код, если не заметил кроме volatile в реализации есть ещё барьеры памяти, сделано так чтобы писать кроссплатформенные драйверы.

Ответить | Правка | К родителю #234 | Наверх | Cообщить модератору

243. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Ананимус (?), 29-Авг-23, 13:27 
>> работа с volatile спрятана в двух функциях
> она не спрятана - ф-ции чтения/записи с гарантией того что вызовы не
> будут переупорядочены зависит от модели памяти архитектуры на которой исполняется код,
> если не заметил кроме volatile в реализации есть ещё барьеры памяти,
> сделано так чтобы писать кроссплатформенные драйверы.

Она спрятана в функции. Прям внутри.

Изначально речь шла о том, что читать неинициализированную память -- UB в C, поэтому переменные все-таки хорошо бы инициализировать кроме тех случаев, когда это может мешать. Вылез какой-то упырь со своим volatile и начал орать что мы ничего не понимаем, но суть в том, что обращение к памяти устройства это как раз-таки специальный случай для которого этот volatile и используется.

Так что на общий случай "положили массив на стек" или "создали пару переменных" наличие volatile не влияет никак.

Ответить | Правка | К родителю #236 | Наверх | Cообщить модератору

244. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 29-Авг-23, 16:09 
> Она спрятана в функции. Прям внутри.
> начал орать что мы ничего не понимаем

объяснил на пальцах, и да ты ничего не понимаешь

> обращение к памяти устройства это как раз-таки специальный случай

если этот специальный случай случается постоянно то не такой и специальный, тем более в современных процессорах с десятками ядер и сопроцессоров и общей для всех памятью

> переменные все-таки хорошо бы инициализировать

так их и надо инициализировать когда нужно, а когда не нужно  - не надо, до тебя такие простые вещи не доходят

Ответить | Правка | К родителю #243 | Наверх | Cообщить модератору

251. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Ананимус (?), 31-Авг-23, 16:55 
> так их и надо инициализировать когда нужно, а когда не нужно  - не надо

Ты условил самую суть! Поэтому в Rust память инициализируются по умолчанию. Для тех случаев, когда не надо сделали MaybeUninit.

Ответить | Правка | К родителю #244 | Наверх | Cообщить модератору

158. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от burjui (ok), 25-Авг-23, 18:01 
Хорошо, здесь вы правы, я выразился неточно: UB не сам факт чтения, и именно использование неинициализированной памяти.

(void) readl((void *) rank1_base);

Т.к. здесь данные не используются, UB нет. Впредь постараюсь быть точнее.

Ответить | Правка | К родителю #91 | Наверх | Cообщить модератору

163. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 25-Авг-23, 21:43 
> Т.к. здесь данные не используются, UB нет.

они могут и использоваться - буферы DMA from device, общая память IPC mailbox/msgbox в SoC из которой читаешь сообщения от асинхронной корки - пишет туда сопроцессор которым упраляешь а не твой код на CPU, это аналогично MMIO но в обычной памяти.

Ответить | Правка | Наверх | Cообщить модератору

165. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Someone (??), 25-Авг-23, 22:36 
Разве в стандарте не говорится просто об чтении?
В любом случае для LLVM чтение неинициализированной памяти кажется точно UB
Ответить | Правка | К родителю #158 | Наверх | Cообщить модератору

188. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от _ (??), 26-Авг-23, 17:38 
Тогда бы им можно было только хилоуворды(С) собирать. А им даже вёдра собирают.
Ответить | Правка | Наверх | Cообщить модератору

164. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Someone (??), 25-Авг-23, 22:27 
Это UB для LLVM. Это означает что компилятор может скомпилировать этот код как ему захочется, например просто выкинуть.

Ведь записи в память не происходит, а значит и чтения тоже нет.

Ответить | Правка | К родителю #91 | Наверх | Cообщить модератору

172. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (91), 26-Авг-23, 01:18 
> Это UB для LLVM. Это означает что компилятор может скомпилировать этот код как ему захочется, например просто выкинуть.

при чём тут LLVM - шланг стандарт С не признаёт и выкинет доступ к volatile ?

https://elixir.bootlin.com/u-boot/latest/source/arch/arm/inc...

https://elixir.bootlin.com/u-boot/latest/source/arch/arm/inc...

Ответить | Правка | Наверх | Cообщить модератору

66. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  –1 +/
Сообщение от Аноним (29), 25-Авг-23, 09:10 
Допустим, есть большой массив. Есть поток данных. Массив постепенно заполняется, по мере поступления данных. Инициализация всего массива – лишняя и ненужная трата времени, если алгоритм программы его и так весь заполнит.
Ответить | Правка | К родителю #38 | Наверх | Cообщить модератору

103. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +4 +/
Сообщение от Минона (ok), 25-Авг-23, 10:32 
Речь о том что после аллокации памяти под массив из него попытались что-то прочесть раньше чем записать.
Ответить | Правка | Наверх | Cообщить модератору

104. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (97), 25-Авг-23, 10:34 
Ну так можно и не инициализировать. Ансейф раст — всего лишь маркер, что компилятор снимает с себя полномочия по доказательству корректности и перекладывает их на разработчика (что сишка *почти везде*). Никто не запрещает помечать ансейфом вообще всё и писать почти как на сишкчке (и доказывать корректность каждого стейтмента в комментариях), но тогда лучше уж на сишечке и не страдать х-пстернёй ради х-пстерни. Либо использовать ансейф точечно и доказывать в комментах только отдельные оптимизации.
Ответить | Правка | К родителю #66 | Наверх | Cообщить модератору

169. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от morphe (?), 25-Авг-23, 23:47 
> Ансейф раст — всего лишь маркер,
> что компилятор снимает с себя полномочия по доказательству корректности и перекладывает
> их на разработчика

Не верно, никаких он полномочий не перекладывает, все гарантии из safe rust там сохраняются.
Однако в unsafe{} блоке можно вызывать unsafe функции (Сторонние библиотеки например, FFI, или просто функции в которых есть unsafe, и корректность вызова которых должен доказывать пользователь), разыменовывать указатели (не путать с ссылками), обращаться с изменяемыми статичными переменными (static mut), и обращаться к полям union.
Кроме этих дополнительных _разрешений_ unsafe блок ничего не делает.

Ответить | Правка | Наверх | Cообщить модератору

138. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  –1 +/
Сообщение от Ананимус (?), 25-Авг-23, 13:26 
Это буквально то как работает Vec в Rust. Я понимаю что сишным пердолям сложно и они по привычке используют слайсы, но господи Иисусе, нельзя же быть НАСТОЛЬКО некомпетентными.
Ответить | Правка | К родителю #66 | Наверх | Cообщить модератору

176. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (29), 26-Авг-23, 09:47 
Vec – динамический массив, а я про обычный. Работа с динамической памятью может быть медленней, особенно на микроконтроллерах.
Ответить | Правка | Наверх | Cообщить модератору

167. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Someone (??), 25-Авг-23, 22:39 
Для этого есть https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html. Создаешь, пишешь, используешь
Ответить | Правка | К родителю #66 | Наверх | Cообщить модератору

177. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (29), 26-Авг-23, 09:56 
Здорово, но... Лишние строчки кода.
Ответить | Правка | Наверх | Cообщить модератору

181. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Ананимус (?), 26-Авг-23, 11:27 
Если ты боишься что это медленнее будет, то не будет, весь сахар эфемерный и уйдет после компиляции. Если ты хочешь той же семантики что у Vec, то ArrayVec.
Ответить | Правка | Наверх | Cообщить модератору

54. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +1 +/
Сообщение от Твайлайт Спаркл (ok), 25-Авг-23, 06:43 
Можно и неинициализированной памятью пользоваться, но это уже придётся оборачивать unsafe.
Ответить | Правка | К родителю #29 | Наверх | Cообщить модератору

159. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от burjui (ok), 25-Авг-23, 18:07 
Но в неё можно только писать, т.е. инициализировать. Использование неинициализированной памяти - UB, независимо от того, unsafe это или нет.
Ответить | Правка | Наверх | Cообщить модератору

60. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +1 +/
Сообщение от eganru (?), 25-Авг-23, 08:35 
В большинстве случаев нет.

В rust есть оптимизатор, который позволяет в простых случаях всё ненужное убрать.

Ответить | Правка | К родителю #29 | Наверх | Cообщить модератору

108. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Аноним (97), 25-Авг-23, 10:45 
Ну, *лично я* как правило не доверяю оптимизациям, они если и работают, то как правило не до конца оптимально, для оптимизации горячего кода на уровне инструкций и циклов приходится бить компилятор по рукам, писать ансейф, а то и вовсе напрямую дёргать ллвм-интринсики. Но это только действительно горячий код и только под каждую конкретную платорму. Да, такое лучше делать на сишечке, но не всегда представляется возможным.
Ответить | Правка | Наверх | Cообщить модератору

136. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от eganru (?), 25-Авг-23, 13:22 
Я пока вилами и факелом в угол не загнали стараюсь не оптимизировать код, который работает.
Ответить | Правка | Наверх | Cообщить модератору

137. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +1 +/
Сообщение от Ананимус (?), 25-Авг-23, 13:23 
> Ну, *лично я* как правило не доверяю оптимизациям

Собираешь с -O0?

Ответить | Правка | К родителю #108 | Наверх | Cообщить модератору

168. "Выпуск Rust 1.72. Поставка пакета serde_derive только в ском..."  +/
Сообщение от Someone (??), 25-Авг-23, 22:42 
https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html

Это то что нужно знать, если уж хочется неинициализировать данные

Ответить | Правка | К родителю #29 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру