Во-первых, поздравляем вас с началом вашего пути к тому, чтобы стать Растацем! Rust — это статический язык программирования, который может гарантировать безопасность памяти благодаря проверке заимствования. За последние пару лет он стал пользоваться все большей популярностью, и его начали использовать такие компании, как Microsoft и Facebook.
Язык часто сравнивают с golang и cpp, так как синтаксис похож на первый, а производительность недалеко от второго. Крутая кривая обучения часто возникает в контексте изучения ржавчины. Я начал изучать язык около 6 месяцев назад, и я не могу солгать, что кривая обучения была крутой. Есть много терминов и синтаксиса, которые вы найдете в нескольких языках, таких как макросы, проверка заимствования и время жизни. Однако, когда я усердно изучил книгу Rust и начал работать над небольшими программами, я, наконец, освоился.
А теперь ваша очередь 🎉
Оптимизированный опыт разработчиков
Прежде чем приступить к разработке вашего нового безопасного для памяти проекта с открытым исходным кодом, нам необходимо определиться с оптимальным опытом разработки. Во-первых, нам нужно установить rustup. Для дистрибутивов Mac и Linux достаточно использовать curl и выполнить такой скрипт в своем терминале.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Rustup поставляется с инструментом управления сборкой и пакетами, который позволяет очень легко начать разработку. Попробуйте запустить
rustup --version
если вы получили, что команда не найдена, попробуйте перезапустить терминал. Если это работает, то отлично, вы готовы к разработке с ржавчиной 🎉
Если вы похожи на меня и решили использовать vscode, то я рекомендую расширение rust-analyzer. Это дает вам подсветку кода и синтаксиса, завершение кода, переход к определению и многое другое.
Теперь мы готовы начать проект. В вашем любимом типе папки проекта
cargo new my-first-rust-app
Теперь перейдите в свое только что созданное приложение rust, набрав
cd my-first-rust-app
И, наконец, давайте заставим груз работать, набрав что-нибудь простое, например:
cargo run
Эта команда автоматически скомпилирует ваш проект, начиная с файла main.rs, а затем выполнит двоичный файл. Это не должно ничего возвращать, тогда
Hello, World!
Ящики
На практике это то же самое, что и модули в go, пакеты в python и библиотеки в cpp и т. д. Выбор имени, вероятно, связан с именем менеджера пакетов, cargo. Управление пакетами похоже на npm, если вы когда-либо использовали node.js. У вас есть файл Cargo.toml в корне вашего проекта, в котором перечислены внешние и внутренние зависимости. Да, вы можете создавать свои собственные ящики в своем проекте по мере его роста. Но это другой пост, позже.
Чтобы найти интересные и полезные ящики, посетите crates.io. Здесь вы можете найти информацию о различных крейтах с примерами, текущими версиями и ссылками на проект github и официальную документацию.
Если вы найдете интересный ящик, скопируйте ящик в формате
crate = "x.x.x"
так что для ящика ранд, который
rand = "0.8.3"
затем перейдите в свой Create.toml и вставьте строку прямо под зависимостями. Как вы это делаете, также описано на странице crates.io.
Теперь беги
cargo update
для обновления зависимостей, хотя команда запуска груза, которую мы использовали ранее, также сделает это.
Чтобы использовать только что установленный крейт, перейдите к файлу .rs. Для вновь созданного проекта это будет файл main.rs. Если вы хотите сгенерировать случайное число, это можно сделать как
Довольно круто, верно? 🙌
Покажи мне пример
Как веб-разработчик, было бы здорово создать простой веб-сервер, предоставляющий конечную точку. Я пропущу концепции более низкого уровня, такие как параллелизм, и просто позволю ящику справиться с этим за нас.
Лично я фанат фреймворка ракета 🚀, и кажется, что это норма среди большинства веб-разработчиков на ржавчине. Это очень интуитивно понятно и легко начать работу. Просто загляните на их сверкающий веб-сайт
Попался: один важный момент, отмеченный как в документации, так и на их веб-сайте, заключается в том, что Rocket использует ночную версию rust. Чтобы включить эту функцию, запустите
rustup override set nightly
в корне вашего проекта. Ходят слухи, что версия Rocket «0.5.0» будет использовать стабильную версию rust. Когда это произойдет, я не знаю.
Круто, идем дальше. Итак, мы увидели, как легко добавлять новые ящики в ржавчину. Давайте просто возьмем последнюю версию Rocket и добавим ее в наш файл Cargo.toml.
Пришло время создать нашу конечную точку GET /rand, которая возвращает случайное число клиенту по запросу. Для простоты мы вернем только строку вида
{“random_number”:"42"}
Сначала нам нужно создать нашу функцию random_number, которая будет выглядеть так:
Таким образом, синтаксис в основном такой: fn ‹имя_функции› -> тип{…}. В этом случае мы возвращаем строку. В строке 2 мы генерируем случайное число как 8-битное целое число без знака (положительное число) и преобразуем его в строку с помощью метода to_string(). Наконец, функция format!() используется для создания строки json.
Как видите, нет оператора return. Это связано с тем, что последняя строка, не заканчивающаяся точкой с запятой (;) в функции, считается оператором возврата. Конечно, можно явно написать
return format!("{{ 'random_number': {}' }}", random_number);
Также обратите внимание на то, как используется формат. Второй и более высокие аргументы вставляются в первый строковый аргумент, где находится выражение {}. Это означает, что
>format!("{}{}{}", "Hello", ",", " World") > Hello, World
Двигаясь дальше, нам нужно будет поместить эту функцию в контекст Rocket. В нашем случае это проверка того, что эта функция вызывается при GET /random. Это может быть достигнуто с помощью чего-то, называемого макросом. Я не буду вдаваться в это прямо сейчас, но вы можете прочитать больше об этом в Rust book. В нашем случае мы будем использовать макрос GET 😆 вот так
В строке 7 вы можете увидеть макрос в действии. Мы ожидаем, что функция random_number вызовет функцию GET /random и вернет строку. Как вы заметили, Rocket многое делает за кулисами. В строке 14 мы определили функцию main(), которая является точкой входа нашего приложения. В то время как на линии 15 мы зажигаем (потому что, вы знаете, ракета) и монтируем в этом случае один маршрут, начинающийся на /, а затем запускаем ракету. Наконец-то мы готовы к взлету 🚀
Перейдите к своему терминалу в корне вашего проекта (где живет Cargo.toml) и запустите Cargo Run. Теперь вы должны увидеть кучу информации о настройке, похожей на
Введите localhost:8000/random в выбранном вами браузере и посмотрите, как ваш экран загорается с помощью json.
Поздравляем, вы успешно создали веб-сервер на Rust 👏
Полный проект можно найти на github
Заключение
Как вы, наверное, заметили, в Rust было много возможностей, в которые я не углублялся. Это включало такие вещи, как время жизни, средство проверки заимствования, макросы, параллелизм и многое другое. Тем не менее, мы быстро настроили хороший веб-сервер на nightly Rust.
Пожалуйста, следите за мной в твиттере, чтобы узнавать обо всем, что связано с Rust, Javascript, Golang и Blockchain https://twitter.com/kristohberg.
Ресурсы
Если вы хотите продолжать узнавать больше о Rust, я очень рекомендую
- Книга о ржавчине https://doc.rust-lang.org/book/
- Раст на примере https://doc.rust-lang.org/rust-by-example/