Презентация подготовлена по материалам выступления Максима Дадеркина на витебском MiniQ#15, который был проведен 30 мая 2019:
https://vk.com/miniq15;
https://communities.by/events/miniq-vitebsk-15.
Про доклад:
В своей практике я сталкивался с различными задачами, и одним из самых сложных и интересных классов задач для меня был и остаётся класс задач, связанный с проблемами с памятью. Периодически сталкиваясь с такими задачами, я постоянно задавал себе вопрос: а можно ли писать код как в таких языках, как Python, Java, JavaScript или C#, но при этом иметь автоматическую сборку мусора (а ещё лучше – не иметь её вообще)?
В качестве ответа, я хочу познакомить вас с некоторыми концепциями, которые однозначно ответили на мой вопрос, а также легли в основу относительно молодого языка Rust.
42. o Каждое значение имеет переменную,
которая ей владеет,
т.е. имеет владельца.
Ownership (Владение)
43. o Каждое значение имеет переменную,
которая ей владеет,
т.е. имеет владельца.
o Одновременно, у значения может быть
только один владелец.
Ownership (Владение)
44. o Каждое значение имеет переменную,
которая ей владеет,
т.е. имеет владельца.
o Одновременно, у значения может быть
только один владелец.
o Когда переменная выходит за область
видимости, значение удаляется.
Ownership (Владение)
47. References and Borrowing
(Ссылки и Заимствования)
o Обозначаются с помощью &T
o Переменные ссылочного типа не имеют
владения, а значит не влияют на него
48. References and Borrowing
(Ссылки и Заимствования)
o Обозначаются с помощью &T
o Переменные ссылочного типа не имеют
владения, а значит не влияют на него
o Нельзя изменить данные ссылки
(только чтение)
49. References and Borrowing
(Ссылки и Заимствования)
o Обозначаются с помощью &T
o Переменные ссылочного типа не имеют
владения, а значит не влияют на него
o Нельзя изменить данные ссылки
(только чтение)
o Передача ссылки в качестве параметра
функции называется заимствование
52. Правила заимствования
o Область видимости любой ссылки должна
находиться в пределах области
видимости владельца
o Допускается только один из
перечисленных видов заимствования:
53. Правила заимствования
o Область видимости любой ссылки должна
находиться в пределах области
видимости владельца
o Допускается только один из
перечисленных видов заимствования:
o одна или более неизменяемых ссылок
(&T) на ресурс;
54. Правила заимствования
o Область видимости любой ссылки должна
находиться в пределах области
видимости владельца
o Допускается только один из
перечисленных видов заимствования:
o одна или более неизменяемых ссылок
(&T) на ресурс;
o ровно одна изменяемая ссылка
(&mut T) на ресурс.
63. Полезные ссылки
Rust:
• https://doc.rust-lang.org/book/
• https://github.com/rust-lang/rustlings/
GC алгоритмы в Java/.Net/V8:
• https://wiki.openjdk.java.net/display/shenandoah/Main
• https://github.com/dotnet/coreclr/blob/master/Documentation/botr/garbage-collection.md
• https://v8.dev/blog/trash-talk
Интересные презентации:
• Оптимизация потребления памяти в Java - делаем уборку правильно
• Ходячие объекты-мертвецы, или GC всегда прав
• Orinoco - The new V8 Garbage Collector by Google Developer
• Shenandoah GC: сборщик мусора, который смог