В случае гитхаба — можно только читать и клонировать. Собирать/тестировать без разрешения, видимо, уже может быть незаконно) Использовать где-то без разрешения — тем более.
Упрощает грамматику языка, убирает неоднозначности. Слоты аргументов в сигнатуре создают контекст сопоставления (аналогично с let), так что не надо вводить лишнюю сущность в грамматику.
Так что можно писать, если вдруг надо, всякое странное:
Это вообще самая главная документация по ржавчине, с ней стоит в любом случае ознакомиться всем интересующимся. Но там как раз во многих местах нет объяснения почему в языке сделано именно так как сделано. Если и есть, то очень краткое. Для полноценного выяснения причин часто приходится спрашивать в чатах-форумах всяких или заниматься RFC-археологией (там есть клевые секции с альтернативами), а вот есть мнение, что хорошее понимание причин позволяет лучше понимать и конечный результат.
Хотя конкретно в этой главе, которую, если не ошибаюсь, уже кучу раз переписывали, мотивация не так плохо показана.
Оно досталось внаследство от функциональщины, того же OCaml, насколько я помню. Плюсы:
помогает убрать изменяемость объекта без лишнего блока, иногда очень удобно.
хорошо сочетается с семантикой перемещения — let foo = foo.unwrap();.
если что-то пошло не так, то ты почти всегда получишь предупреждение о неиспользованной затененной переменной.
ну и уж если совсем не нравится, то для своего проекта можно clippy подтянуть, в нем три проверки есть (по умолчанию все выключены):
shadow_reuse — rebinding a name to an expression that re-uses the original value, e.g. let x = x + 1
shadow_same — rebinding a name to itself, e.g. let mut x = &mut x
shadow_unrelated — The name is re-bound without even using the original value
> Насколько я знаю в rust будет добавляться garbage collector
Меня эта перспектива очень смущает до сих пор, все надеюсь что откажутся. Не верю я, что на такой стадии получится гладко в язык вписать GC (статьи про текущий попытки это сделать лично мне ужасают количеством тонкостей) и сильно побаиваюсь разделения crates.io на два лагеря и вытекающие из этого сложности.
RustType, как я понимаю, написан с нуля на ржавчине, просто с сильным поглядыванием на структуры и алгоритмы stb_truetype. А потом проект несколько в сторону уходит и своих фишек уже добавляет.
А вот github.com/PistonDevelopers/truetype — это именно порт stb_truetype. У них там, особенно если в историю залезть, вообще все в unsafe и сырых указателях, которые они мееедленно вычищают. И до сих пор не вычистили. Так что портирование подобного сишного кода выглядит довольно трудоемко.
Мне в этой статье только немного странно, зачем на примере строк это показывать, раз до &str дело не доходит и он даже не упоминается. И тут никак не объясняется, почему в одном месте (println!) мы используем просто строковый литерал, а в других местах мы делаем String::from. Лучше было бы тогда, как мне кажется, завести структуру с каким-нибудь u8 полем и ее мучать, а то String/&str — это известное больное место для знакомящихся с языком.
Ага, я об этом подумал уже когда запостил и даже накидал аналогичную версию 3.0, но потом решил что не очень клево превращать комментарии к статье в git)
Такой подход может сильно помешать использованию кода людьми, которые не хотят нарушать закон.
В случае гитхаба — можно только читать и клонировать. Собирать/тестировать без разрешения, видимо, уже может быть незаконно) Использовать где-то без разрешения — тем более.
Ха. А если зарезать и ограбить человека в темном переулке и спрятать труп, то никто ничего не запретит.
О.о ээээ
Не разрешать просто.
https://ru.wikipedia.org/wiki/Лицензия
https://ru.wikipedia.org/wiki/Авторское_право
http://stackoverflow.com/questions/5521080/can-i-use-the-code-in-a-github-project-which-does-not-have-a-license-specified
по ссылке: "Регистрация на событие закрыта"
Дело тихонько двинулось, кажется: http://smallcultfollowing.com/babysteps/blog/2016/04/27/non-lexical-lifetimes-introduction/
let
), так что не надо вводить лишнюю сущность в грамматику.Так что можно писать, если вдруг надо, всякое странное:
https://play.rust-lang.org/?gist=dc15c72441ad9d9371f68080790637e5
Ну и не так мало людей считают, что так читаемость улучшается, но это уже вкусовщина.
Хотя конкретно в этой главе, которую, если не ошибаюсь, уже кучу раз переписывали, мотивация не так плохо показана.
Плюсы:
let foo = foo.unwrap();
.Как по мне, если для удобного решения задачи
Rc
не хватает, то лучше такое на другом языке это дело и написать.Cell
илиRefCell
скорее. Но, в любом случае, в статье же о работе по умолчанию говорится.Меня эта перспектива очень смущает до сих пор, все надеюсь что откажутся. Не верю я, что на такой стадии получится гладко в язык вписать GC (статьи про текущий попытки это сделать лично мне ужасают количеством тонкостей) и сильно побаиваюсь разделения crates.io на два лагеря и вытекающие из этого сложности.
А вот github.com/PistonDevelopers/truetype — это именно порт stb_truetype. У них там, особенно если в историю залезть, вообще все в unsafe и сырых указателях, которые они мееедленно вычищают. И до сих пор не вычистили. Так что портирование подобного сишного кода выглядит довольно трудоемко.
В идиоматичный код, наверное, не возможно. Все-таки система владения/одалживания требует специфической структуризации кода.
&String
в clippy даже предупреждение есть: https://github.com/Manishearth/rust-clippy/wiki#ptr_arg&str
дело не доходит и он даже не упоминается. И тут никак не объясняется, почему в одном месте (println!
) мы используем просто строковый литерал, а в других местах мы делаемString::from
. Лучше было бы тогда, как мне кажется, завести структуру с каким-нибудьu8
полем и ее мучать, а тоString/&str
— это известное больное место для знакомящихся с языком.Они и должны быть громоздкими и обращающими на себя внимание, как по мне. Это ж преобразования типов — в этом месте легко вносятся логические ошибки.
play.rust-lang
Эх, вечно я над всякой ерундой залипаю.