Pull to refresh

Comments 7

> Использование String для message означает, что программа должна скопировать значение.

В Rust по умолчанию операция перемещения (move), операция копирования (clone) же достигается явным указанием.
Перемещение при передаче значения в другую функцию, это побайтное копирование структуры в стек (что может быть выоптимизированно llvm, но не самим растом). Понятно, однако, что в случае String будут копированы только указатели всякие и служебная инфа, данные на куче останутся на месте.

Но тут речь не про это. Если вы читали внимательно, в статье говорится про строки, и для того, чтобы передать строковый литерал в функцию, которая принимает String, его нужно разместить в куче преобразовав в String (to_string(), to_owned(), into() — что больше нравится), а это копирование данных. Про это речь.
Я не верю, что язык сможет быть массовым имея такие сложности на пустом месте. На этом фоне даже корявый С++ кажется куда более простым и понятным.
Реализация memory safe языка без сборщика мусора — пустое место?
В C++ сложности точно такие же, только неявные. Здесь тебе компилятор говорит, что ты не прав, в подобном случае С++ промолчит и даст выстрелить в ногу. Опять же, если всё делать правильно, то в C/C++ ты передашь вместо среза пару указателей или итераторов, либо указатель и длину строки. Здесь всегда одна сущность — срез. ИМХО, в расте как раз проще.
К счастью, в очередном стандарте C++ ожидается string_view aka string_ref, который как раз для подобных целей создан. Но, как это бывает, стандарт распространится нескоро и никто (за исключением, возможно, GSL) не будет бить по рукам за использование view на несуществующий объект. Реализация &str в Rust подобных недостатков лишена. Компилятор просто не даст такой трюк совершить.

Опечатка в строке (лишний ' в конце строки)

name: &'a str,'

Sign up to leave a comment.

Articles