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

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
→‎История: дополнение, источники добавлен 2020 год опроса stack Overflow
→‎Объектная система: дополнение; отсутствие прямой поддержки наследования; struct и структура данных - разные понятия
Строка 248:
 
== Объектная система ==
В Rust объектная система основана на [[Типаж (абстрактный тип)|типажах]] ({{lang-en2|traits}}) и [[Структура (язык Си)|структурах данных]] ({{lang-en2|structs}}). Типажи определяют [[сигнатура функции|сигнатуры]] методы, которые должны быть реализованы для типовкаждого типа (чаще всего — структуры), реализующего типаж. Типаж может содержать и реализации методов, принимаемые по умолчанию. Реализация типажей для данной структуры, а также реализация собственных методов структуры обозначается ключевым словом ''<code>impl</code>''. Язык содержит несколько десятков встроенных типажей, большая часть которых используется для [[Перегрузка операторов|перегрузки операторов]], а некоторые имеют специальное значение.
 
Языковой поддержки [[Наследование (программирование)|наследования]], и следовательно, классического [[Объектно-ориентированное программирование|ООП]], в 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>.
Язык поддерживает [[Обобщённый алгебраический тип данных|обобщённые типы]] (generics). Помимо функций, обобщёнными в Rust могут быть комплексные типы данных, структуры и [[Тип-сумма|перечисления]]. [[Компилятор]] Rust компилирует обобщённые функции весьма эффективно, применяя к ним мономорфизацию (генерация отдельной копии каждой обобщённой функции непосредственно в каждой точке её вызова). Таким образом, копия может быть адаптирована под конкретные типы аргументов, а следовательно, и оптимизирована для этих типов. В этом отношении обобщённые функции Rust сравнимы по производительности с [[Шаблоны C++|шаблонами языка C++]].
 
Язык поддерживает [[Обобщённый алгебраический тип данных|обобщённые типы]] ({{lang-en2|generics}}). Помимо функций, обобщёнными в Rust могут быть комплексные типы данных, структуры и [[Тип-сумма|перечисления]]. [[Компилятор]] Rust компилирует обобщённые функции весьма эффективно, применяя к ним мономорфизацию (генерация отдельной копии каждой обобщённой функции непосредственно в каждой точке её вызова). Таким образом, копия может быть адаптирована под конкретные типы аргументов, а следовательно, и оптимизирована для этих типов. В этом отношении обобщённые функции Rust сравнимы по производительности с [[Шаблоны C++|шаблонами языка C++]].
 
== Параллельные вычисления ==