Skip to content

Latest commit

 

History

History
38 lines (30 loc) · 3.37 KB

File metadata and controls

38 lines (30 loc) · 3.37 KB

Кравобые палочки

Капелька unsafe {} и никто не пострадает

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

Системная разработка -- сложная область, требующая внимания к мелочам. А иначе можно, например, завести Remote Code Execution уязвимость из-за неправильной проверки границ массива при обработке шрифтов (привет, Apple) Так что неудивительно, что Rust -- сложный язык. Устраняя одни ошибки, язык оказывается склонен порождать другие

Я работаю с кодом на Rust более 5 лет и за это время успел насмотреться на множество самых разных ошибок и трудностей, с которыми сталкиваются новички (и не только). Начиная от неудачных решений при проэктировании API функциий -- совершенно безопасных, но очень не эффектиных. Заканчивая неопределенным поведением и странными магическими ошибками при работе с unsafe {}

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

  • При написании собственного кода
  • При ревью чужого кода
  • И в целом при изучении этого замечательного языка

Я не претендую на абсолютную экспертность и знание деталей внутреннего устройства компилятора Rust. Но за 5+ лет использования его как инструмента для самых разных сценариев, полагаю, что могу иметь достаточно релевантный опыт

Содержание

  1. Ссылочные и владеюшие типы в аргументах функций
  2. Ссылки и реализации типажей
  3. Шаманим выход из безвыходного положения
  4. RAII и безопасность памяти
  5. Ссылочные типы и обобщенные функций
  6. In Rust We Trust?
  7. AnyMap без 'static
  8. Send и Sync
  9. (Дис)функциональный стиль