Приложения CLI

Почему Rust?

Щит с галочкой

Надёжный и быстрый

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

Гарантии Rust
Коробка с галочкой

Лёгкое распространение

Скомпилировано в один исполняемый файл — Вашим пользователям не нужна установленная среда выполнения или библиотеки.

Как доставить код Rust
Записка и шестерёнка

Надёжная конфигурация

Лёгкая обработка конфигурационных файлов на разных платформах. Rust за вас разберётся с пространствами имён и форматами.

Начнём настройку
Справочное руководство

Руководства? Готово.

Создавайте справочные страницы для вашего приложения автоматически. Просто упакуйте сгенерированные файлы, и всё готово.

Узнайте, как
Трубы

Входные данные, выходные данные

В дополнение к общению с людьми, Rust имеет отличные инструменты для общения с компьютерами.

Взаимодействие с компьютерами
3 полена, сложенные друг на друга

Гибкое логирование

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

Логгируй, трассируй, понимай

Поддерживаемая кодовая база

структура приложения командной строки

Перехват ошибок

Что, если конфигурационный файл отсутствует или повреждён? Что, если значение одной из переменных среды окружения не установлено? Об этих случаях легко забыть! Но благодаря подходу к обработке ошибок и дизайну библиотек, Rust укажет на такие ситуации ещё до того, как вы запустите свою программу.

Обработка ошибок в Rust
приложение командной строки это не ракетостроение

Легко расширяемый в будущем

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

Рефакторинг кода на Rust

Начнём!

Написание приложений командной строки - это отличный способ изучить Rust.

Определите ваши входные данные

/// Read some lines of a file
#[derive(Debug, StructOpt)]
struct Cli {
    /// Input file to read
    file: String,
    /// Number of lines to read
    #[structopt(short = "n")]
    num: usize,
}

Напишите Ваш инструмент

use quicli::prelude::*;
use structopt::StructOpt;

fn main() -> CliResult {
    let args = Cli::from_args();
    read_file(&args.file)?
        .lines()
        .take(args.num)
        .for_each(|line| println!("{}", line));
    Ok(())
}
Узнайте больше с CLI book

Промышленное использование

Логотип sentry
Одной из причин, по которой нам понравился Rust, была экосистема crates.io. [...] Здесь вы можете найти много действительно хороших готовых реализаций, для создания замечательных интерфейсов командной строки.

– Armin Ronacher, Rust в Sentry – PolyConf 2017


Я не жалею о том, что живу в этой кодовой базе. […] Это было своего рода дополнительным бонусом для меня: использование Rust для создания CLI или консольных инструментов. Он очень хорош при компиляции под разные целевые системы.

– Fletcher Nichol, Использование Rust на основном сервере – RustFest Kyiv

Логотип Habitat