Size: a a a

2020 May 02

EG

Emmanuel Goldstein in rust_offtopic
Alex Zhukovsky
ну вон челики в сишарпе это рефлекшном делают
Что делают рефлекшном? Собирают длинный список значений?
источник

EG

Emmanuel Goldstein in rust_offtopic
Alex Zhukovsky
она в стд и не ансейф?
Нет, конечно.
Это было про то, что UB не всегда возникает внутри unsafe-блока
источник

AS

Aleksey Sidorov in rust_offtopic
Emmanuel Goldstein
В самом худшем случае тебе в случае C ←→ C++ требуется экстерн, а в случае C ←→ Rust требуется extern, конвертация типов и, желательно, safe-обёртка.
Я бы это аргументировал примерно так:
Базовый вариант подключения C к Rust можно сделать довольно дёшево с помощью биндгена по хидерам, но у тебя везде будет ансейф. В C++ обычно можно использовать сами хидеры вместо биндгена по ним, что несколько уменьшает кост, но тебе всё равно придётся делать «сейф»-обёртку, если ты хочешь работать с красивыми умными указателями и RAII-типами плюсов. Если же ты в плюсах используешь функции из C как они были, то ты можешь то же самое делать в Rust, просто расставляя unsafe на местах вызова.
И в плюсах ты конечно не будешь писать идеоматичную обертку над сишным кодом?
источник

AZ

Alex Zhukovsky in rust_offtopic
Emmanuel Goldstein
Что делают рефлекшном? Собирают длинный список значений?
ходят по проекту и ищут все типы которые наследуют какой-нибудь маркерный трейт (или по любому другому признаку, например заканчиваются на Foo)
источник

AZ

Alex Zhukovsky in rust_offtopic
и потом генерируют код для того чтон ашли
источник

AZ

Alex Zhukovsky in rust_offtopic
Emmanuel Goldstein
Нет, конечно.
Это было про то, что UB не всегда возникает внутри unsafe-блока
ну так тут сама функция УБ, не важно как ты её вызываешь
источник

EG

Emmanuel Goldstein in rust_offtopic
Aleksey Sidorov
И в плюсах ты конечно не будешь писать идеоматичную обертку над сишным кодом?
Я про это и написал, лол.
Что либо ты в обоих языках ебёшься с кривым C API, либо пишешь норм обёртку.
источник

EG

Emmanuel Goldstein in rust_offtopic
Alex Zhukovsky
ну так тут сама функция УБ, не важно как ты её вызываешь
Нет, не UB.
источник

AZ

Alex Zhukovsky in rust_offtopic
Emmanuel Goldstein
Нет, не UB.
уб, я это как-то выяснял у разрабов
источник

AZ

Alex Zhukovsky in rust_offtopic
не помню кто мне ответил, кладов или ещё ктото
источник

EG

Emmanuel Goldstein in rust_offtopic
Alex Zhukovsky
уб, я это как-то выяснял у разрабов
У меня есть ссылки на документацию.
источник

EG

Emmanuel Goldstein in rust_offtopic
Emmanuel Goldstein
Если что, этот пример здесь уже обсуждался:
1. Документация в явном виде разрешает использовать transmute для расширения лайфтайма
2. Создание референса с неправильным лайфтаймом само по себе не считается неопределённым поведением.
Вот.
источник

AZ

Alex Zhukovsky in rust_offtopic
если у тебя функция _может_ на каком-то входе сделать хрень то она _обязана, быть ансейф
источник

EG

Emmanuel Goldstein in rust_offtopic
Alex Zhukovsky
если у тебя функция _может_ на каком-то входе сделать хрень то она _обязана, быть ансейф
Это нельзя кодифицировать
источник

AZ

Alex Zhukovsky in rust_offtopic
Emmanuel Goldstein
Это нельзя кодифицировать
можно
источник

EG

Emmanuel Goldstein in rust_offtopic
Поэтому этого нет в behaviour considered undefined
источник

AZ

Alex Zhukovsky in rust_offtopic
Emmanuel Goldstein
Поэтому этого нет в behaviour considered undefined
если ты не обратил внимание, там не полный список
источник

EG

Emmanuel Goldstein in rust_offtopic
Alex Zhukovsky
если ты не обратил внимание, там не полный список
Это самый лучший список, который у нас есть
источник

AZ

Alex Zhukovsky in rust_offtopic
Emmanuel Goldstein
Это самый лучший список, который у нас есть
и? На этом уб не заканчивается
источник

AZ

Alex Zhukovsky in rust_offtopic
у тебя ложный вывод "раз в списке нет значит збс"
не збс
источник