Size: a a a

Rust Jobs - вакансии & резюме

2021 December 15

Ct

Casual tears in Rust Jobs - вакансии & резюме
А, сорян, оно std::terminate дергает. Тоже не особо прикольно.
источник

BZ

Bulat Ziganshin in Rust Jobs - вакансии & резюме
идея состоит в том, что исключения могут возникнуть везде. поэтому весь код должен быть написан так, чтобы исключения через него проехали и пошли дальше по стёку

по моему опыту, быть уверенным в отсутствии исключений можно только в чисто вычислительном коде типа алгоритмов сжатия. даже обычное выделение памяти - уже опасность
источник

BZ

Bulat Ziganshin in Rust Jobs - вакансии & резюме
для явно вызываемых функций можно проверить что там noexcept донизу, по крайней мере в линтере
источник

Ct

Casual tears in Rust Jobs - вакансии & резюме
> поэтому весь код должен быть написан так, чтобы исключения через него проехали и пошли дальше по стёку

Т.е. надо каждый раз когда вызываешь функцию в коде задумываться "а что если она кинет эксепшн?". Это точно проще чем посмотреть на сигнатуру и увидеть Result<T, E> там или просто T?
источник

Ct

Casual tears in Rust Jobs - вакансии & резюме
Более того, даже ручками смотреть на сигнатуру не придется - компилятор сам по рукам даст.
источник

BZ

Bulat Ziganshin in Rust Jobs - вакансии & резюме
я же ответил
1) код надо писать так чтобы возвращать ресурсы автоматом
2) всё равно от исключений защищён только чисто вычислительный код
источник

Ct

Casual tears in Rust Jobs - вакансии & резюме
Проблема далеко не всегда в освобождении ресурсов. Может быть код вида

push_all(vec, values) {
  for value in values {
     vec.push(clone(value));
  }
}

Что если clone() кинет исключение посередине?
источник

Ct

Casual tears in Rust Jobs - вакансии & резюме
Если исключение улетело достаточно высоко чтобы vec деаллоцировался то окей, живем, а если нет?
источник

DP

Daniil Polyakov in Rust Jobs - вакансии & резюме
3) Есть ещё ембеддед, где ты написал все с нуля и без исключений)0)
источник

M

Marat in Rust Jobs - вакансии & резюме
что-то вас далеко унесло от тематики чата 🤣
источник

Ct

Casual tears in Rust Jobs - вакансии & резюме
Надо на старте таких дискуссий сразу в @rust_offtopic переезжать. Раньше админы заставляли и даже сообщения подчищали, но похоже уже устали.
источник

Ct

Casual tears in Rust Jobs - вакансии & резюме
Как бы с этим можно жить, да. Но стоит ли это "удобство" того?
источник

BZ

Bulat Ziganshin in Rust Jobs - вакансии & резюме
наверно я рассматриваю исключения скорее как панику. там где они перехватываются, должен быть достаточно высокий барьер через который назад передаётся минимум данных
источник

BZ

Bulat Ziganshin in Rust Jobs - вакансии & резюме
вообще-то вопрос был именно в тематике этого чата - почему не стоит всё переписывать на расте вместо маинстримных язков
источник

Ct

Casual tears in Rust Jobs - вакансии & резюме
Но ошибки это же нормальный случай, особенно если есть какое-то IO. Сразу всё бросать и деаллоцировать до вершины стека на какой-нибудь IO error?
источник

Ct

Casual tears in Rust Jobs - вакансии & резюме
Вот это как раз подход раста. Для нормальных ошибок используется Result, для "ой, всё совсем плохо" - паника и размотка стека. Ловится оно уже очень высоко по стеку обычно.
источник

BZ

Bulat Ziganshin in Rust Jobs - вакансии & резюме
в Go можно перехватить панику и дальше работать как ни в чём не бывало. если такое есть в раст - то считай в нём есть exception handling как в любом другом языке
источник

Ct

Casual tears in Rust Jobs - вакансии & резюме
Все-таки есть разница между паникой и exception'ами, хоть технически это одно и то же. Первое используется только в крайних случаях, а второе - при любой ошибке. В том же го для обычных ошибок возвращают error, а не паникуют сразу.
источник

Ct

Casual tears in Rust Jobs - вакансии & резюме
Технически да, и в расте и в го есть поддержка эксепшнов, но ими никто не пользуется так же как эксепшнами в джаве/C#.
источник

BZ

Bulat Ziganshin in Rust Jobs - вакансии & резюме
сама по себе поддержка ADT и в частности сахар для maybe - это мощный плюс раста

если в нём нет исключений/паники, которые можно протащить через весь стёк без редактирования всех промежуточных функций - это недостаток
источник