Почему жуть? Вот перелопатить половину JavaScript-приложения только для того, чтобы понять все возможные значения, которые могут посылаться в данную функцию — вот это жуть. Rust от такого спасает.
Есть. Если есть интерес к Rust и хочется его опробовать — то так и нужно сделать. В противном случае имейте ввиду, что придется потратить время на освоение программирования на Rust.
Но ведь для стандартных коллекций дженерики-то по сути есть! А вот пользователю этот инструмент не предоставляется. Если кого-то волнует раздувание кода и медленная компиляция, то он же может просто их не использовать.
Вы погружаетесь в человека, открывающего коробку, — вам кажется, что ВЫ открываете ее. Внезапно вы можете представить покупку, и вы истолковываете себе это так: "Хм, хочу ли я купить кастрюлю? Я представляю, как покупаю ее. Следовательно, я должен хотеть ее купить".
Странно, но я ни разу не купил товар, распоковку которого смотрел (кроме тех, которые смотрел уже с принятым решением о покупке). Зачем покупать, если ты уже виртуально товар получил, распоковал и пережил все эмоции? )
Цена чего конкретно? Изменять Rust-код довольно легко и безопасно, так как система типов у языка достаточно мощная и большинство ошибок отлавливает компилятор.
Очевидно же, что в первом случае mut относится к имени аргумента, которое привязывается к значению уже внутри функции, а во втором случае mut — это часть типа.
Как мне кажется, намного проще и чище — просто не указывать. Для любого ссылочного типа лайфтайм может быть выведен, мы же не пишем из-за этого &'_ Type.
Да, сигнатура искусственная. Хорошо, что вы заметили, что такая функция будет иметь сомнительную полезность )
Но вопрос был про lifetime elision. Собственно, я ожидал подобного вопроса. WASD1 в примере не указано, как именно определен псевдоним MyResult:
type MyResult<'a, T> = Result<&'a T, <T as FromStr>::Err>;
Как видите, лайфтайм никуда не делся, просто в сигнатуре функции он будет выведен автоматически и поэтому указывать явно его не нужно. Если функция возвращает ссылочный тип, и при этом принимает в качестве аргумента только одну ссылку или если среди аргументов есть ссылка &self, то лайфтайм возвращаемого значения будет таким же, как у данного аргумента. Lifetime Elision
Дело не в синтаксисе, а прежде всего в том, что правила владения и заимствования, а также контроля времен жизни ссылок, не имеют аналогов в мейнстримных языках. Не получится войти быстро, переиспользуя свои прошлые навыки, приходится учиться программировать заново, в соответствии с этими концепциями. Это трудно.
Во втором случае используется много символов для указания того, что функция ничего не возвращает, и пишем мы их только ради того, чтобы обозначить тип как функцию.
Я писал о том, что точка с запятой не просто разделяет инструкции, она превращает выражение в инструкцию. У вас строка кода может быть как инструкцией, так и выражением, и если нужно последнее — просто не ставьте точку с запятой.
В обмен на гарантию отсутствия не только NPE, но и UB на ровном месте. Вообще, после нескольких месяцев интенсивного использования Rust мозг перестраивается и борьба с borrow-checker прекращается. Дело привычки.
Соглашусь, что иногда return удобно использовать, чтобы сократить количество вложенных блоков и улучшить читаемость. Хотя во многих других случаях лучше без него.
Почему жуть? Вот перелопатить половину JavaScript-приложения только для того, чтобы понять все возможные значения, которые могут посылаться в данную функцию — вот это жуть. Rust от такого спасает.
Почему я использую Rust в вебе — и в рабочих, и в личных проектах:
Но я бы не советовал его брать тем, кто:
Есть. Если есть интерес к Rust и хочется его опробовать — то так и нужно сделать. В противном случае имейте ввиду, что придется потратить время на освоение программирования на Rust.
Документации маловато.
Но ведь для стандартных коллекций дженерики-то по сути есть! А вот пользователю этот инструмент не предоставляется. Если кого-то волнует раздувание кода и медленная компиляция, то он же может просто их не использовать.
Странно, но я ни разу не купил товар, распоковку которого смотрел (кроме тех, которые смотрел уже с принятым решением о покупке). Зачем покупать, если ты уже виртуально товар получил, распоковал и пережил все эмоции? )
По-моему только им и можно.
А судьи кто?
Цена чего конкретно? Изменять Rust-код довольно легко и безопасно, так как система типов у языка достаточно мощная и большинство ошибок отлавливает компилятор.
Объяснение в статье только больше запутывает. Ставните:
и
Очевидно же, что в первом случае
mutотносится к имени аргумента, которое привязывается к значению уже внутри функции, а во втором случаеmut— это часть типа.Как мне кажется, намного проще и чище — просто не указывать. Для любого ссылочного типа лайфтайм может быть выведен, мы же не пишем из-за этого
&'_ Type.Да, сигнатура искусственная. Хорошо, что вы заметили, что такая функция будет иметь сомнительную полезность )
Но вопрос был про lifetime elision. Собственно, я ожидал подобного вопроса. WASD1 в примере не указано, как именно определен псевдоним
MyResult:Как видите, лайфтайм никуда не делся, просто в сигнатуре функции он будет выведен автоматически и поэтому указывать явно его не нужно. Если функция возвращает ссылочный тип, и при этом принимает в качестве аргумента только одну ссылку или если среди аргументов есть ссылка
&self, то лайфтайм возвращаемого значения будет таким же, как у данного аргумента. Lifetime ElisionДело не в синтаксисе, а прежде всего в том, что правила владения и заимствования, а также контроля времен жизни ссылок, не имеют аналогов в мейнстримных языках. Не получится войти быстро, переиспользуя свои прошлые навыки, приходится учиться программировать заново, в соответствии с этими концепциями. Это трудно.
Да,
_— это ключевое слово, а не переменная, которое означает "игнорировать связывание в этом месте".По моему
Выглядит чище, чем
Во втором случае используется много символов для указания того, что функция ничего не возвращает, и пишем мы их только ради того, чтобы обозначить тип как функцию.
Я писал о том, что точка с запятой не просто разделяет инструкции, она превращает выражение в инструкцию. У вас строка кода может быть как инструкцией, так и выражением, и если нужно последнее — просто не ставьте точку с запятой.
В обмен на гарантию отсутствия не только NPE, но и UB на ровном месте. Вообще, после нескольких месяцев интенсивного использования Rust мозг перестраивается и борьба с borrow-checker прекращается. Дело привычки.
Как уже написали, под это есть готовый RCF и в редакции Rust 2021 вполне возможно он будет реализован.
Смотреть на сигнатуру. В любом случае лучше всегда на нее смотреть, зачастую этого уже достаточно.
Соглашусь, что иногда
returnудобно использовать, чтобы сократить количество вложенных блоков и улучшить читаемость. Хотя во многих других случаях лучше без него.