Pull to refresh

Comments 12

интерфейс внешних функций (foreign function interface, FFI) без накладных расходов

мягко говоря это неправда. Не бывает FFI без совсем накладных расходов.

Дефолтным целочисленным типом является

дефолтным он является если во первых влезает в размер, во вторых его не вывели откуда-то из других мест. Например

fn foo() -> usize {
  let x = 1248412;
  x
}

Автоматически выведет тип x как usize с момента объявления. Такой вывод работает с любыми типами, не только с целочисленными.

Для loop break может принимать опциональное выражение, которое становится значением выражения loop

what?

перегрузка функций в Rust не поддерживается

Это мягко говоря не правда. Перегрузка функций вполне может работать через типажи и шаблоны. Несколько иной тип полиморфизма, но тем не менее сигнатуры функций оказываются перегруженными.

Общие/распределенные (shared) ссылки доступны только для чтения:

Это не правда. Вплоне себе существует возможность мутабельного заисмствования

Rust не создает ссылки автоматически

Чтобы это вообще могло значить. В смысле не даёт функциям, занимающим значение автоматичски взять ссылку? То бишь

fn foo(val: &i32) { /**/ }

fn main() {
  let x = 33_i32;
  foo(x);  // не скомпилится т.к. заимствование явно не указаео
  foo(&x); // как должно быть чтобы всё собралось
}

Эксклюзивные

это уже какая-то собственная терминология попёрла. Есть изменяемые и неизменяемые ссылки/заимствования, аналогично изменяемым и неизменяемым переменным.

обеспечивает идентичность объекта (object identity):

Какое-то бессмысленное утверждение. О чём это вообще.

what?

Написано запутано, но ниже есть поясняющий пример же.

это уже какая-то собственная терминология попёрла

Терминология нестандартная, но широко распространённая.

Владение объектом бывает эксклюзивным и неэкслкюзивным, но это маленько про другой тип данных - Rc/Arc, Cell/RefCell и т.п.. Изменяемость это как раз про переменные и ссылки на них или на неизменяемые данные.

Да нет, к ссылкам эту терминология тоже применима.

Для начала, эта терминология полностью корректна: &-ссылки и правда заимствуют значение разделяемо, а &mut-сылки и правда заимствуют его эксклюзивно. Это, напомню, является частью модели памяти Rust.

Теперь почему многие предпочитают использовать классификацию "разделяемая/эксклюзивная" вместо "неизменяемая/изменяемая". Тут все просто: называть типы данных вроде &Cell<…> полным наименованием ("неизменяемая ссылка на Cell") долго, а попытка выкинуть вторую часть ведёт к ложным ассоциациям. Поэтому даже в документации Rust &-ссылки предпочитают называть разделяемыми.

А антонимом к "разделяемой" является именно "эксклюзивная", но никак не "изменяемая".

Написано запутано, но ниже есть поясняющий пример же.

А, у вас абзац сполз с примером и там сразу началось про continue, которого в этом блоке не оказалось, как в общем и отдельного примера для continue.

Есть изменяемые и неизменяемые ссылки/заимствования, аналогично изменяемым и неизменяемым переменным.

А потом, когда человек уже немного погрузился в контекст, ему объясняют, что "изменяемый/неизменяемый" - упрощение, а на самом деле это "уникальный/неуникальный".

Уникальность это также как и с эксклюзивностью про уровни владения и про изменяемый доступ. Arc/Rc, например, позволяет шарить доступ, давай неуникальное владение объектом. Так что изменяемость, которая задаётся ключевым словом mut (от mutable - изменяемый) это ни разу не про уникальность/эксклюзивность.

Опять еще одна статья про то как в расте создать тип int? Ну серьезно уже 3я за последний месяц статья-перевод просто документации. Напишите как сделать бэкенд на расте с дизелем/миграциями/сервисами/активх контроллерами/логами и все это запаковать в докер и раскидать правильно по файлам.
а как объявить функцию на расте - я и сам знаю)

не имеет среды выполнения

Чего-чего не имеет?

Среды выполнения — Execution environment — не имеет только кучка байтов у вас на хранилище. Но как только эта кучка байтов стала процессом (не в терминах ОС, а в смысле кода, который прямо сейчас исполняется CPU) — у неё есть среда выполнения. Даже если это bare metal.

Я догадываюсь, что автор имеет в виду кое-что другое. Но даже с этим кое-чем другим утверждение “Rust не имеет кое-чего другого” ложно. Без этого кое-чего другого даже приведённый Hello World не заработает. «Не иметь» и «Позволять не иметь» — сильно не одно и то же.

Добавлю, что хотя автоматический вывод типов переменных существует, для функций нужно явно прописывать все типы аргументов и возвращаемого значения. Такое сделано специально в дизайне языка, чтобы не переусложнять компилятор.

А ещё в расте существует так называемый возвратный полиморфизм:

let result: u32 = obj.func();

Будет вызываться та функция, которая возвращает тип данных u32, хотя функций без аргументов и с тем же именем может быть несколько (перегрузка методов), отличаются только типом возвращаемого значения.

Sign up to leave a comment.