172 похожих чатов

Привет. Есть с растом такая трабла, что многие считают его

сложным, хотя если не копаться с лайфтаймами, не создавать структуры ссылок и подобное, он довольно прост, а его правильный синтаксис позволяет избежать странных проблем в языке с динамической типизацией и тем более забыв break в switch, а для начала "скриптинга" достаточно прочитать первые 4 главы растбука.

Некогда я предлагал раст знакомому, и он сказал что его испугало и в чём проблема: подача материала в формате "мы попытаемся сделать это, получим ошибку, и это попробуем, получим ошибку".

Вместо того, что бы изначально изложить правильный путь, а на всякие "тупости формата структура это не итератор" можно просто забить, я даже не представляю, как такое можно написать. Так что может лучше писать по делу, прямо как поваренная книга: как сделать итератор? А вот счётчику с ссылкой на данные надо дать трейт итератор, и всё.

Вот пример.
https://habr.com/ru/post/533204/

Понимаю, что раст хочет показать сразу, какой он мол безопасный, но на деле это лишь пугает новичка. Куда веселее, когда сначала у юзера всё работает и он получает эйфорию, чем "не так, и не сяк, и не вот так, а вот оно очевидное изначально решение".

Это напоминает изучение человеческого языка с грамматики, когда вместо "Hallo, ich bin" на новичка налезают "тут надо точку, а тут надо лицо, вот таблица, а вот нужен падеж, а тут исключение, а вместо ist(есть) надо es gibt(существует), хотя по-детски ist". Уж лучше юзер сначала достигнет уровня А1, а затем будет внедряться в подробности, не случайно школа длится 11 лет, хотя можно сжать до пяти, сразу начав со сложных формул по физике и матана.

И не случайно интернац. языком является английский, а не схожий немецкий(ибо германский) — потому что грамматика для новичка куда проще, хотя уровня С достигнуть уже куда сложнее, чем в немецком — к этому времени ты уже прошел самое сложное.

50 ответов

7 просмотров

Раст и есть сложный. Я не знаю у кого какой путь, но я прочитал Rust book и сразу полез на LeetCode делать задачи. Не получается ничего. В Rust Book недостаточно информации, чтобы сделать что-либо сильно сложнее Hello World. Например, написать структуру данных, даже односвязный список, имея только информацию из Rust Book, почти невозможно. Приходится добирать информацию отовсюду, но ее реально мало, крупинки. Книг кроме Rust Book написана ровно одна (заказал неделю как, до сих пор даже не отправили, кроме того, она стоит очень дорого). Вторая - в процессе написания, выйдет весной (Rust In Action). По сети приходится собирать разрозненные куски информации тут и там. Большинство статей и постов про Rust просто невозможно прочитать дальше второго абзаца имея за пазухой только Rust book, начинаешь просто теряться в трех строках кода: "А что это?", "А зачем это?", "А этого в Rust book тоже не было :("

ozkriff🇺🇦 Lesnikóv
Крупинки? О.о https://github.com/ctjhoa/rust-learn...

Ну вот это впервые увидел. Откуда новичку взять такие ссылки?

Eugene Morozov
Ну вот это впервые увидел. Откуда новичку взять та...

Закреплено в новичковом чате: https://t.me/rust_beginners_ru/58928

Eugene Morozov
Раст и есть сложный. Я не знаю у кого какой путь, ...

Чот вы какие-то страсти мордасти рассказываете… Если вы не умеете читать информацию и ее запоминать, то вам ничего не поможет. Что значит одного лишь RustBook не хватит, чтобы написать что-то сложнее хелло ворода? Не, если вы из растбука прочли только заглавия, то может быть и да, но блин там же все ясно и понятно описано, было бы желание только читать и запоминать информацию…

Adv0cat
Чот вы какие-то страсти мордасти рассказываете… Ес...

Конкретно я говорю, что там недостаточно информации, чтобы писать свои структуры данных.

Eugene Morozov
Конкретно я говорю, что там недостаточно информаци...

Ну как не достаточно, если достаточно, то что вы не смогли это не значит, что информации не достаточно!

Adv0cat
Ну как не достаточно, если достаточно, то что вы н...

Для этого надо поставить научный эксперимент: взять человека не писавшего на Rust, дать ему только Rust Book, и попросить после этого написать самостоятельно список или бинарное дерево или HashMap. Я не гожусь, потому что я уже за пределами Rust Book почитал немного

Quet Zal
а можно ссылку на задачку из литкода ту?

Задача, на которой я споткнулся, вот: https://leetcode.com/problems/merge-two-sorted-lists/

Eugene Morozov
Для этого надо поставить научный эксперимент: взят...

Вы понимаете что помимо информации есть еще свойство мозга обрабатывать эту информацию?)) Вы можете посадить 2 разных человек написать вот это вот, и один осилит другой нет, так кому верить?))

Adv0cat
Вы понимаете что помимо информации есть еще свойст...

Ну блин, растбук действительно не рассказывает, как написать вектор.

Adv0cat
Вы понимаете что помимо информации есть еще свойст...

Статистику уже собрать. Сколько человек смогло, а сколько нет. Мне неприятно признаваться, но я не асилил. Поэтому я хоть и разозлился на Rust, но продолжаю есть кактус, чтобы доказать себе прежде всего, что могу

Mikail Bagishov
Ну блин, растбук действительно не рассказывает, ка...

Дак он и не должен рассказывать как написать все программы мира и все структуры мира))))

Mikail Bagishov
Ну блин, растбук действительно не рассказывает, ка...

Насчет вектора хз, но мне кажется linked list точно можно написать после растбука

Eugene Morozov
Для этого надо поставить научный эксперимент: взят...

Проблема в том что rust это не мейнстрим язык с gc. Дайте человеку 2-4 часа на написание std vector на c++ и такое же время на ArrayList на java

Adv0cat
Дак он и не должен рассказывать как написать все п...

Блин, я в начале года читал, поэтому не помню точно Там по-моему ни одна структура данных не написана

Max Zhuravkov
Проблема в том что rust это не мейнстрим язык с gc...

И то и другое я вроде делал, не помню, чтобы были сложности

Adv0cat
Дак он и не должен рассказывать как написать все п...

Не должен. Но, кажется, ты пошел обвинять ОП в том, что он невнимательно читал растбук.

Alexandr Strijnev
Насчет вектора хз, но мне кажется linked list точн...

Насколько я помню, растбук вообще не рассказывает, как память аллоцировать. А нормальный двусвязный список на примитивах их std не построишь.

Eugene Morozov
И то и другое я вроде делал, не помню, чтобы были ...

а чо, есть C++Book, который можно дать, и вектор на темплейтах изобразят?

Roma S
а чо, есть C++Book, который можно дать, и вектор н...

Я давно не читал ничего по C++ Но после Страуструпа можно, по-моему. И вообще, по C++ просто вагон информации для любого уровня, на любом языке, в любом стиле подачи Понятно, что и язык дольше существует, конечно

Eugene Morozov
Рассказывает

По оглавлению не видно. Покажешь, где?

Mikail Bagishov
По оглавлению не видно. Покажешь, где?

Я не помню точно, говорю же, что читал в начале года Но это Box - а Box там точно описывается

Anton-Trionprog Автор вопроса
Eugene Morozov
Раст и есть сложный. Я не знаю у кого какой путь, ...

хм. интересный сценарий. Наверно трудности связаны с тем, что LeetCode изначально ориентирован на ЯП вроде C++, Java, где проблема указателей не решена синтаксически(В плюсах никак, в жабе GC). А как только вы получаете "простое" задание со списком, то вы сразу касаетесь сырых указателей, которые в расте — высший пилотаж. Ибо список — базовая структура данных, основанная на ансейфе и предположениях. А так, для списка вам понадобится его элементы поместить в контейнер, у которого есть два умных указателя(Rc) на следующий и предыдущий контейнеры, причём следующий может отсуствовать, поэтому он должен быть Option, При этом контейнеры выстраиваются в цепочку слева-направо, поэтому предыдущий контейнер владеет следующим(Rc), а следующий лишь знает предыдущего исключительно для операции вставки, поэтому тут слабый указатель Weak. Увы, но будет счётчик ссылок, но это безопасный вариант, можно отказаться от счётчика ссылок, и вместо умных указателей заюзать сырые, опасные, и тут начинается ансейф. Код контейнера простой: struct Node<T> { element:T, prev: Option<Weak<Node<T> > >,//предыдущий контейнер может не существовать, но мы его знаем next: Option<Rc<Node<T> > >//следующий может не существовать, но мы им владеем } Для упрощения можно аналогично typedef в С. type NextPtr<T> = Rc<Node<T> >; type PrevPtr<T> = Weak<Node<T> >; Ну и сама структура списка, с которой юзер работает, должна владеть первым контейнером, тем самым владея и последующими struct List<T> { first: NextPtr<T>, last: NextPtr<T> } Ну а далее в impl надо написать методы. —————— Для меня в начале было тоже тяжело — захотел сделать лабу на расте со строками. И то, что на С я бы сделал за 30 минут, на расте ушло 6 часов, зато какие строки! &str, которые ссылаются на часть строки, вместо её копирования(что в С трудно из-за вынужденного нуля, который затрёт следующую букву), с юникодом вместо извращений ну и подобное. Так что может вам стоит начать с чего-то простого вроде пересечения отрезков и не юзания структур данных вместо их реализации, т.е. реализации практических задач?

Eugene Morozov
И то и другое я вроде делал, не помню, чтобы были ...

Просто вы писали что на это надо 2-4 часа. Думаю вы погорячись с оценкой с 0 до std vector за такой срок :)

Max Zhuravkov
Просто вы писали что на это надо 2-4 часа. Думаю в...

Наверное невнимательно прочитал, да, за 2-4 часа не получится, но для неновичка в программировании, всё равно будет быстрее, чем на Rust, мне кажется

Anton Trionprog
хм. интересный сценарий. Наверно трудности связаны...

Ну я вот и подумал, что сначала надо потренироваться на чем-то В Rust Book упражнений нет Посмотрел, на LeetCode можно вроде на Rust писать Решил одну задачку с трудом, вторую, третью, а потом как на списки попал, так попал ))

Eugene Morozov
Статистику уже собрать. Сколько человек смогло, а ...

Признайтесь, вы просто влюбились в Rust 🥰 И не потому продолжаете на Rust писать, что он сложный, а что с его сложностью разобраться по силу, другой вопрос, что он дает много плюшек, которые не дает ни один другой язык 😊

Adv0cat
Признайтесь, вы просто влюбились в Rust 🥰 И не пот...

Ну, не знаю. Для начала я жду книгу от O'Reilly, надеюсь, придёт до новогодних каникул. Вроде годная книга, как говорят. Просто появился азарт: "Чем я хуже остальных, другие смогли, и я должен смочь еще лучше" Хочется преодолеть эти трудности и начать щелкать структуры данных как орешки на Rust

Adv0cat
Признайтесь, вы просто влюбились в Rust 🥰 И не пот...

вся "любовь" пропадает, как только встречается сложная тема с лайфтамами

Boris Vinogradov
так ни одна книга по С++ тоже

Ну вообще да. А в курсах это вроде как встречается.

Mikail Bagishov
Ну вообще да. А в курсах это вроде как встречается...

у раста тоже был где-то курс по структурам данных

Mikail Bagishov
Ну вообще да. А в курсах это вроде как встречается...

(По крайней мере таков мой (небольшой) опыт)

Mikail Bagishov
(По крайней мере таков мой (небольшой) опыт)

ну я тоже на свой опыт опираюсь и единственное полное описание той же мапы было во втором томе страуструпа

Eug
вся "любовь" пропадает, как только встречается сло...

Ну если с лайфтаймами не разобраться, то конечно любовь пропадет, любая любовь о бытовуху разбивается, если заранее не обсудить какие-то вещи)))

Adv0cat
Ну если с лайфтаймами не разобраться, то конечно л...

для того, чтобы разобраться со сложными случаями, нужна документация, плюс, в самом языке ещё не реализованые какие-либо фичи, типа GAT

Anton-Trionprog Автор вопроса
Eugene Morozov
Ну я вот и подумал, что сначала надо потренировать...

причём если вы сделаете список на сырых указателях, у вас по сути выйдет то же, что на С++ и раст вам не поможет. Ибо структуры данных — это ансейф базис, базирующийся только на предположении, что он работает идеально. Зато 99% прикладного кода сейф, и он может сгенерировать гейзенбаг только если есть ошибка в 1% кода. И в том и фича, что в случае такой ошибки вы сканируете только этот один процент, а не 100% кода как в С++, и именно на этот процент вы натравливаете тестировщиков и самые опытные кадры, а остальные 99% как правило "если компилится, значит работает", за исключением логических ошибок в сложных библиотеках, формирующих, например, математический базис или интерфейс к БД. Поэтому фичи раста проявляются на прикладном уровне, и вам стоит начинать именно с него.

Anton-Trionprog Автор вопроса
Eug
вся "любовь" пропадает, как только встречается сло...

лайфтаймы это высший пилотаж и зачастую юзаются для оптимизации. Вот многие ЯП, не имеющие эту фишку, обходятся счётчиком ссылок и GC, но производительность страдает. Так что этот уровень скорее для самых опытных. и для оптимизаций. А преждевременные оптимизации, как говорится, корень зла, да к тому же этот код может быть выпелен за ненадобностью. Да к тому же иногда для, например, std::mem::swap двух элементов массива/вектора, приходится обманывать компилятор при помощи указателей, ибо нарушается упрощенная концепция владения, что мол мы свопим вектор на вектор, а не элемент на элемент, причём компилятор точно знает, что это разны элементы(разные индексы).

Anton Trionprog
лайфтаймы это высший пилотаж и зачастую юзаются дл...

"лайфтаймы это высший пилотаж и зачастую юзаются для оптимизации" для сложных случаев компилятор rust сам не может лайфтаймы расставить

Anton-Trionprog Автор вопроса
Eug
"лайфтаймы это высший пилотаж и зачастую юзаются д...

ну сложные случаи потому и сложные, что высший пилотаж =)) А так, без лайфтаймов можно выжить, но будет аналог Java или скриптового языка, только на Rc<RefCell<> >

Anton Trionprog
ну сложные случаи потому и сложные, что высший пил...

что-то сомневаюсь, что без лайфтаймов можно выжить

Eug
"лайфтаймы это высший пилотаж и зачастую юзаются д...

"не может" либо потому что вариантов больше одного, либо потому что вариантов ноль, то есть в коде противоречие Что с этим не так?

Anton-Trionprog Автор вопроса
Eug
"лайфтаймы это высший пилотаж и зачастую юзаются д...

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

Anton-Trionprog Автор вопроса
Денис
"не может" либо потому что вариантов больше одного...

может имелось ввиду ссылки на ссылки и структура ссылок, где надо указывать явно?

Eugene Morozov
Ну вот это впервые увидел. Откуда новичку взять та...

Если этой книги еще нет в закрепе, то у меня вопросы к админам: https://github.com/Dhghomon/easy_rust

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта