Rust (язык программирования): различия между версиями

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Строка 250:
В Rust объектная система основана на [[Типаж (абстрактный тип)|типажах]] ({{lang-en2|traits}}) и [[Структура (язык Си)|структурах]] ({{lang-en2|structs}}). Типажи определяют [[сигнатура функции|сигнатуры]] методов, которые должны быть реализованы для каждого типа (чаще всего — структуры), реализующего типаж. Типаж может содержать и реализации методов, принимаемые по умолчанию. Реализация типажей для данной структуры, а также реализация собственных методов структуры обозначается ключевым словом ''<code>impl</code>''. Язык содержит несколько десятков встроенных типажей, большая часть которых используется для [[Перегрузка операторов|перегрузки операторов]], а некоторые имеют специальное значение.
 
ЯзыковойRust поддержкиподдерживает аналогию [[Наследованиенаследование (программирование)|наследования]] типажей — типаж может требовать от реализующего типа реализацию других типажей. Однако языковой поддержки наследования самих типов, и следовательно, классического [[Объектно-ориентированное программирование|ООП]], в Rust нет. Вместо наследования типов, аналогия [[иерархия классов|иерархии классов]] реализуется введением дополнительных типажей, включением структуры-предка в структуру-потомка или введением перечислений для обобщения разных структур<ref>{{cite web|author=Михаил Панков|title=Есть ли ООП в Rust?|url=https://rustycrate.ru/%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5обучение/2017/06/11/oop-in-rust.html|website=rustycrate.ru|date=2017-06-11|accessdate=2020-06-06}}</ref>.
 
Язык поддерживает [[Обобщённый алгебраический тип данных|обобщённые типы]] ({{lang-en2|generics}}). Помимо функций, обобщёнными в Rust могут быть комплексные типы данных, структуры и [[Тип-сумма|перечисления]]. [[Компилятор]] Rust компилирует обобщённые функции весьма эффективно, применяя к ним мономорфизацию (генерация отдельной копии каждой обобщённой функции непосредственно в каждой точке её вызова). Таким образом, копия может быть адаптирована под конкретные типы аргументов, а следовательно, и оптимизирована для этих типов. В этом отношении обобщённые функции Rust сравнимы по производительности с [[Шаблоны C++|шаблонами языка C++]].