Size: a a a

2021 April 17

p

polunin.ai in rust_offtopic
Даже если приватная
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
не может. Поэтому set_len помечена как unsafe
источник

EG

Emmanuel Goldstein in rust_offtopic
set_len помечена как unsafe, потому что она публичная
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
если бы она была приватная все равно должна быть unsafe
источник

EG

Emmanuel Goldstein in rust_offtopic
Ну и в целях документации
источник

p

polunin.ai in rust_offtopic
Нет, она ансейф потому что caller должен гарантировать что-то
источник

EG

Emmanuel Goldstein in rust_offtopic
Она имеет право быть safe, если юзер не может её вызвать не с тем значением
источник

EG

Emmanuel Goldstein in rust_offtopic
Граница безопасности проходит по модулю
источник

p

polunin.ai in rust_offtopic
Если коллер что-то должен гарантировать лично то функция ансейф
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
у меня от dtolnay противоположенная инфа
источник

EG

Emmanuel Goldstein in rust_offtopic
Линк?
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
надо искать, на гитхабе года 2 назад обсуждали
источник

EG

Emmanuel Goldstein in rust_offtopic
https://doc.rust-lang.org/nomicon/working-with-unsafe.html
См. пример с make_room()

> However this works perfectly. The existence of make_room is not a problem for the soundness of Vec because we didn't mark it as public. Only the module that defines this function can call it. Also, make_room directly accesses the private fields of Vec, so it can only be written in the same module as Vec.
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Yes, you should mark the function unsafe because some inputs can trigger UB. But even if you do, those inputs still trigger UB, so the function still must not be called that way. It is never okay to trigger UB, not even in unsafe code.

ничего
про публичность или модульность тут нет
источник

EG

Emmanuel Goldstein in rust_offtopic
Тут вообще другой контекст диалога
Номикон утверждает, что если ты не помечаешь функцию как приватную, она имеет право ломать инварианты
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
а ральф говорит чт оесли у функции есть инпуты на которых она может триггерить уб она ОБЯЗАНА быть помечена как ансейф
источник

EG

Emmanuel Goldstein in rust_offtopic
И двумя сообщениями выше Ральф пишет:

> The property of being valid for all possible ways to call is called "soundness", also see the reference. The general contract in Rust is that the safe API surface of a library must be sound. This so that users of a library do not have to worry about UB. The entire safety story of Rust rests on libraries with sound APIs.

Граница safe API surface пролегает по модулю.
источник

EG

Emmanuel Goldstein in rust_offtopic
Если функция приватная, она не часть API surface.
источник

EG

Emmanuel Goldstein in rust_offtopic
Я согласен, что её стоит (should) пометить как unsafe, но Номикон в явном виде разрешает этого не делать, если она приватная.
источник