Что такое cargo linux

Cargo

Создание проекта с помощью Cargo

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

При установке Rust вместе с ним устанавливается и Cargo. Чтобы проверить наличие cargo и его текущую версию, в командной строке/терминале необходимо выполнить команду:

Создание проекта

Создадим простейший проект. Выберем для проектов какой-нибудь каталог на жестком диске. Например, в моем случае это каталог C:\rust . И с помощью команды cd перейдем в консоли/командной строке к этому каталогу:

Для создания нового проекта в cargo предназначена команда new . Допустим, наш проект будет называться hello . Так, для создания проекта выполним команду:

После этого в папке c:\rust будет создан каталог hello , который будет содержать файлы проекта.

Перейдем в этот каталог командой cd:

Что представляет проект Cargo, создаваемый по умолчанию:

Скрытая папка .git предназначена для работы с Git

Папка src предназначена для хранения файлов с исходным кодом. По умолчанию в ней уже есть один файл — main.rs со простейшим кодом:

Файл .gitignore также предназначен для работы с Git и устанавливает, какие папки и файлы не будут загружаться на git-репозиторий

Файл Cargo.toml представляет конфигурацию проекта Cargo. По умолчанию в моем случае он имеет следующий код:

По умолчанию он определяет ряд настроек. В каждом конкретном случае они могут отличаться. Так, секция [package] устанавливает данные пакета приложения. В частност, здесь определены следующие опции пакета:

name — имя пакета

version — версия пакета

authors — авторы пакета

edition — версия Rust

Также по умолчанию в файле определена секция [dependencies] . В данном случае он пуст. В этой секции определяются внешние библиотеки, используемые в проекте.

Построение и запуск проекта

После того, как мы закончили работу с файлами проекта, его надо построить — создать исполняемый файл приложения. Для построения в Cargo определена команда build . Так, по умолчанию у нас уже есть файл main.rs, который содержит некоторый код. Выполним построение этого проекта:

Эта команда создает исполняемый файл приложения в папке target/debug . То есть на Linux/MacOS это файл target/debug/hello , а на Windows — target\debug\hello.exe . И после построения мы можем запустить этот файл. На Linux/MacOS с помощью команды:

На Windows с помощью команды:

Также Cargo предоставляет команду run , которая позволяет сразу построить проект и запустить созданный файл:

Когда проект полностью готов, мы можем выполнить его построение с флагом —release :

В этом случае исполняемый файл приложения создается в папке target/release ( target\release на Windows), вместо target/debug .

Источник

Rust (Русский)

Rust — мультипарадигмальный компилируемый язык программирования общего назначения, спонсируемый Mozilla Research, поддерживающий функциональное программирование, модель акторов и процедурное программирование. Внимание языка сосредоточено на трёх задачах: безопасность, скорость и параллелизм. Он сопоставим по скорости и возможностям с C++, однако, даёт большую безопасность при работе с памятью, что обеспечивается механизмами ограничения.

Contents

Rust Core Library

Эта статья или раздел нуждается в переводе

Rust Core Library — свободная от зависимостей основа стандартной библиотеки Rust. It interfaces directly with LLVM primitives, which allows Rust to be platform and hardware-agnostic. It is this integration with LLVM allows Rust to obtain greater performance than equivalent C applications compiled with Clang, making Rust software designed with libcore lower level than C. Developers looking to target software for embedded platforms may forego the standard library with #[nostd] to exclusively use the no-batteries-included core library for smaller binary sizes and improved performance. However, using #[nostd] limits the amount of software support that you can get from the larger Rust community as a majority of libraries require the standard library.

Стандартная библиотека Rust

Стандартная библиотека Rust предоставляет удобные абстракции высокого уровня, с помощью которых создаётся большинство переносимых программ на Rust. Например, она содержит типы Vec , Iterator , Option , Result и String ; огромное число методов для примитивов языка; много стандартных макросов; поддержка ввода-вывода и многопоточности; использование кучи (heap) с помощью Box ; и многие другие высокоуровневые возможности, не доступные в libcore.

Читайте также:  Сервер загрузочный диск windows

Цикл выпуска

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

Установка

Из репозитория

Для установки последней стабильной версии Rust из официальных репозиториев Arch Linux, установите пакет rust . Он установит компилятор rustc.

С помощью Rustup

Официальный и рекомендумемый способ установки Rust для разработки ПО — с помощью инструмента Rustup, написанного на Rust.

Преимуществом использования Rustup вместо обычной устаноки Rust из репозитория является возможность установки нескольких toolchains (stable, beta, nightly) для нескольких целевых платформ (windows, mac, android) и архитектур (x86, x86_64, arm).

Есть два способа установки rustup: официально поддерживаемый разработчиками Rust и поддерживаемый Arch Linux.

  1. Скачайте скрипт установки с помощью curl -f https://sh.rustup.rs > rust.sh , просмотрите его: vim ./rust.sh и запустите: ./rust.sh для установки. Для обновления rustup в будущем запускайте rustup self update .
  2. Также пакет rustup доступен в официальных репозиториях Arch Linux. Обратите внимание, что при установке с помощью этого пакета обновление с помощью rustup self update работать не будет, и для обновления rustup следует обновлять этот пакет с помощью pacman.

Теперь нужно установить сам Rust. По умолчанию будет установлена стабильная версия для вашей архитектуры.

Проверим версию Rust с помощью rustc -V :

Если вы хотите использовать nightly, выполните:

Проверка после установки

Давайте убедимся, что Rust установился корректно, написав простую программу:

Затем скомпилируйте её с помощью rustc , введя это:

Кросс-компиляция

С помощью rustup

Использовать кросс-компиляцию с rustup очень легко. Он поддерживает очень много целевых платформ. Полный их список можно увидеть с помощью команды rustup target list .

Например, если вы хотите использовать stable Rust для Windows с компилятором GNU, сделайте следующее:

Эта команда установит только rust и инструменты для вашей целевой платформы, и для кросс-компиляции нужно сделать ещё несколько вещей.

Windows

В этом разделе $ARCH будет целевой архитектурой ( x86_64 или i686 ).

  1. Установитеmingw-w64-gcc и wine
  2. Добавьте определение binfmt для исполняемых файлов Windows вручную.
  3. Если вы используете rustup, достаточно просто выполнить команды rustup install stable-$ARCH-pc-windows-gnu и rustup target add $ARCH-pc-windows-gnu для установки Rust и стандартной библиотеки для вашей архитектуры. Если вы не используете rustup, поставьте стандартную библиотеку Rust для Windows в вашем каталоге rustlib ( /usr/local/lib/rustlib если у вас rust-nightly-binAUR или /usr/lib/rustlib если вы используете пакет rust ). Простейший путь для этого — скачать установщик Rust под Windows для нужной вам архитектуры, установить с помощью Wine ( wine start my-rust-installer.msi ) и скопировать $INSTALL_DIR/lib/rustlib/$ARCH-pc-windows-gnu в ваш каталог rustlib.
  4. Подскажите cargo, где искать MinGW-w64 gcc/ar добавлением следующих параметров в

/.cargo/config (создайте файл, если он отсутствует):

Теперь вы можете выполнять кросс-компиляцию для Windows, указывая дополнительный аргумент —target $ARCH-pc-windows-gnu при вызове cargo:

Неофициальные пакеты

Неофициальный репозиторий archlinuxcn содержит rust-nightly и стандартную библиотеку Rust для i686, ARM, ARMv7, Windows 32 и 64, и вы можете просто установить то, что вам нужно, и использовать кросс-компиляцию. Тем не менее вам нужно найти ARM toolchain самостоятельно. Для Windows 32bit вам нужно получить libgcc_s_dw2-1.dll для сборки и запуска.

Cargo

Cargo система сборки и менеджер пакетов для Rust, можно установить с помощью пакета rust . Nightly доступен в AUR: cargo-nightly-bin AUR [ссылка недействительна: package not found] . Если у вас rustup , то он уже содержит в себе cargo.

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

Использование

Для создания нового проекта с помощью Cargo:

Эта команда создаст директорию с файлом Cargo.toml по умолчанию и настроит сборку в исполняемый файл (потому что мы добавили —bin ; иначе будет собираться библиотека).

Поддержка в IDE

Инструменты

Racer

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

  • С помощью rustup: rustup component add rust-src
  • Из AUR: rust-src-gitAUR или rust-nightly-srcAUR , в этом случае вы должны установить переменную окружения RUST_SRC_PATH .

После установки исходного кода вы можете использовать Cargo для установки racer или получить его из репозиториев ( rust-racer ).

Clippy

Clippy использует поддержку плагинов компилятора в Nightly-сборках Rust, чтобы обеспечить большое количество дополнительных проверок для обнаружения и предупреждения о более широком разнообразии ошибок и неидиоматическом Rust. Поскольку для работы требуется поддержка плагинов компилятора, clippy не будет работать при компиляции с помощью стабильной версии компилятора Rust.

Редакторы

Atom поддерживает программирование на Rust, когда установлены оба следующих модуля: language-rust и linter-rust.

IntelliJ IDEA

В IntelliJ IDEA имеется Rust plugin. Этот плагин также работает с CLion. При настройке toolchain используйте rustup для загрузки исходников ( rustup component add rust-src ), а затем выберите

/.rustup/toolchains/ /bin в качестве расположения toolchain.

Visual Studio Code

В Visual Studio Code поддержка Rust может быть получена через официальное kalitaalexey.vscode-rust [устаревшая ссылка 2020-08-04] дополнение.

В Vim поддержка Rust может быть получена через официальный rust.vim плагин.

Emacs

В Emacs поддержка Rust может быть получена через официальный rust-mode плагин.

В Kate поддержка Rust может быть получена через официальный kate плагин. Он устанавливается по-умолчанию пакетом kate , требует установки racer AUR и ручной активации.

Источник

The Rust Programming Language

Привет, Cargo!

Cargo является системой сборки и менеджером пакетов в Rust. Большая часть разработчиков используют данный инструмент для управления проектами, потому что Cargo выполняет для вас множество таких задач, как сборка кода, загрузка библиотек зависимостей, сборка этих библиотек и прочие. (Мы называем библиотеками то, что необходимо вашему коду как зависимость, dependencies.)

Простейшие Rust программы, вроде той, что мы уже написали, не имеют зависимостей. Если бы мы собрали «Hello, world!» проект с помощью Cargo, то сборка использовала бы часть возможностей Cargo: те её функции, которые выполняют только сборку кода. По мере того, как вы будете писать более сложные программы на Rust, вы будете добавлять в них разные зависимости. Если вы начнёте проект с использованием Cargo, то добавлять зависимости будет намного проще, чем без него.

Так как большая часть проектов использует Cargo, то остальная часть книги подразумевает, что вы также используете Cargo. Cargo устанавливается вместе с Rust при использовании официальных установщиков обсуждаемых в разделе «Установка Rust». Если вы установили Rust другим способом, то проверьте, работает ли он, введя команду проверки версии Cargo в терминале:

Если команда выдала номер версии, то значит Cargo установлен. Если вы видите ошибку, вроде command not found («команда не найдена»), загляните в документацию для использованного вами способа установки, чтобы выполнить установку Cargo отдельно.

Создание проекта с помощью Cargo

Давайте создадим новый проект с помощью Cargo и посмотрим, как он отличается от нашего начального проекта «Hello, world!». Перейдите обратно в папку projects (или любую другую, где вы решили сохранять код). Затем, в любой операционный системе, запустите команду:

Первая команда создаёт новую папку с названием hello_cargo. Мы дали название проекту hello_cargo, поэтому Cargo создаёт свои файлы внутри папки с этим именем.

Перейдём в каталог hello_cargo и посмотрим файлы. Увидим, что Cargo сгенерировал два файла и одну директорию: файл Cargo.toml и каталог src с файлом main.rs внутри.

Кроме того, cargo инициализировал новый репозиторий Git вместе с файлом .gitignore. Файлы Git не будут сгенерированы, если вы запустите cargo new в существующем репозитории Git; вы можете изменить это поведение, используя cargo new —vcs=git .

Примечание: Git — это распространённая система контроля версий. Вы можете заставить cargo new использовать другую систему контроля версий или вообще отказаться от неё, используя флаг —vcs . Запустите cargo new —help , чтобы увидеть доступные параметры.

Откройте файл Cargo.toml в любом текстовом редакторе. Он должен выглядеть как код в листинге 1-2.

Листинг 1-2: Содержимое файла Cargo.toml сгенерированное командой cargo new

Это файл в формате TOML (Tom’s Obvious, Minimal Language), который является форматом конфигураций Cargo.

Первая строка, [package] , является заголовочной секцией, которая указывает что следующие инструкции настраивают пакет. По мере добавления больше информации в данный файл, будет добавляться больше секций и инструкций (строк).

Следующие четыре строки секции указывают конфигурационную информацию, которая нужна Cargo для компиляции программы: имя (name), версия (version), кто написал и используемую редакцию (edition) Rust. Cargo получает ваше имя и эл.адрес (email) из окружения вашей ОС, так что если информация не корректна, исправьте эти данные и сохраните файл. Про строчку с ключом edition возможно узнать отдельно в Приложении E.

Последняя строка, [dependencies] является началом секции для списка любых зависимостей вашего проекта. В Rust, это внешние пакеты кода, на которые ссылаются ключевым словом crate. Нам не нужны никакие зависимости в данном проекте, но мы будем использовать их в первом проекте главы 2, так что нам пригодится данная секция зависимостей потом.

Откройте файл src/main.rs и загляните в него:

Название файла: src/main.rs

Cargo сгенерировал программу «Hello, world!», такую же как мы писали в листинге 1-1! Различиями между нашим предыдущим проектом и проектом, который генерирует Cargo является то, что Cargo помещает исходный код в каталог src и снабжает нас конфигурационным файлом Cargo.toml в корневой директории нашего проекта.

Cargo ожидает, что ваши исходные файлы находятся внутри каталога src. Каталог верхнего уровня проекта предназначен только для файлов README, информации о лицензии, файлы конфигурации и чего то ещё не относящего к вашему коду. Использование Cargo помогает организовывать проект. Есть место для всего и все находится на своём месте.

Если вы начали проект без использования Cargo, как мы делали для «Hello, world!» проекта, то можно конвертировать его в проект с использованием Cargo. Переместите код в подкаталог src и создайте соответствующий файл Cargo.toml в папке.

Сборка и запуск Cargo проекта

Посмотрим, в чем разница при сборке и запуске программы «Hello, world!» с помощью Cargo. В каталоге hello_cargo соберите проекта следующей командой:

Данная команда создаёт выполняемый файл в папке target/debug/hello_cargo (или target\debug\hello_cargo.exe на Windows), а не в текущей директории проекта. Можно запустить исполняемый файл командой:

Если все хорошо, то Hello, world! печатается в терминале. Запуск команды cargo build в первый раз также приводит к созданию нового файла Cargo.lock в папке верхнего уровня. Данный файл хранит точные версии зависимостей вашего проекта. Так как у нас нет зависимостей, то файл пустой. Вы никогда не должны менять этот файл вручную: Cargo сам управляет его содержимым для вас.

Мы только что собрали проект командой cargo build и запустили его из ./target/debug/hello_cargo . Но мы также можем использовать команду cargo run для компиляции кода и затем его запуска одной командой:

Заметьте, что в этот раз вы не увидели вывода о том, что Cargo компилировал hello_cargo . Cargo понял, что файлы не менялись, поэтому он просто запустил уже имеющийся бинарный файл. Если бы вы модифицировали исходный код, то Cargo собрал бы проект заново перед его запуском как вы уже видели в выводе:

Также Cargo предоставляет команду cargo check . Данная команда быстро проверяет ваш код, чтобы убедиться, что он компилируется, но не создаёт исполняемого файла:

В каком случае не нужно создавать исполняемый файл? Часто команда cargo check является более быстрой по сравнению с cargo build , потому что она пропускает шаг создания исполняемого файла. В случае, если вы постоянно проверяете работу во время написания кода с помощью cargo check , то это ускоряет процесс! Таким образом многие разработчики запускают cargo check периодически, по мере того, как пишут программу, чтобы убедится, что она компилируется. А запускают команду cargo build , когда готовы создать исполняемый файл.

Повторим полученные знания про Cargo:

  • можно собирать проект, используя команду cargo build ,
  • можно одновременно собирать и запускать проект одной командой cargo run ,
  • можно собрать проект для проверки ошибок с помощью cargo check , не тратя время на кодогенерацию исполняемого файла,
  • cargo сохраняет результаты сборки не в директорию с исходным кодом, а в отдельный каталог target/debug.

Дополнительным преимуществом использования Cargo является то, что его команды одинаковы для разных операционных систем. С этой точки зрения, мы больше не будем предоставлять отдельные инструкции для Linux, macOS или Windows.

Сборка финальной версии (Release)

Когда проект, наконец, готов к релизу, можно использовать команду cargo build —release для его компиляции с оптимизацией. Данная команда создаёт исполняемый файл в папке target/release в отличии от папки target/debug. Оптимизации делают так, что Rust код работает быстрее, но их включение увеличивает время компиляции. По этой причине есть два отдельных профиля: один для разработки, когда нужно осуществлять пересборку быстро и часто, и другой, для сборки финальной программы, которую будете отдавать пользователям, которая готова к работе и будет выполняться максимально быстро. Если вы замеряете время выполнения вашего кода, убедитесь, что собрали проект с оптимизацией cargo build —release и тестируете исполняемый файл из папки target/release.

Cargo как конвенция

Для простых проектов Cargo не даёт большой пользы по сравнению с использованием rustc , но он докажет свою пользу как только ваши программы станут более запутанными. С помощью Cargo гораздо проще координировать сборку на сложных проектах, скомбинированных из множества внешних библиотек (crates).

Не смотря на то, что проект hello_cargo простой, теперь он использует большую часть реального инструментария, который вы будете повседневно использовать в вашей карьере, связанной с Rust. Когда потребуется работать над проектами размещёнными в сети, вы сможете просто использовать следующую последовательность команд для получения кода с помощью Git, перехода в каталог проекта, сборку проекта:

Для более детальной информации про Cargo, загляните в его документацию.

Итоги

Теперь вы готовы начать своё Rust путешествие! В данной главе вы изучили как:

  • установить последнюю стабильную версию Rust, используя rustup ,
  • обновить Rust до последней версии,
  • открыть локально установленную документацию,
  • написать и запустить программу типа «Hello, world!», используя напрямую компилятор rustc ,
  • создать и запустить новый проект, используя соглашения и команды Cargo.

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

Источник

Читайте также:  Web управление для windows
Оцените статью