Информация об изменениях

Сообщение Re[18]: С++ всё? Rust навсегда? от 28.06.2020 5:46

Изменено 28.06.2020 5:48 dsorokin

Re[18]: С++ всё? Rust навсегда?
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, lpd, Вы писали:


_>>>Т.е. в реальности никакого усложнения или увеличения прикладного кода от использования семантики перемещения нет. И использовать её повсеместно более чем правильно.

lpd>>Насчет увеличения количества кода не буду судить, т.к. мув семанитку не использовал.
lpd>>Но усложнение есть и большое, т.к. она добавляет лишней информации в код новыми типами. Так что в этом вопросе ты субъективен, т.к. тебе эта мув-семантика нравится. А увеличение эффективности почти всегда пренебрежимо малое, поэтому повмевместно ее использовать близко к абсурду.

В контексте C++ семантику перемещения использовать сложнее, чем семантику копирования. В Rust — ровно наоборот. Там даже часто не задумываешься, как работает перемещение. Все настолько естественно происходит, и что интересно, нет практически никакого синтаксического шума.

Написал

fn f(x: X) { .. }


Потом вызвал

f(X::new())


У тебя объект x передается через "перемещение". Будет ли там побитовое копирование или нет, зависит от обстоятельств, но сама идея передачи объекта через семантику перемещения кристально проста.

С копированием сложнее. Там нужно было бы явно реализовать трейт (класс типов) Clone для X.

impl Clone for X {
  fn clone(&self) -> Self { .. }
}


Потом в коде нужно было бы написать

f(x.clone())


Это выглядит разумно. Создаем явный барьер для более дорогой с точки зрения эффективности исполнения операции копирования. Операция перемещения в Rust крайне дешева.

На самом деле, к проектированию языка Rust подошли очень взвешено. Может быть, лет через 30 Rust будет тоже выглядеть нелепо для будущего времени, но для настоящего он по дизайну на мой личный субъективный взгляд выглядит просто превосходно!
Re[18]: С++ всё? Rust навсегда?
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, lpd, Вы писали:


_>>>Т.е. в реальности никакого усложнения или увеличения прикладного кода от использования семантики перемещения нет. И использовать её повсеместно более чем правильно.

lpd>>Насчет увеличения количества кода не буду судить, т.к. мув семанитку не использовал.
lpd>>Но усложнение есть и большое, т.к. она добавляет лишней информации в код новыми типами. Так что в этом вопросе ты субъективен, т.к. тебе эта мув-семантика нравится. А увеличение эффективности почти всегда пренебрежимо малое, поэтому повмевместно ее использовать близко к абсурду.

В контексте C++ семантику перемещения использовать сложнее, чем семантику копирования. В Rust — ровно наоборот. Там даже часто не задумываешься, как работает перемещение. Все настолько естественно происходит, и что интересно, нет практически никакого синтаксического шума.

Написал

fn f(x: X) { .. }


Потом вызвал

f(x)


У тебя объект x передается через "перемещение". Будет ли там побитовое копирование или нет, зависит от обстоятельств, но сама идея передачи объекта через семантику перемещения кристально проста.

С копированием сложнее. Там нужно было бы явно реализовать трейт (класс типов) Clone для X.

impl Clone for X {
  fn clone(&self) -> Self { .. }
}


Потом в коде нужно было бы написать

f(x.clone())


Это выглядит разумно. Создаем явный барьер для более дорогой с точки зрения эффективности исполнения операции копирования. Операция перемещения в Rust крайне дешева.

На самом деле, к проектированию языка Rust подошли очень взвешено. Может быть, лет через 30 Rust будет тоже выглядеть нелепо для будущего времени, но для настоящего он по дизайну на мой личный субъективный взгляд выглядит просто превосходно!