@@vitaliyzinchenko480 фигово, когда нет единого поведения, тем более что с точки зрения ранней документации это реально не должно было компилироваться или должно было бы выдавать warning т.к. пытаемся получить доступ к неинициализированной let, вместо этого что-то мы копируем, а что-то перемещаем. Печально что в новом языке, который претендует на прозрачность и однозначность (притом сам заставляет явно указывать некоторые фишки, вроде преобразования типов, в том числе в сторону расширения) допускает за кадром подобное поведение. И начинающих работать с языком собьёт с толку, т.к. в литературе сказано одно, а тестируешь - получается другое.
@@andrewvsk2368 да, ну во всех языках примитивы отличаются от вновь созданных типов, тут разница одна и она очевидная. Мне норм. И объяснение тоже хорошее -- копировать и перемещать примитивы стоит одинаково.
@@mythbuster6126 В rust есть и понятные темы. Я бы начинал с изучения C. Я и въехал благодаря C. Не Basic, не Pascal, не Java, не C++, не Python. Но может быть благодаря учителю на курсах. Если будет нормальный учитель и учебный план и практика, то можно начинать сразу с Rust. Мне так кажется.
Ну даже в the rust book пишут "immutable variable". Никто уже не вдумывается в этимологию этого слова. "Константная переменная" ни разу не произносил за всё то время, что программируешь?
Даже в Haskell, где нет изменяемного состояния (по умолчанию) есть понятие "переменная". Это понятие используется в математическом смысле. Скажем, мы можем связать с X любое значение, но когда связали, присвоить новое уже не можем. Например, у нас есть функция: F(X) = X * X. Так как на месте X может оказаться что угодно, да и применять эту функцию мы можем много раз с разными аргументами, то мы называем это переменной. В Rust есть ещё и константы - то, что вычисляется в момент компиляции. Скорее всего, "изменяемые переменные" так названы, чтобы не путать их с константами.
Тебе надо - сделал изменяемой и изменил. В остальное время, когда ты не собираешься в неё писать, она защищена от изменения. А константа и в Африке константа, её поменять во время выполнения не получится.
Какой-то слегка мазохистский язык. ;) Хотелось бы иметь "Котлин для системного программирования", дружелюбный инструмент, который программисту помогает, а не стоит над ним с плёткой.
этим он и помогает, что стоит с плеткой. мы уже видели, что происходит, когда язык пытается удовлетворить все, даже самые нелепые хотелки и позволяет говнокодить налево-направо
7.50 это по моему самая тупая "фича", пригорает от такого поведение в c# так как этот тупой компилятор не может разобрать ситуацию когда во всех ветках переменная инициализируется и не может быть так что она не инициирована. А про поведение на 8.20 вообще нет слов. Так то у нас якобы супер константы но мувить мы можем, гениально..
На 8:20 не константы, а неизменяемые переменные. let это просто биндинг для рантайм переменной, для compile-time констант ключевое слово const. Но вообще там ошибка и код скомпилируется, потому что i32 - Copy тип (для этого типа реализован трейт Copy, который форсит copy-семантику), а значит обе переменные (точнее, биндинги к переменным) будут валидные.
Мне кажется, такое поведение (7:50) в C# - проблема не самой фичи, а её реализации. В Java, например, точно так же нельзя читать потенциально неинициализированную переменную, но я не припомню случаев, когда у компилятора были ложные срабатывания. А вот в том же C++ компилятор не настолько строгий, что, однако, не делает написание кода более удобным, зато заставляет иногда посидеть с отладчиком.
Я так понял, это шутка, выведенная индукцией, что ни один пример из доклада не скомпилировался (якобы, т.к. Илья накосячил с пониманием копирования примитивов).