Size: a a a

2020 October 13

JM

John Meow in Rust Beginners
Mikail Bagishov
Оператор ражыменования для NonNull был бы ансейфным, а такое не поддерживается.
А Deref?
источник

MB

Mikail Bagishov in Rust Beginners
Slava Sokolovsky
Есть какой-нибудь аллокатор, который не позволяет брать из него памяти больше, чем укажешь? И ещё чтобы печатал ошибку в случае невозможности аллокации
Можешь пожалуйста подробнее объяснить, что тебе надо?

Ошибку в случае невозможности аллокации печатает тот, кто попытался ее сделать. Для этого в std есть функция handle_alloc_error (которая как раз-таки печатает сообщение о ошибке выделения и аварийно останавливает программу).

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

MB

Mikail Bagishov in Rust Beginners
John Meow
А Deref?
Ой, да, я фигню сморозил.
источник

SS

Slava Sokolovsky in Rust Beginners
Mikail Bagishov
Можешь пожалуйста подробнее объяснить, что тебе надо?

Ошибку в случае невозможности аллокации печатает тот, кто попытался ее сделать. Для этого в std есть функция handle_alloc_error (которая как раз-таки печатает сообщение о ошибке выделения и аварийно останавливает программу).

Контракт аллокатора таков, что если ты запросил N байт, то тебе дали только N байт, пытаться обращаться к каким-то другим это UB. Но реализация аллокатора не  в силах проверять соблюдение этого контракта. Вместо этого, насколько я помню, есть поддержка AddressSanitizer, который ловит баги при работе с памятью.
Хочу аналог OutOfSpace из джавы - суммарно занятая память не сможет превысить указанную, а если и превысит, то будет паника
Какой-то кастомный аллокатор, по идее, нужен
источник

MB

Mikail Bagishov in Rust Beginners
Ну да, нужно написать обертку поверх std::alloc::System, которая будет отслеживать аллокации.
источник

MB

Mikail Bagishov in Rust Beginners
Это если ты хочешь именно кучу растового кода ограничивать
источник

SS

Slava Sokolovsky in Rust Beginners
Mikail Bagishov
Это если ты хочешь именно кучу растового кода ограничивать
Именно так. Можно же как-то будет делегировать вызовы к стандартному аллокатору?
источник

MB

Mikail Bagishov in Rust Beginners
Ну тогда ты делаешь структуру, реализуешь трейт GlobalAlloc, заводишь константу с этой структурой и помечаешь #[global_allocator]
источник

MB

Mikail Bagishov in Rust Beginners
Теперь все выделения и освобождение, которые проходят через std::alloc (например это все коллекции из std и вообще почти любой растовый код), будут перехвачены
источник

SS

Slava Sokolovsky in Rust Beginners
Mikail Bagishov
Ну тогда ты делаешь структуру, реализуешь трейт GlobalAlloc, заводишь константу с этой структурой и помечаешь #[global_allocator]
То есть мне не надо аллокатор писать и я могу взять нативный/дефолтный?
источник

MB

Mikail Bagishov in Rust Beginners
Да. Тебе нужна просто оберточка, перехватывающая запросы.
источник
2020 October 14

T

Tommy in Rust Beginners
Не стартует rust-analyzer в vscode под win 10 c toolchain nightly-x86_64-pc-windows-msvc. Сталкивался ли кто?
источник

AK

Artem Khomenko in Rust Beginners
Tommy
Не стартует rust-analyzer в vscode под win 10 c toolchain nightly-x86_64-pc-windows-msvc. Сталкивался ли кто?
У меня было, что падал вскоре после рестарта с загадочными ошибками. Помогло cargo update
источник

OM

Old Man in Rust Beginners
Spreadsheets
источник

MF

Mattew Fleuz in Rust Beginners
Есть ли какая-нибудь фича синтаксиса что бы без создания дополнительных переменных объяснить языку какой тип значения я ожидаю получить из дженерик функции?
источник

MF

Mattew Fleuz in Rust Beginners
что-то вроде fn func(args)<i32> а то и fn func(args)<impl TraitName>
источник

DL

Dima Lazarev in Rust Beginners
источник

DL

Dima Lazarev in Rust Beginners
источник

DL

Dima Lazarev in Rust Beginners
источник

MF

Mattew Fleuz in Rust Beginners
Это все определения функций, я же хочу сказать компилятору какое значение я планирую увидеть при вызове некоторой уже определенной функции, возможно функции из другого крейта.
Потому как некоторые дженерик функции могут на одни и те же аргументы возвращать различные типы значений, в зависимости от того какое ожидается. Как например это делает функция .into() или какой-нибудь row.get() из rusqlite
источник