Капелька unsafe {} и никто не пострадает
Rust замечательный язык программирования. Спроектированный чтоб минимизировать, прежде всего, проблемы, которые вновь и вновь возникают при написании системного программного обеспечения.
Системная разработка -- сложная область, требующая внимания к мелочам. А иначе можно, например, завести Remote Code Execution уязвимость из-за неправильной проверки границ массива при обработке шрифтов (привет, Apple) Так что неудивительно, что Rust -- сложный язык. Устраняя одни ошибки, язык оказывается склонен порождать другие
Я работаю с кодом на Rust более 5 лет и за это время успел насмотреться на множество самых разных ошибок и трудностей, с которыми сталкиваются новички (и не только). Начиная от неудачных решений при проэктировании API функциий -- совершенно безопасных, но очень не эффектиных. Заканчивая неопределенным поведением и странными магическими ошибками при работе с unsafe {}
В этой коллекции я решил собрать наиболее запоминающиеся, или раздражающие ошибки, неудачные решения, а также запутанные краевые случаи, с которыми мне приходилось сталкиваться
- При написании собственного кода
- При ревью чужого кода
- И в целом при изучении этого замечательного языка
Я не претендую на абсолютную экспертность и знание деталей внутреннего устройства компилятора Rust. Но за 5+ лет использования его как инструмента для самых разных сценариев, полагаю, что могу иметь достаточно релевантный опыт