Как изучать в раст
Перейти к содержимому

Как изучать в раст

  • автор:

Ветка изучений Rust: нововведения, полный гайд

Изучение играет ключевую роль в игре Rust – если на ранних этапах можно обойтись и примитивными предметами, что обусловлено отсутствием различных материалов у игрока, на более поздних этапах развития уже желательно переходить на более продвинутое снаряжение – без хорошей винтовки и более-менее прочной брони будет трудно противостоять противнику. Обновление от 3 декабря 2020 года несло скорее исправительный характер – это обновление не привнесло в игру ничего нового. Даже если проанализировать change-list №236 от 03/12/2020, можно заметить, что обновление состоит из малого количества исправлений, а большую же часть составляют доработки и незначительные. Хотя разработчики предоставили 1 нововведение, что, кстати говоря, можно отнести к доработкам – теперь в игре абсолютно новая система исследования предметов с использованием верстаков. Встречайте древо технологий!

Внешний вид ветки исследования в Rust

  • 1 Древо технологий Rust: обзор системы
  • 2 Чем отличается от прошлой
  • 3 Как изучаются предметы в древе изучений
    • 3.1 Начальные предметы, которые доступны
    • 3.2 Дальнейшие ветки и стоимость изучений всех предметов
      • 3.2.1 Верстак первого уровня
      • 3.2.2 Верстак второго уровня
      • 3.2.3 Верстак третьего уровня

      Древо технологий Rust: обзор системы

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

      Чем отличается от прошлой

      Различия в системах колоссальные – если раньше всё было завязано на элементе рандома, то есть игрок вкладывал определённую сумму металлолома, которая была уникальна для каждого из верстаков, а после эксперимента получал случайный неизученный предмет из данного верстака, то теперь игрок заранее понимает, какой предмет он получит. Но при этом теперь количество металлолома, которое придётся потратить на открытие заблокированного предмета, напрямую зависит от этого самого предмета.

      Обновлённая система упрощает изучение предметов, поскольку теперь нет необходимости в изучении всех предметов посредством рандома – игрок сам вправе выбирать, какие предметы ему нужны, а какие лучше оставить неизученными. Также теперь можно без каких-либо проблем узнать, какие предметы ещё не изучены, а какие уже доступны для крафта.

      Как изучаются предметы в древе изучений

      Начальные предметы, которые доступны

      Первым делом при изучении предметов с использованием древа изучений необходимо разблокировать начальные предметы.

      Открытие ветки исследования в Rust

      На верстаке первого уровня изначально доступны для разблокировки 4 предмета: самодельный молот, майка, ведро и переключатель.

      Верстак второго уровня изначально позволяет разблокировать всего 2 предмета: антирадиационный костюм и длинный меч.

      Всего 1 предмет доступен для изначального изучения на верстаке третьего уровня – укреплённая оконная решётка.

      Дальнейшие ветки и стоимость изучений всех предметов

      Верстак первого уровня
      Название предмета Стоимость изучения (металлолом)
      Футболка 20
      Шорты 20
      Куртка 20
      Вязаная шапочка 20
      Балаклава 20
      Водолазка 20
      Зимняя куртка 20
      Фуражка шахтера 20
      Кожаные перчатки 20
      Самодельный меч 20
      Весло 20
      Каяк 20
      Мешки с песком 20
      Каменная баррикада 20
      Деревянная баррикада 20
      Сетчатый забор 20
      Сетчатая дверь 20
      Настенный светильник из консервной банки 20
      Деревянные ставни 20
      Деревянные колья 20
      Деревянная баррикада 20
      Ковер 20
      Ковер из медвежьей шкуры 20
      Вращающееся колесо 20
      Сигнальная шашка 20
      Огненная стрела 20
      Майка 20
      Маленький водосборник 20
      Циркуляционный насос 20
      Стул 20
      Стол 20
      Соединитель жидкости 20
      Жидкостный разделитель 20
      Разбрызгиватель 20
      Камин 20
      Бочка с водой 20
      Большая плантация 20
      Ведро 20
      Маленький аккумулятор 20
      Переключатель 20
      Блокатор 20
      Переключатель «ИЛИ» 20
      Разветвитель 20
      Звуковая сигнализация 20
      Электрический разветвитель 20
      Переключатель «Исключающее ИЛИ» 20
      Потолочный светильник 20
      Таймер 20
      Нажимная плита 20
      Мигалка 20
      Сирена 20
      Кнопка 20
      Тренировочная мишень 20
      Воспламенитель 20
      Холодильник 20
      Почтовый ящик 20
      Самодельный молот 75
      Рубашка 75
      Штаны 75
      Шлем бунтаря 75
      Самодельный тесак 75
      Кирка 75
      Булава 75
      Решетчатый настил 75
      Треугольная решетка для пола 75
      Металлические оконные решетки 75
      Деревянная баррикада с проволокой 75
      Смотровая вышка 75
      Большая деревянная табличка 75
      Огромная деревянная табличка 75
      Ящик для хранения 75
      Топор 75
      Капкан 75
      Пистолетный патрон 75
      Бобовая граната 75
      Огнеметная турель 75
      Самодельный дробовик 75
      Боевой нож 75
      Револьвер 75
      Бинокль 75
      Оружейный фонарик 75
      Глушитель 75
      Стол для смешивания 75
      Самодельные полки 75
      Кровать 75
      Шлем из ведра 75
      Большая солнечная панель 75
      Комбинатор питания 75
      Телефон 75
      Электрический обогреватель 75
      Контроллер двери 75
      Деревянная лестница 125
      Высокая внешняя деревянная стена 125
      Высокие внешние деревянные ворота 125
      Ловушка с дробовиком 125
      Сумка с зарядом 125

      Ветка 1 верстака в Rust

      Верстак второго уровня
      Название предмета Стоимость изучения (металлолом)
      RAND-переключатель 20
      Умный переключатель 20
      Перчатки из дорожных знаков 20
      Катушка Тесла 20
      Радиоприемник 20
      Радиопередатчик 20
      Дистанционный пульт 20
      Пейджер 20
      Металлическая горизонтальная бойница 20
      Металлическая вертикальная бойница 20
      Бетонная баррикада 20
      Длинный меч 75
      Граната F1 75
      Дробь 12-го калибра 75
      Пуля 12-го калибра 75
      Зажигательный снаряд 12-го калибра 75
      Большая аптечка 75
      Медицинский шприц 75
      Ботинки 75
      Броня из дорожных знаков 75
      Шлем из кофейной банки 75
      Средний аккумулятор 75
      Счетчик 75
      HBHF-датчик 75
      Поисковый фонарь 75
      Большой аккумулятор 75
      Шкаф для переодевания 75
      Малый НПЗ 75
      Большой водосборник 75
      Малый генератор 75
      Ячейка памяти 75
      Умная сигнализация 75
      Лазерный датчик 75
      Счетчик ресурсов 75
      Дымовая граната 75
      Электроочиститель воды 75
      Водяной насос 75
      Зенитная управляемая ракета 75
      Толстовка с капюшоном 75
      Килт из дорожных знаков 75
      Подковы высокого качества 75
      Компьютерная станция 75
      Тюремная дверь 75
      Тюремная решетка 75
      Усиленное стеклянное окно 75
      Гаражная дверь 75
      Антирадиационный костюм 125
      Самодельный топор 125
      Самодельный ледоруб 125
      Револьвер Питон 125
      Помповый дробовик 125
      Мина 125
      Полуавтоматический пистолет 125
      Огнемет 125
      Пистолетный патрон (скоростной) 125
      Зажигательный пистолетный патрон 125
      Тяжелый латный нагрудник 125
      Тяжелые пуленепробиваемые поножи 125
      Большая печь 125
      Поршни среднего качества 125
      Свеча зажигания среднего качества 125
      Клапаны среднего качества 125
      Карбюратор среднего качества 125
      Коленчатый вал среднего качества 125
      Модуль кабины транспорта 125
      Модуль двигателя автомобиля 125
      Модуль задних сидений 125
      Модуль двигателя транспорта 125
      Модуль такси 125
      Топливный бак 125
      Модуль для большого грузовика 125
      Пассажирский модуль 125
      Кабина с двигателем 125
      Пассажирский модуль 125
      Подъемник для транспорта 125
      Ветрогенератор 125
      Лифт 125
      Бензопила 125
      Дульный ускоритель 125
      Дульный тормоз 125
      Пистолет-пулемет Томпсона 125
      Самодельный пистолет-пулемет 125
      Патрон 5.56-мм 125
      Полуавтоматическая винтовка 125
      Голографический прицел 125
      Ракета (скоростная) 125
      Ракета (зажигательная) 125
      Тяжелый пуленепробиваемый шлем 125
      Конная броня из дорожных знаков 125
      Очки ночного видения 125
      Лестничный люк 125
      Металлическая баррикада 125
      Треугольный люк 125
      Высокая внешняя каменная стена 500
      Ракетница 500
      Высокие внешние каменные ворота 500
      Автоматическая турель 500

      Ветка 2 верстака в Rust

      Конец ветки 2 верстака в Rust

      Верстак третьего уровня
      Название предмета Стоимость изучения (металлолом)
      Укрепленное стеклянное окно 125
      MP5A4 125
      Лазерный прицел 125
      Патрон 5.56-мм (скоростной) 125
      Ракета 125
      Клапаны высокого качества 125
      Поршни высокого качества 125
      Коленчатый вал высокого качества 125
      Карбюратор высокого качества 125
      Свеча зажигания высокого качества 125
      Патрон 5.56-мм (зажигательный) 125
      Патрон 5.56-мм (разрывной) 125
      Бронированный модуль 125
      Бронированный пассажирский модуль 125
      Прицел 8х 125
      Бронированная дверь 500
      Двойная бронированная дверь 500
      Железная маска 500
      Металлический нагрудник 500
      Взрывчатое вещество 500
      Взрывчатка с таймером 500
      Штурмовая винтовка 500
      Винтовка 500

      Ветка 3 верстака в Rust

      Новая система изучений предметов на верстаках – это замечательная переработка экспериментов, поскольку она значительно упрощает процесс изучения предметов, полностью пропала система рандома. Да и цена на полное изучение предметов по верстакам снизилась, ведь теперь предметы стоят одинаковое количество металлолома, что на столе для изучений, что на верстаках. Теперь можно не прибегать к поиску предметов в ящиках, нет необходимости в столе для изучений, хотя полностью от него избавляться не стоит – какие-то предметы лучше изучить на нём, а не изучать целую ветку.

      Хочу начать изучать Rust. С чего начать, где взять базу?

      Заинтересовал язык Rust, начал знакомиться с статьями про Rust, но там много непонятных терминов. Есть ли какая-то общая литература без сильной завязки на языке (не хочу учить плюсы, чтобы учить Rust)?

      • Вопрос задан более трёх лет назад
      • 18929 просмотров

      Комментировать
      Решения вопроса 1

      Содержание:
      1 Установка Rust
      2 Hello, world!
      3 Hello, Cargo!
      4 Объявление переменных
      5 Условные операторы
      6 Функции
      7 Комментарии в коде
      8 Составные типы данных
      9 Оператор Match
      10 Циклы
      11 Строки
      12 Массивы
      13 Стандартный ввод
      14 Игра угадайка
      15 Ящики и модули
      16 Тестирование кода
      17 Указатели
      18 Паттерны
      19 Синтаксис методов
      20 Замыкания(closures)
      21 Итераторы
      22 Дженерики(Generics) — похоже на шаблоны в С++
      23 Трейты(Traits) — куски кода
      24 Задания
      25 Макросы
      26 Небезопасный код
      27 Заключение

      Ответ написан более трёх лет назад
      Нравится 5 3 комментария
      leukhin @leukhin Автор вопроса
      Официальный гайд действительно самое лучшее что есть сейчас.

      java1cprog

      Anatolij Kosorukov @java1cprog

      Да, действительно, материал т.н. официального гайда («Rust book second edition(!)») весьма качественный. Лучше всего читать на gitbub — там самая актуальная версия.
      Хорошая книга. Хотя, конечно, при его изучении у появляются вопросы (решая которые становишься увереннее и опытнее). Мне эту книгу нравится читать, переводить, писать примеры, дорабатывать их, придумывать свои. Есть ещё идея использовать метод интервальных повторений в обучении. Это гайд хороший помощник в изучении Rust.
      Не без оснований говорят, что лучший способ научиться чему-либо — начать учить этому других. Я решил последовать этому совету (есть успешный опыт в преподавании Java, проведении вебинаров). Вот ссылка на сайт, где я буду собирать для себя и своих учеников учебный материал и писать планы обучения.

      Как крафтить и изучать предметы в RUST

      Всем привет, дорогие читатели. Сегодня мы поговорим о том, как крафтить и изучать предметы в Dota 2. Начнем мы, пожалуй, с недавних изменений, которые затронули системы и того, и другого. Дело в том, что вы могли прийти в игру по одному из старых видео, на YouTube и не сразу разобраться, в чем же дело и как крафтить какие-то предметы. В нашей статье вы научитесь, как правильно изучать и крафтить предметы в RUST.

      Изучение предметов

      С самого начала вы сможете делать какие-нибудь минимальные крафты. Но они настолько незначительны, что по игре – будут мало на что влиять.

      как изучать предметы в раст

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

      Рецепты (чертежи)

      Чтобы вам скрафтить действительно стоящую вещь – вам нужно будет получить на нее рецепт. Сделать это можно двумя способами.

      как изучать предметы в rust

      Первый – вы должны будете найти чертеж где-нибудь на карте. Очень часто можно подобрать рецепты какого-нибудь хлама, без которого вполне можно играть и так (например, камины, почтовые ящики и т.д.). Но мало ли, вдруг вы хотите построить реальный дом в игре, со всеми удобствами.

      Такие рецепты можно выбить из красных и синих бочек, расположенных вдоль дороги. Найти чертежи можно и недалеко от монументов, в аирдропах и т.д. Там уже будут стоящие чертежи, полезные.

      как изучать в раст

      Второй способ – вы должны будете добыть изучаемый девайс. Например, вы хотите изучить бронированную дверь. Вы приносите дверь на стол для исследований, и видите, что для ее изучения – нужно определенное количество металла (750, если быть точным). Изучаете дверь, и она отправляется в ваш инвентарь уже в виде инструкции по созданию. Теперь вы можете отправляться на верстак, чтобы ее создать.

      как изучать в rust

      Верстаки

      В предыдущих наших статьях мы писали, какое значение имеют верстаки в игре RUST и что на них можно крафтить. Поэтому, если вы захотите с этим ознакомиться – прочитайте ту статью отдельно, а в этой – мы затронем только то, что нужно.

      Итак, после того, как вы изучили предмет – вы сможете его скрафтить (создать). В правом нижнем углу таблицы с предметами – есть список того, что вам понадобится для крафта той или иной вещи.

      раст как изучать вещи

      А в правом верхнем – вы сможете посмотреть, какого уровня верстак требуется, для создания того или иного предмета.

      rust как изучать вещи

      Опять же, к крафту приступайте только тогда, когда у вас будет необходимое количество ресурсов для той или иной задачи. Т.е., если исследование обойдется вам только в определенное количество скрапа, то сам крафк – уже будет требовать наличие необходимых ресурсов. В случае с бронированной дверью – это 20 металла высокого качества и 5 шестеренок.

      Итог

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

      Что касается создания верстаков и работы с ними – вам также лучше более подробно ознакомиться с этим в статье, которую мы полностью посвятили этому делу.

      Всем удачных исследований и пока.

      Прочитать позже Отправить статью на e-mail Мы не собираем ваши данные и тем более не передаем их третьим лицам Отправить

      Первые шаги по Rust

      image

      Всем привет. Недавно познакомился с новым для себя языком программирования Rust. Я заметил, что он отличается от других, с которыми мне до этого доводилось сталкиваться. Поэтому решил покопать глубже. Результатами и своими впечатлениями хочу поделиться:

      • Начну с главной, на мой взгляд, особенности Rust
      • Опишу интересные детали синтаксиса
      • Объясню, почему Rust, скорее всего, не захватит мир

      Сразу поясню, что я около десяти лет пишу на Java, так что рассуждать буду со своей колокольни.

      Killer feature

      Rust пытается занять промежуточное положение между низкоуровневыми языками типа C/C++ и высокоуровневыми Java/C#/Python/Ruby… Чем ближе язык находится к железу, тем больше контроля, легче предвидеть как код будет выполняться. Но и имея полный доступ к памяти намного проще отстрелить себе ногу. В противовес С/С++ появились Python/Java и все остальные. В них нет необходимости задумываться об очистки памяти. Самая страшная беда — это NPE, утечки не такое уж частое явление. Но чтобы это все работало необходим, как минимум, garbage collector, который в свою очередь начинает жить своей жизнью, параллельно с пользовательским кодом, уменьшая его предсказуемость. Виртуальная машина еще дает платформонезависимость, но на сколько это необходимо — спорный вопрос, не буду его сейчас поднимать.

      Rust является низкоуровневым языком, на выходе компилятор выдает бинарник, для работы которого не нужны дополнительные ухищрения. Вся логика по удалению ненужных объектов интегрируется в код в момент компиляции, т.е. сборщика мусора во время выполнения тоже нет. В Rust так же нет пустых ссылок и типы являются безопасными, что делает его даже более надежным чем Java.

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

      Эту концепцию можно продемонстрировать в следующем куске кода. Из метода main() вызывается test(), в котором создается рекурсивная структура данных MyStruct, реализующая интерфейс деструктора. Drop позволяет задать логику для выполнения, перед тем как объект будет уничтожен. Чем-то похоже на финализатор в Java, только в отличие от Java, момент вызова метода drop() вполне определен.

      fn main() < test(); println!("End of main") >fn test() < let a = MyStruct < v: 1, s: Box::new( Some(MyStruct < v: 2, s: Box::new(None), >) ), >; println!("End of test") > struct MyStruct < v: i32, s: Box>, > impl Drop for MyStruct < fn drop(&mut self) < println!("Cleaning <>", self.v) > >

      Вывод будет следующим:

      End of test Cleaning 1 Cleaning 2 End of main

      Т.е. перед выходом из test() память была рекурсивно очищена. Позаботился об этом компилятор, вставив нужный код. Что такое Box и Option опишу чуть позже.

      Таким образом Rust берет безопасность от высокоуровневых языков и предсказуемость от низкоуровневых языков программирования.

      Что еще интересного

      Далее перечислю черты языка по убыванию важности, на мой взгляд.

      OOP

      Тут Rust вообще впереди планеты всей. Если большинство языков пришли к тому, что надо отказаться от множественного наследования, то в Rust наследования нет вообще. Т.е. класс может только имплементировать интерфейсы в любом количестве, но не может наследоваться от других классов. В терминах Java это означало бы делать все классы final. Вообще синтаксическое разнообразие для поддержания OOP не так велико. Возможно, это и к лучшему.

      Для объединения данных есть структуры, которые могут содержать имплементацию. Интерфейсы называются trait и тоже могут содержать имплементацию по умолчанию. До абстрактных классов они не дотягивают, т.к. не могут содержать полей, многие жалуются на это ограничение. Синтаксис выглядит следующим образом, думаю комментарии тут не нужны:

      fn main() < MyPrinter < value: 10 >.print(); > trait Printer < fn print(&self); >impl Printer < fn print(&self) < println!("hello!") >> struct MyPrinter < value: i32 >impl Printer for MyPrinter < fn print(&self) < println!("<>", self.value) > >

      Из особенностей на которые я обратил внимание, стоит отметить следующее:

      • У классов нет конструкторов. Есть только инициализаторы, которые через фигурные скобки задают значения полям. Если нужен конструктор, то это делается через статические методы.
      • Метод экземпляра отличается от статического наличием ссылки &self в качестве первого аргумента.
      • Классы, интерфейсы и методы также могут быть обобщенными. Но в отличие от Java, эта информация не теряется в момент компиляции.

      Еще немного безопасности

      Как я уже говорил Rust уделяет большое внимание надежности кода и пытается предотвратить большинство ошибок на этапе компиляции. Для этого была исключена возможность делать ссылки пустыми. Это мне чем-то напомнило nullable типы из Kotlin. Для создания пустых ссылок используется Option. Так же как и в Kotlin, при попытке обратиться к такой переменной, компилятор будет бить по рукам, заставляя вставлять проверки. Попытка же вытащить значение без проверки может привести к ошибке. Но этого уж точно нельзя сделать случайно как, например, в Java.

      Мне еще понравилось то, что все переменные и поля классов по умолчанию являются неизменяемыми. Опять привет Kotlin. Если значение может меняться, это явно надо указывать ключевым словом mut. Я думаю, стремление к неизменяемости сильно улучшает читабельность и предсказуемость кода. Хотя Option почему-то является изменяемым, этого я не понял, вот код из документации:

      let mut x = Some(2); let y = x.take(); assert_eq!(x, None); assert_eq!(y, Some(2));

      Перечисления

      В Rust называются enum. Только помимо ограниченного числа значений они еще могут содержать произвольные данные и методы. Таким образом это что-то среднее между перечислениями и классами в Java. Стандартный enum Option в моем первом примере как раз принадлежит к такому типу:

      pub enum Option

      Для обработки таких значений есть специальная конструкция:

      fn main() < let a = Some(1); match a < None =>println!("empty"), Some(v) => println!("<>", v) > >

      А также

      Я не ставлю себе целью написать учебник по Rust, а просто хочу подчеркнуть его особенности. В этом разделе опишу, что еще есть полезного, но, на мой взгляд, не такого уникального:

      • Любители функционального программирования не будут разочарованы, для них есть лямбды. У итератора есть методы для обработки коллекции, например, filter и for_each. Чем-то похоже на стримы из Java.
      • Конструкция match так же может быть использована для более сложных вещей, чем обычные enum, например, для обработки паттернов
      • Есть большое количество встроенных классов, например, коллекций: Vec, LinkedList, HashMap и т.д.
      • Можно создавать макросы
      • Есть возможность добавлять методы в существующие классы
      • Поддерживается автоматическое выведение типов
      • Вместе с языком идет стандартный фреймворк для тестирования
      • Для сборки и управления зависимостями используется встроенная утилита cargo

      Ложки дегтя

      Этот раздел необходим для полноты картины.

      Killer problem

      Главный недостаток происходит из главной особенности. За все приходится платить. В Rust очень неудобно работать c изменяемыми графовыми структурами данных, т.к. на любой объект должно быть не более одной ссылки. Для обхода этого ограничения есть букет встроенных классов:

      • Box — неизменяемое значение на куче, аналог оберток для примитивов в Java
      • Cell — изменяемое значение
      • RefCell — изменяемое значение, доступное по ссылке
      • Rc — reference counter, для нескольких ссылок на один объект

      И это неполный список. Для первой пробы Rust, я опрометчиво решил написать односвязный список с базовыми методами. В конечном счете ссылка на узел получилась следующая Option>>:

      • Option — для обработки пустой ссылки
      • Rc — для нескольких ссылок, т.к. на последний объект ссылаются предыдущий узел и сам лист
      • RefCell — для изменяемой ссылки
      • ListNode — сам следующий элемент

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

      struct ListNode < val: i32, next: Node, >pub struct LinkedList < root: Node, last: Node, >type Node = Option>>; impl LinkedList < pub fn add(mut self, val: i32) ->LinkedList < let n = Rc::new(RefCell::new(ListNode < val: val, next: None >)); if (self.root.is_none()) < self.root = Some(n.clone()); >self.last.map(|v| < v.borrow_mut().next = Some(n.clone()) >); self.last = Some(n); self > . 

      На Kotlin то же самое выглядит намного проще:

      public fun add(value: Int)

      Как выяснил позже подобные структуры не являются характерными для Rust, а мой код совсем неидиоматичен. Люди даже пишут целые статьи:

      • 10 способов сделать список на Rust
      • Еще один способ
      • Мучения аналогичные моим

      Тут Rust жертвует читабельностью ради безопасности. Кроме того такие упражнения еще могут привести к зацикленным ссылкам, которые зависнут в памяти, т.к. никакой garbage collector их не уберет. Рабочий код на Rust я не писал, поэтому мне сложно сказать насколько такие трудности усложняют жизнь. Было бы интересно получить комментарии практикующих инженеров.

      Сложность изучения

      Долгий процесс изучения Rust во многом следует из предыдущего раздела. Перед тем как написать вообще хоть что-то придется потратить время на освоение ключевой концепции владения памятью, т.к. она пронизывает каждую строчку. К примеру, простейший список у меня занял пару вечеров, в то время как на Kotlin то же самое пишется за 10 минут, при том что это не мой рабочий язык. Помимо этого многие привычные подходы к написанию алгоритмов или структур данных в Rust будут выглядеть по другому или вообще не сработают. Т.е. при переходе на него понадобится более глубокая перестройка мышления, просто освоить синтаксис будет недостаточно. Это далеко не JavaScript, который все проглотит и все стерпит. Думаю, Rust никогда не станет тем языком, на котором учат детей в школе программирования. Даже у С/С++ в этом смысле больше шансов.

      В итоге

      Мне показалась очень интересной идея управления памятью на этапе компиляции. В С/С++ у меня опыта нет, поэтому не буду сравнивать со smart pointer. Синтаксис в целом приятный и нет ничего лишнего. Я покритиковал Rust за сложность реализации графовых структур данных, но, подозреваю, что это особенность всех языков программирования без GC. Может быть, сравнения с Kotlin было и не совсем честным.

      TODO

      В этой статье я совсем не коснулся многопоточности, думаю это отдельная большая тема. Еще есть планы написать какую-нибудь структуру данных или алгоритм посложнее списка, если есть идеи, прошу поделиться в комментариях. Интересно было бы узнать приложения каких типов вообще пишут на Rust.

      Почитать

      Если вас заинтересовал Rust, то вот несколько ссылок:

      • Programming Rust: Fast, Safe Systems Development — хорошая книга, есть так же в электронном варианте
      • Rust Documentation — официальная документация, есть примеры
      • Idiomatic Rust code — список статей
      • ruRust/easy и ruRust/general — каналы в Gitter
      • r/rust/ — Reddit

      UPD: Всем спасибо за комментарии. Узнал много полезного для себя. Исправил неточности и опечатки, добавил ссылок. Думаю, такие обсуждения сильно способствуют изучению новых технологий.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *