Rust (Русский)

Состояние перевода: На этой странице представлен перевод статьи Rust. Дата последней синхронизации: 20 января 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Википедия:

Rust — мультипарадигмальный компилируемый язык программирования общего назначения, сочетает парадигмы функционального и процедурного программирования с объектной системой, основанной на типажах. Rust гарантирует безопасную работу с памятью благодаря встроенной в компилятор системе статической валидации ссылок (borrow checker). Ключевые приоритеты языка: безопасность, скорость и параллелизм. Rust сопоставим по скорости и возможностям с C++/Си, однако даёт большую безопасность при работе с памятью, что обеспечивается встроенными в язык механизмами контроля ссылок.

Ядро языка

Rust Core Library

Rust Core Library — свободная от зависимостей основа стандартной библиотеки Rust. Она напрямую взаимодействует с примитивами LLVM, что позволяет Rust не зависеть от конкретных аппаратных и программных платформ. Именно эта интеграция с LLVM позволяет Rust получить производительность выше чем у эквивалентных приложений на C, скомпилированных с помощью Clang, что делает программы на Rust, разработанные с помощью libcore, более низкоуровневыми, чем на C. Она содержит только типы, не зависящие от платформы, такие как Option, Result и Iterator. Разработчики программ для встраиваемых систем могут отключить использование стандартной библиотеки с помощью #![no_std] и использовать только «безбатареечный» libcore для уменьшения размера скомпилированных программ и повышения производительности. Однако использование #![no_std] ограничивает объём поддержки, которую вы можете получить от сообщества Rust, поскольку большинство библиотек зависят от стандартной библиотеки.

Rust Standard Library

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

Цикл выпуска

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

Установка

Есть два варианта установки Rust, один из которых поддерживается Arch Linux, а другой официально поддерживается Rust.

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

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

В AUR также доступна development-версия компилятора. Используйте для установки заранее скомпилированных файлов или , чтобы собрать компилятор на своей системе.

С помощью Rustup

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

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

Официальный установочный скрипт

Скачайте скрипт установки командой curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rust.sh, просмотрите его: less ./rust.sh и запустите: для установки. Этот скрипт вносит изменения в PATH только в настройках оболочки входа. Для применения изменений вам нужно перезайти или выполнить для обновления PATH в текущей командной оболочке. Для обновления rustup в будущем запускайте .

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

Пакет Arch Linux

В официальных репозиториях Arch Linux есть пакет . Обратите внимание, что при установке с помощью этого пакета обновление с помощью работать не будет, и для обновления rustup следует обновлять этот пакет с помощью pacman.

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

Примечание: Пакет rustup по умолчанию не устанавливает никакой инструментарий. Вместо этого он предоставляет символические ссылки /usr/bin/rustc и /usr/bin/cargo, указывающие на /usr/bin/rustup. Пользователю нужно установить инструментарий вручную, чтобы эти команды Rust могли что-то сделать.

Для установки инструментария задайте в rustup интересующую вас версию: или .

Например:

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

Вам может потребоваться вручную установить инструментарий, например , , или 1.58.0. Это также необходимо сделать, если вы хотите использовать/тестировать другой инструментарий.

$ rustup toolchain install toolchain

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

$ rustup default toolchain

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

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

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

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

$ rustc hello.rs && ./hello
Hello, World!

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

С помощью rustup

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

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

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

Windows

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

  1. Установите пакет .
  2. Выполните чтобы установить стандартную библиотеку Rust для целевой архитектуры.
  3. Подскажите cargo, где искать MinGW-w64 gcc/ar добавлением следующих параметров в ~/.cargo/config (создайте файл, если он отсутствует):

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

$ # Сборка
$ cargo build --release --target "$ARCH-pc-windows-gnu"
$ # Запуск unit-тестов через wine
$ cargo test --target "$ARCH-pc-windows-gnu"

В настоящее время сборка исполняемых файлов с использованием MinGW 6 и инструментария, установленного через rustup, сломана. Чтобы исправить это, выполните

for lib in crt2.o dllcrt2.o libmsvcrt.a; do cp -v /usr/x86_64-w64-mingw32/lib/$lib $HOME/.rustup/toolchains/$CHANNEL-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-gnu/lib/; done

где это канал обновлений (, или )

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

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

Cargo

Cargo — система сборки и менеджер пакетов для Rust. Он является частью пакета . Версия nightly доступна в AUR: . Если у вас , то он уже содержит в себе cargo.

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

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

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

Эта команда создаст директорию с файлом по умолчанию и настроит сборку в исполняемый файл.

Оптимизация для текущей платформы

Чтобы Cargo всегда компилировал оптимальный код для вашего текущего процессора, добавьте флаг в ~/.cargo/config. Имейте в виду, что полученные двоичные файлы не должны распространяться для использования на других компьютерах и могут перестать работать даже на вашей собственной системе, если вы решите сменить процессор в будущем.

Узнайте, какая целевая платформа используется по умолчанию в вашей установке:

В данном примере используется rust на платформе .

Настройка Cargo для компилирования кода, оптимизированного для текущей платформы:

sccache

Время компиляции можно сильно сократить, используя sccache (пакет sccache). Он будет хранить локальный кэш артефактов компилятора, избавляя вас от необходимости перекомпилировать код, который не изменился с момента последней компиляции.

Чтобы включить sccache, можно использовать переменную окружения :

или

RUSTC_WRAPPER=sccache cargo build

Также можно добавить настройку в ~/.cargo/config:

~/.cargo/config
[build]
rustc-wrapper = "sccache"

Поддержка в IDE

Инструменты

Список полезных инструментов можно посмотреть на https://www.rust-lang.org/tools

RLS

RLS реализует Language Server Protocol для Rust, предоставляя IDE, редакторам и другим инструментам информацию о программах на Rust. Он поддерживает 'goto definition', поиск символов, переформатирование и автодополнение кода, а также позволяет осуществлять переименование и рефакторинг.

RLS входит в состав пакета . Чтобы установить RLS с помощью rustup:

$ rustup component add rls rust-analysis rust-src

rust-analyzer

rust-analyzer — это экспериментальная реализация Language Server Protocol для Rust, которая призвана заменить RLS.

Она доступна в виде пакета , а последняя Git-версия доступна как .

rust-analyzer нуждается в исходном коде стандартной библиотеки. Если его нет, rust-analyzer попытается установить его автоматически с помощью rustup. Чтобы установить исходный код вручную с помощью rustup, выполните следующую команду:

$ rustup component add rust-src

Racer

Racer предоставляет поддержку автодополнения кода для редакторов и IDE. Он был заменён на RLS (который использует Racer в качестве запасного варианта).

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

  • С помощью rustup:
  • Из AUR: или , в этом случае вы должны установить переменную окружения .

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

$ cargo +nightly install racer

Clippy

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

Clippy входит в состав пакета . Чтобы установить Clippy с помощью Rustup:

$ rustup component add clippy

Rustfmt

Rustfmt — инструмент для форматирования кода Rust в соответствии с официальным руководством по стилю.

Rustfmt входит в состав пакета . Чтобы установить с помощью Rustup:

$ rustup component add rustfmt

Atom

Atom поддерживает программирование на Rust с помощью модуля ide-rust (требуется rustup).

IntelliJ IDEA

В IntelliJ IDEA имеется Rust plugin. Этот плагин также работает с CLion. При настройке toolchain используйте rustup для загрузки исходников (), а затем выберите в качестве расположения toolchain. При установке Rust из официальных репозиториев Arch Linux выберите в качестве каталога toolchain и в качестве каталога, содержащего исходные коды стандартной библиотеки.

Visual Studio Code

В Visual Studio Code поддержка Rust может быть получена через официальное дополнение rust-lang.rls (требуется rustup). Если вы используете rust-analyzer, вместо этого расширения установите matklad.rust-analyzer.

Vim

В Vim поддержка Rust может быть получена через официальный плагин rust.vim, который предоставляет обнаружение файлов, подсветку синтаксиса, форматирование и поддержку плагина проверки синтаксиса Syntastic. Многие механизмы автодополнения имеют поддержку Rust, например coc (через плагин coc.rls) и YouCompleteMe.

Emacs

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

Kate

Поддержка Rust в Kate реализуется через Language Server Protocol. По умолчанию используется rust-analyzer; всё, что вам нужно, — это установить его вместе с исходниками Rust.

GNOME Builder

Поддержка Rust в GNOME Builder реализуется через Language Server Protocol. По умолчанию используется rust-analyzer; всё, что вам нужно, — это установить его вместе с исходниками Rust.

Смотрите также

gollark: https://hackmd.io/s/BkX4mrOBE#
gollark: Oh, do you already have a key?
gollark: Try running `/chatbox` or something?
gollark: I am attempting to look this up.
gollark: Um, there are docs *somewhere*...
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.