Форум программистов, компьютерный форум, киберфорум
Rust
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 21.06.2018
Сообщений: 47
1

Как перестать бороться с компилятором Rust

27.11.2019, 16:53. Показов 867. Ответов 4
Метки rust (Все метки)

уже довольно долго пытаюсь изучать язык Rust но большую часть времени я борюсь с компилятором. и вроде бы абсолютно безопасный код никак не хочет компилироваться. скорей всего это и за того что я пытаюсь писать код как в c/c++ подобных языках. может кто нибудь накидает советов как правильно писать код на Rust?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2019, 16:53
Ответы с готовыми решениями:

[Rust] Как привязывать WinAPI-функции к коду на Rust?
Может кто-нить дать код, КАК привязывать вин апишные функции к растовскому коду (на примере...

[Rust] Обсуждение возможностей и предстоящей роли языка Rust
Psilon, чем он тебя так привлек? И почему именно "убийца плюсов"? Если напишешь развернутый ответ,...

[Rust] Расскажите о своём опыте программирования на Rust
Доброе утро! Расскажите, пожалуйста, о своём опыте программирования на Rust. Можно в сравнении с...

Как перестать ревновать?
Такой негатив внутри себя чувствую когда ревную, ревную я только девушек, которые мне нравятся....

__________________
4
Фрилансер
3681 / 2052 / 565
Регистрация: 31.05.2009
Сообщений: 6,684
27.11.2019, 17:01 2
Цитата Сообщение от Murloc_Knight Посмотреть сообщение
как правильно писать код на Rust?
Прочувствовать и понять, что же такое borrowing
1
61 / 46 / 1
Регистрация: 25.06.2015
Сообщений: 78
29.11.2019, 13:35 3
Странно читать такое, но в написании кода на Rust нет ничего сложного. Даже потом начинаешь очень высоко ценить borrow checker, потому что во многих случаях бывает достаточно просто проверить корректность компиляции через "cargo check", а потом часто можно сразу же использовать релизную сборку "cargo build --release". Если valgrind и нужен, то на порядки реже, чем для C и C++, если, конечно, не использовать много unsafe. И все это в том числе благодаря borrow checker и такой же динамической проверке, встроенной в RefCell.
0
Фрилансер
3681 / 2052 / 565
Регистрация: 31.05.2009
Сообщений: 6,684
29.11.2019, 15:21 4
Цитата Сообщение от dsorokin Посмотреть сообщение
Странно читать такое, но в написании кода на Rust нет ничего сложного.
Э.. Я понимаю, что хочется постоять в белом плаще, особенно когда сам во всём разобрался.
Это примерно как я новичкам в Прологе написал бы - да что вы ноете, всё логично же и понятно.

Ещё раз - концепция borrowing - это не просто. Для начала её нужно понять и прочувствовать. На доках. На примерах. Сломать некоторые привычки и стереотипы.
К сожалению, многие пытаются писать на Rust "по наитию", тогда привычные приёмы превращаются в "борьбу с компилятором", как пишет ТС. Подозреваю, что это одна из форм столь распространившегося сейчас "алхимического программирования", когда в коде бездумно соединяются надёрганные откуда-то конструкции без особых попыток понять глубинный смысл происходящего..
1
61 / 46 / 1
Регистрация: 25.06.2015
Сообщений: 78
29.11.2019, 16:16 5
Черный Фрегат, ну, а сам-то чего умничаешь?

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

Не нужно бояться клонирования, особенно по Rc. Вон, в С++ копирующий конструктор - вообще, рабочая лошадка. И ничего, живут.

Правило только-один-писатель-или-только-одни-читатели звучит вполне разумно, и к этому легко привыкнуть.

Часто нужно бывает слегка трансформировать код, чтобы утихомирить компилятор. Да, бывает такое.

И еще мое личный лайфхак. Часто проще передавать объект как &self, а внутри мутироемое состояние поместить в RefCell, чем потом страдать от попыток протащить &mut self везде. В динамике будут проверяться инварианты по доступу. Опять же, см. выше, причина тормозов может быть совсем в другом месте.

Но если очень приспичит, то для ускорения иногда можно заменить RefCell на UnsafeCell. Кстати, вполне вариант, чтобы не страдать с &mut self, а использовать напрямую &self, но уже под свою ответственность.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2019, 16:16

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как перестать спешить
Здравствуйте.Долгое время я считал, что у меня нет математических способностей,слабое логическое...

Как перестать быть начинающим?
Всем доброго времени суток. Уже некоторое время пытаюсь самостоятельно изучать программирование. В...

IOExeption как перестать ловить?
Вот решил побаловаться с файлами но не тут то было я стал ловить IOExeption притом при второй...

Как перестать быть нубом?
здравствуйте, форумчане! я более-мение освоился с лепкой консольных приложений и с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.