Size: a a a

2020 April 14

AL

Arsenii Lyashenko in rust_offtopic
Soul
Ну... В чистом safe Rust вроде как помогает дата рейсов избежать
Как ты попал в этот чат, кстати говоря?
источник

S

Soul in rust_offtopic
Я оффтопы люблю
источник

ML

Mike Lubinets in rust_offtopic
Soul
Ну... В чистом safe Rust вроде как помогает дата рейсов избежать
На примере вызовов в сишку, нет — помогает только при корректном апи
источник

ML

Mike Lubinets in rust_offtopic
Если апи кривой — не помогает)
источник

RP

Roman Proskuryakov in rust_offtopic
Mike Lubinets
Если только этот — никаких различий нет, ответственность за корректность вызовов в сишку лежит на программисте
а если копнуть глубже? типа можно ли построить безопасный API поверх небезопасных функций?
источник

S

Soul in rust_offtopic
нельзя, но можно свалить ответственность за баги на злостных небезопасников
источник

ML

Mike Lubinets in rust_offtopic
Roman Proskuryakov
а если копнуть глубже? типа можно ли построить безопасный API поверх небезопасных функций?
Конечно — если соблюсти все правила вызова небезопасной функции, и обернуть в интерфейс, который эти правила энфорсит.
Например, маркировать структуру как !Sync, если сишная библиотека непотокобезопасна
источник

ML

Mike Lubinets in rust_offtopic
Раст довольно хорош в описании подобных контрактов с использованием системы борровинга и типов
источник

RP

Roman Proskuryakov in rust_offtopic
так, с Send/Sync разобрались. а как быть с безопасностью по памяти?
источник

RP

Roman Proskuryakov in rust_offtopic
в том же С++ можно делать рантаймовые проверки на выход за границы. это тоже значит, что он может быть безопасным по памяти?
источник

S

Soul in rust_offtopic
они оба небезопасны, поскольку в реальной жизни и там и там утечки случаются
источник

RP

Roman Proskuryakov in rust_offtopic
утечки в расте безопасны
источник

ML

Mike Lubinets in rust_offtopic
Roman Proskuryakov
так, с Send/Sync разобрались. а как быть с безопасностью по памяти?
Раст ничего нового не придумал кроме механизма статического анализа правил управления памятью. Борровинг в том или ином виде юзается в в сишке и крестах, явно ли или нет.
В GObject прям явно прописан на макросах, например
источник

S

Soul in rust_offtopic
Roman Proskuryakov
утечки в расте безопасны
утечка памяти безопасна по памяти?
источник

RP

Roman Proskuryakov in rust_offtopic
да
источник

ML

Mike Lubinets in rust_offtopic
Нужно просто правильно отразить то какого управления памятью ждёт ffi функция на систему типов раста
источник

ML

Mike Lubinets in rust_offtopic
Roman Proskuryakov
в том же С++ можно делать рантаймовые проверки на выход за границы. это тоже значит, что он может быть безопасным по памяти?
Проверки на выход за границы это из другой оперы немного
источник

RP

Roman Proskuryakov in rust_offtopic
тогда из какой оперы безопасность по памяти?
источник

ML

Mike Lubinets in rust_offtopic
Roman Proskuryakov
тогда из какой оперы безопасность по памяти?
Хм, да, опера та же,  я просто в основном думаю про use-after-free
источник

ML

Mike Lubinets in rust_offtopic
С выходом за границы вопрос двоякий:
1) если C функция не проверяет корректность входных параметров, это должна делать обертка на расте (емнип одна из обёрток над OpenGL это делает)
2) что делать если код функции — чёрный ящик, не знаю.
источник