Запозичення значення
Як ми бачили раніше, замість того, щоб передавати право власності при виклику функції, ви можете дозволити функції позичити значення:
- Функція
add
позичає дві точки та повертає нову точку. - Викликач зберігає право власності на вхідні дані.
Speaker Notes
This slide should take about 10 minutes.
Цей слайд є оглядом матеріалу про посилання з першого дня, дещо розширеного за рахунок включення аргументів функцій та значень, що повертаються.
Більше інформації для вивчення
Примітки щодо повернення стеку та вбудовування:
-
Продемонструйте, що повернення з
add
є дешевим, оскільки компілятор може виключити операцію копіювання, вбудовуючи виклик додавання в main. Змініть наведений вище код так, щоб він виводив адреси стеку, і запустіть його на Playground або перегляньте збірку в Godbolt. На рівні оптимізації “DEBUG” адреси мають змінитися, але вони залишаються незмінними під час переходу до налаштування “RELEASE”: -
Компілятор Rust може виконувати автоматичне вбудовування, яке можна вимкнути на рівні функції за допомогою
#[inline(never)]
. -
Якщо вимкнено, друкована адреса зміниться на всіх рівнях оптимізації. Дивлячись на Godbolt або Playground, можна побачити, що в цьому випадку повернення значення залежить від ABI, наприклад, на amd64 два i32, що складають точку, будуть повернуті у 2х регістрах (eax і edx).