UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

194 lines (129 loc) 16.8 kB
**Состояние перевода:** На этой странице представлен перевод статьи [Rust](/index.php/Rust "Rust"). Дата последней синхронизации: 4 декабря 2016\. Вы можете [помочь](/index.php/ArchWiki_Translation_Team_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ArchWiki Translation Team (Русский)") синхронизировать перевод, если в английской версии произошли [изменения](https://wiki.archlinux.org/index.php?title=Rust&diff=0&oldid=458391). [Википедия](https://en.wikipedia.org/wiki/Rust_(programming_language) "wikipedia:Rust (programming language)"): *[Rust](https://www.rust-lang.org/) — мультипарадигмальный компилируемый язык программирования общего назначения, спонсируемый Mozilla Research, поддерживающий функциональное программирование, модель акторов и процедурное программирование.* *Внимание языка сосредоточено на трёх задачах: безопасность, скорость и параллелизм. Он сопоставим по скорости и возможностям с C++, однако, даёт большую безопасность при работе с памятью, что обеспечивается механизмами ограничения.* ## Contents * [1 Rust Core Library](#Rust_Core_Library) * [2 Стандартная библиотека Rust](#.D0.A1.D1.82.D0.B0.D0.BD.D0.B4.D0.B0.D1.80.D1.82.D0.BD.D0.B0.D1.8F_.D0.B1.D0.B8.D0.B1.D0.BB.D0.B8.D0.BE.D1.82.D0.B5.D0.BA.D0.B0_Rust) * [3 Цикл выпуска](#.D0.A6.D0.B8.D0.BA.D0.BB_.D0.B2.D1.8B.D0.BF.D1.83.D1.81.D0.BA.D0.B0) * [4 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0) * [4.1 Из репозитория](#.D0.98.D0.B7_.D1.80.D0.B5.D0.BF.D0.BE.D0.B7.D0.B8.D1.82.D0.BE.D1.80.D0.B8.D1.8F) * [4.2 С помощью Rustup](#.D0.A1_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_Rustup) * [4.3 Проверка после установки](#.D0.9F.D1.80.D0.BE.D0.B2.D0.B5.D1.80.D0.BA.D0.B0_.D0.BF.D0.BE.D1.81.D0.BB.D0.B5_.D1.83.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B8) * [5 Кросс-компиляция](#.D0.9A.D1.80.D0.BE.D1.81.D1.81-.D0.BA.D0.BE.D0.BC.D0.BF.D0.B8.D0.BB.D1.8F.D1.86.D0.B8.D1.8F) * [5.1 С помощью rustup](#.D0.A1_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_rustup_2) * [5.2 Windows](#Windows) * [5.3 Неофициальные пакеты](#.D0.9D.D0.B5.D0.BE.D1.84.D0.B8.D1.86.D0.B8.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D1.8B) * [6 Cargo](#Cargo) * [6.1 Использование](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5) * [7 Поддержка в IDE](#.D0.9F.D0.BE.D0.B4.D0.B4.D0.B5.D1.80.D0.B6.D0.BA.D0.B0_.D0.B2_IDE) * [8 Смотрите также](#.D0.A1.D0.BC.D0.BE.D1.82.D1.80.D0.B8.D1.82.D0.B5_.D1.82.D0.B0.D0.BA.D0.B6.D0.B5) ### Rust Core Library [Rust Core Library](https://doc.rust-lang.org/core/) — свободная от зависимостей основа стандартной библиотеки 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](https://doc.rust-lang.org/std/index.html) предоставляет удобные абстракции высокого уровня, с помощью которых создаётся большинство переносимых программ на Rust. Например, она содержит типы `Vec`, `Iterator`, `Option`, `Result` и `String`; огромное число методов для примитивов языка; много стандартных макросов; поддержка ввода-вывода и многопоточности; использование кучи (heap) с помощью `Box`; и многие другие высокоуровневые возможности, не доступные в libcore. ### Цикл выпуска Rust следует шестинедельному циклу выпуска, похожему на цикл выпуска Firefox. С каждым новым выпуском ядро и стандартные библиотеки улучшаются для поддержки большего числа платформ, повышения производительности и стабилизации новых возможностей для использования со стабильной версией Rust. ## Установка ### Из репозитория Для установки последней стабильной версии Rust из официальных репозиториев Arch Linux, [установите](/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C "Установить") пакет [rust](https://www.archlinux.org/packages/?name=rust). Он установит компилятор rustc. Также вы можете поставить [cargo](https://www.archlinux.org/packages/?name=cargo). ### С помощью Rustup Официальный и рекомендумемый способ установки Rust для разработки ПО — с помощью инструмента [Rustup](https://www.rustup.rs/), написанного на Rust. Преимуществом использования Rustup вместо обычной устаноки Rust из репозитория является возможность установки нескольких toolchains (stable, beta, nightly) для нескольких целевых платформ (windows, mac, android) и архитектур (x86, x86_64, arm). Также стоит отметить, что некоторые инструменты вроде [Clippy](https://github.com/Manishearth/rust-clippy) требуют поддержки компилируемых плагинов, что доступно только в nightly сборках Rust. Есть два способа установки rustup: официально поддерживаемый разработчиками Rust и поддерживаемый Arch Linux. 1. Скачайте скрипт установки с помощью `curl -f https://sh.rustup.rs > rust.sh`, просмотрите его: `vim ./rust.sh` и запустите: `./rust.sh` для установки. Для обновления rustup в будущем запускайте `rustup self update`. 2. Также пакет [rustup](https://www.archlinux.org/packages/?name=rustup) доступен в официальных репозиториях Arch Linux. Обратите внимание, что при установке с помощью этого пакета обновление с помощью `rustup self update` работать **не** будет, и для обновления rustup следует обновлять этот пакет с помощью pacman. Теперь нужно установить сам Rust. По умолчанию будет установлена стабильная версия для вашей архитектуры. **Note:** Добавьте $HOME/.cargo/bin в переменную окружения PATH перед выполнением команды rustup. ``` $ rustup default stable ``` Проверим версию Rust с помощью `rustc -V` : `$ rustc -V ` ``` rustc 1.13.0 (2c6933acc 2016-11-07) ``` Если вы хотите использовать nightly, выполните: ``` $ rustup install nightly $ rustup default nightly ``` `$ rustc -V ` ``` rustc 1.15.0-nightly (c80c31a50 2016-12-02) ``` ### Проверка после установки Давайте убедимся, что Rust установился корректно, написав простую программу: `~/hello.rs` ``` fn main() { println!("Hello, World!"); } ``` Затем скомпилируйте её с помощью `rustc`, введя это: `$ rustc hello.rs && ./hello` ``` Hello, World! ``` ## Кросс-компиляция ### С помощью rustup Использовать кросс-компиляцию с rustup очень легко. Он поддерживает очень много целевых платформ. Полный их список можно увидеть с помощью команды `rustup target list`. Например, если вы хотите использовать stable Rust для Windows с компилятором GNU, сделайте следующее: ``` $ rustup install stable-x86_64-pc-windows-gnu ``` Эта команда установит только rust и инструменты для вашей целевой платформы, и для кросс-компиляции нужно сделать ещё несколько вещей. ### Windows В этом разделе `$ARCH` будет целевой архитектурой (`x86_64` или `i686`). 1. [Установите](/index.php/Pacman_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_.D0.BE.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.BD.D1.8B.D1.85_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.BE.D0.B2 "Pacman (Русский)") [mingw-w64-gcc](https://aur.archlinux.org/packages/mingw-w64-gcc/) и [wine](https://www.archlinux.org/packages/?name=wine) 2. Добавьте определение binfmt для исполняемых файлов Windows вручную или из [binfmt-wine](https://aur.archlinux.org/packages/binfmt-wine/). 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-bin](https://aur.archlinux.org/packages/rust-nightly-bin/) или `/usr/lib/rustlib` если вы используете пакет [rust](https://www.archlinux.org/packages/?name=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` (создайте файл, если он отсутствует): `~/.cargo/config` ``` [target.$ARCH-pc-windows-gnu] linker = "/usr/bin/$ARCH-w64-mingw32-gcc" ar = "/usr/$ARCH-w64-mingw32/bin/ar" ``` Теперь вы можете выполнять кросс-компиляцию для Windows, указывая дополнительный аргумент `--target $ARCH-pc-windows-gnu` при вызове cargo: ``` $ # Сборка $ cargo build --release --target "$ARCH-pc-windows-gnu" $ # Запуск unit-тестов через wine $ cargo test --target "$ARCH-pc-windows-gnu" ``` ### Неофициальные пакеты [Неофициальный репозиторий archlinuxcn](/index.php/Unofficial_user_repositories#archlinuxcn "Unofficial user repositories") содержит rust-nightly и стандартную библиотеку Rust для i686, ARM, ARMv7, Windows 32 и 64, и вы можете просто установить то, что вам нужно, и использовать кросс-компиляцию. Тем не менее вам нужно найти ARM toolchain самостоятельно. Для Windows 32bit вам нужно получить libgcc_s_dw2-1.dll для сборки и запуска. ## Cargo [Cargo](https://crates.io/), систему сборки и менеджер пакетов для Rust, можно установить с помощью пакета [cargo](https://www.archlinux.org/packages/?name=cargo). Nightly доступен в AUR: [cargo-nightly-bin](https://aur.archlinux.org/packages/cargo-nightly-bin/). Если у вас [rustup](https://www.archlinux.org/packages/?name=rustup), то он уже содержит в себе cargo. Cargo помогает работать с зависимостями вашего проекта, скачивая их из своего [хранилища](https://crates.io/) или стороннего [Git](/index.php/Git "Git") репозитория. Также он позволяет убедиться, что вы всегда будете получать повторяемые сборки. Рекомендуем прочитать [официальное руководство](http://doc.crates.io/guide.html). ### Использование Для создания нового проекта с помощью Cargo: `$ cargo new hello_world --bin` Эта команда создаст директорию с файлом `Cargo.toml` по умолчанию и настроит сборку в исполняемый файл (потому что мы добавили `--bin`; иначе будет собираться библиотека). **Note:** Cargo использует файл [манифеста](http://doc.crates.io/manifest.html) `Cargo.toml`, который содержит метаданные, необходимые Cargo для сборки вашего проекта. `Cargo.toml` ``` [package] name = "hello_world" version = "0.1.0" authors = ["Ваше Имя <you@example.com>"] ``` ## Поддержка в IDE ## Смотрите также * [Официальный сайт языка программирования Rust (англ.)](https://www.rust-lang.org/) * [Документация Rust (англ.)](https://www.rust-lang.org/documentation.html) * [Официальная Книга (англ.)](https://doc.rust-lang.org/stable/book/) * [Перевод Книги на русский язык](https://rurust.github.io/rust_book_ru/) * [Обзор API стандартной библиотеки (англ.)](https://doc.rust-lang.org/std/) * [Rust на примерах (англ.)](http://rustbyexample.com/) * [Rust на примерах, частичный перевод на русский язык](https://rurust.github.io/rust-by-example-ru/) * [Подборка материалов по изучению Rust](https://github.com/ctjhoa/rust-learning) * [Библиотеки (крейты, crates), доступные через Cargo](https://crates.io/) * [This Week in Rust (англ.)](https://this-week-in-rust.org/) * [Блог языка программирования Rust (англ.)](https://blog.rust-lang.org/) * [Форум пользователей Rust (англ.)](https://users.rust-lang.org/) * [The Rust Internals Forum](https://internals.rust-lang.org/) * [Awesome Rust: A curated list of Rust libraries and resources](https://rust.libhunt.com/) * [Статья в Википедии](https://ru.wikipedia.org/wiki/Rust_(язык_программирования)) * [Русскоязычный сайт о Rust](https://rustycrate.ru/) * [Русскоязычный форум](https://forum.rustycrate.ru/)