Розіменування “сирих” вказівників

Створення вказівників є безпечним, але для їх розіменування потрібно unsafe:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

This slide should take about 10 minutes.

Хорошою практикою є (і вимагається посібником зі стилю Android Rust) писати коментар до кожного unsafe блоку, пояснюючи, наскільки код у ньому відповідає вимогам безпеки небезпечних операцій, які він виконує.

У випадку розіменувань покажчиків це означає, що покажчики мають бути дійсними, тобто:

  • Покажчик має бути ненульовим.
  • Покажчик має бути розіменоваючим (у межах одного виділеного об’єкта).
  • Об’єкт не повинен бути звільнений.
  • Не повинно бути одночасних доступів до того самого розташування.
  • Якщо вказівник було отримано шляхом приведення посилання, базовий об’єкт має бути дійсним, і жодне посилання не може використовуватися для доступу до пам’яті.

У більшості випадків вказівник також має бути правильно вирівняний.

У розділі “НЕ БЕЗПЕЧНО” наведено приклад поширеної помилки UB: *r1 має 'static час життя, тому r3 має тип &'static String, і таким чином переживає s. Створення посилання з покажчика вимагає великої обережності.