The OpenNET Project / Index page

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



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

Оглавление

Выпуск языка программирования Rust 1.77, opennews (?), 22-Мрт-24, (0) [смотреть все]

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


126. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от Аноним (126), 22-Мрт-24, 21:22 
все проблемы программирования сводятся к тому что кодер забыл освободить память?
Ответить | Правка | Наверх | Cообщить модератору

128. "Выпуск языка программирования Rust 1.77"  –1 +/
Сообщение от freecoder (ok), 22-Мрт-24, 21:24 
Не все. Ваш Кэп.
Ответить | Правка | Наверх | Cообщить модератору

152. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от fumanchez (ok), 23-Мрт-24, 04:34 
проблема в том, чтобы найти где же он забыл ее освободить
Ответить | Правка | К родителю #126 | Наверх | Cообщить модератору

156. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от Аноним (156), 23-Мрт-24, 05:37 
Не только. Часть из них бы просто не возникала если бы авторы дыряшки в свое время додумались до простой вещи: когда ты пишешь в коде что-то вроде int *x; то эта штука автоматом инициализировалась бы NULL и финты ушами в стиле "объявил указатель, забыл присвоить ему конкретный адрес и теперь через него читаю или пишу по рандомному адресу ибо фиг знает что в нем" не проходили бы.
Ответить | Правка | К родителю #126 | Наверх | Cообщить модератору

157. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от qwe (??), 23-Мрт-24, 07:19 
Это хорошо, пока указатель валяется на стеке, где память уже выделена. В ином случае инициализация указателя NULL-ом спровоцирует выделение памяти аллокатором и оптимизация с отложенным выделением памяти едет лесом.
Ответить | Правка | Наверх | Cообщить модератору

158. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от Аноним (156), 23-Мрт-24, 07:30 
Оптимизация сегфолтом после записи в рандомное место адресного пространства процесса сильно лучше? Особенно с учетом того, что это место может быть разным при каждом запуске.
Ответить | Правка | Наверх | Cообщить модератору

192. "Выпуск языка программирования Rust 1.77"  –1 +/
Сообщение от qwe (??), 23-Мрт-24, 17:01 
Сильно лучше - это культура написания кода и покрытие его тестами. Да и предупреждения компилятора не стоит игнорировать.
Ответить | Правка | Наверх | Cообщить модератору

203. "Выпуск языка программирования Rust 1.77"  +1 +/
Сообщение от Аноним (156), 23-Мрт-24, 20:34 
Сильно лучше - это не предупреждения компилятора, а отказ компилировать кривой код. Rust так умеет в ряде случаев, дыряшка нет.
Ответить | Правка | Наверх | Cообщить модератору

205. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от Аноним (184), 23-Мрт-24, 20:48 
> Сильно лучше - это не предупреждения компилятора, а отказ компилировать кривой код.
> Rust так умеет в ряде случаев, дыряшка нет.

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

Вот пример, CVE-2021-26952 (Use of Uninitialized Resource) на расте. Тот самый UB дыряшки но в растишке. Заводи "вывсёврёти", жду. Почему отказался компилировать код? Он же "кривой"!

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

229. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от Аноним (-), 25-Мрт-24, 16:10 
> Заводи "вывсёврёти", жду.

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

> Почему отказался компилировать код? Он же "кривой"!

Потому что автор написал unsafe чем прямо сказал компилятору "я знаю что делаю"

Вот фикс этой уязвимости: github.com/andrewhickman/ms3d/commit/599313b
И как только этот код переписали на тот, который проверяется компилятором, то все стало хорошо.

Если бы (да! если бы!) ты читал какие гарантии дает раст, то это примера просто не возникло бы!
Но растохейтеры не в состоянии даже открыть расбук и прочитать пару первый глав.
Печально...

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

238. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от Аноним (184), 26-Мрт-24, 05:43 
>> Заводи "вывсёврёти", жду.
> Никто не врет. Ну... кроме того, что ты совсем чуть-чуть не понимаешь
> что происходит.
> Но мы будем к тебе снисходительны, поэтому все объясним.

лол, сколько апломба, а потом взял и обделался. смотри далее.

>> Почему отказался компилировать код? Он же "кривой"!
> Потому что автор написал unsafe чем прямо сказал компилятору "я знаю что
> делаю"

а почему? может не было до какой-то версии этих методов? :)

> Вот фикс этой уязвимости: github.com/andrewhickman/ms3d/commit/599313b
> И как только этот код переписали на тот, который проверяется компилятором, то
> все стало хорошо.

лол, а в resize вызовы extend_with и truncate, которые опять с unsafe. Да что ж такое-то?
Ждём пока и их проверят? Или тут уж точно гарантии? В std раста нет CVE, правда ведь?
Ну никогда ж такого не было. :-D

> Если бы (да! если бы!) ты читал какие гарантии дает раст, то
> это примера просто не возникло бы!

Если бы ты понимал о чем пишешь, то не писал бы.

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

лол. показал как завернули unsafe в unsafe, а гонора будто мамкины менделеевы. какие ж вы убогие. :-D

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

209. "Выпуск языка программирования Rust 1.77"  –2 +/
Сообщение от qwe (??), 24-Мрт-24, 00:14 
Открой для себя опцию -wError и все предупреждения компилятора волшебным образом станут ошибками. С другой стороны, если у тебя дыры в голове, то тебе и раст вряд ли поможет.
Ответить | Правка | К родителю #203 | Наверх | Cообщить модератору

224. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от n00by (ok), 25-Мрт-24, 12:08 
> Это хорошо, пока указатель валяется на стеке, где память уже выделена. В
> ином случае инициализация указателя NULL-ом спровоцирует выделение памяти аллокатором
> и оптимизация с отложенным выделением памяти едет лесом.

Это заблуждение. В каком "ином случае"? Если указатель в регистре, нечего аллоцировать. Если он на куче - то память под него уже выделена.

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

237. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от qwe (??), 26-Мрт-24, 04:40 
Аллокатор памяти может быть любой, возможно и самописный. Например в результате системного вызова аллокатор не будет выделять вынимать память из пула свободных блоков, лишь зарезервирует виртуальное адресное пространство, а память будет реально выделена лишь по требованию (попытка чтения или записи по адресу блока). Такое поведение может быть удобно при обработке больших массивов данных с произвольным доступом. Массив указателей может использоваться в каком-нибудь дереве. В случае принудительной инициализации указателей значением NULL в резервированном адресном пространстве, ядро выделит всю запрашиваемую память разом, даже если та память вообще не будет использована.
Ответить | Правка | Наверх | Cообщить модератору

243. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от n00by (ok), 26-Мрт-24, 10:24 
Начиная с какого-то размера блоков malloc() и calloc() примерно так и работают в Linux, страницы резервируются в адресном пространстве процесса, но коммитятся ядром при попытке доступа. При этом ядро обнуляет их содержимое. Если там хранится указатель, он будет обнулён, то есть как раз "эта штука автоматом инициализировалась бы NULL".
Ответить | Правка | Наверх | Cообщить модератору

251. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от qwe (??), 26-Мрт-24, 17:35 
Осталось объяснить компилятору когда нужно явное обнуление указателя в коде, а когда оно не требуется, мало того - вредно. В любом случае за подобные инициативы придется расплачиваться производительностью. Кто не умеет или не хочет управлять памятью, могут использовать раст или другой язык с автоматическим подсчетом ссылок. Там плату уже взяли.
Ответить | Правка | Наверх | Cообщить модератору

159. "Выпуск языка программирования Rust 1.77"  +2 +/
Сообщение от Аноним (156), 23-Мрт-24, 07:36 
Представляешь, ее можно несколько раз освободить. Дыряшка легко позволяет бахнуть на указатель сколько угодно free() хоть подряд, хоть по очереди даже если после первого освобождения новое значение указателю не присваивали.
Ответить | Правка | К родителю #126 | Наверх | Cообщить модератору

212. "Выпуск языка программирования Rust 1.77"  +/
Сообщение от Аноним (113), 24-Мрт-24, 04:53 
Почти. В оригинале было так: There are only two hard things in Computer Science: cache invalidation and naming things. Потом ещё много шуток придумали, типа «… and off-by-one errors» и подобного. Но суть не меняется: эффективное управление памятью — весьма и весьма сложная штука.
Ответить | Правка | К родителю #126 | Наверх | Cообщить модератору

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

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




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

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