10 промтов для Rust: системное программирование, CLI и WebAssembly — шпаргалка для разработчика

Введение

Rust продолжает набирать популярность в 2026 году: по данным опроса Stack Overflow, он уже шестой год подряд признаётся самым любимым языком среди разработчиков, с долей более 80% положительных отзывов. Но писать на Rust «с нуля» сложно: система владения, времени жизни и строгий компилятор требуют особого подхода. Именно здесь на помощь приходят промпты — готовые шаблоны запросов к AI-моделям (например, GPT-4 или Claude), которые ускоряют написание кода, снижают количество ошибок и экономят часы на отладку.

В этой статье я собрал 10 конкретных промптов для трёх ключевых сценариев: системное программирование (безопасная работа с памятью, парсинг данных), создание CLI-утилит и разработка на WebAssembly. Каждый промпт — это готовый к копированию текст, который можно сразу вставить в диалог с AI-ассистентом. Я добавил пояснения, для каких задач он подходит, и примеры использования.

1. Промт для безопасной работы с сырыми указателями

Задача: Написать код на Rust для работы с сырыми указателями (raw pointers) без undefined behavior. Особенно актуально при написании FFI-обвязок и низкоуровневых драйверов.

Промт:

Напиши на Rust функцию, которая принимает сырой указатель на массив u8, его длину и возвращает безопасный срез. Используй std::ptr::slice_from_raw_parts и unsafe блок с комментарием, почему код безопасен. Добавь обработку случая, когда указатель нулевой.

Пример использования:

fn raw_to_slice<'a>(ptr: *const u8, len: usize) -> Option<&'a [u8]> {
    if ptr.is_null() {
        return None;
    }
    // Безопасность: указатель проверен на null, длина валидна
    unsafe { Some(&*std::ptr::slice_from_raw_parts(ptr, len)) }
}

Этот код можно использовать в FFI-обвязках для C-библиотек.

2. Промт для реализации парсера конфигурации

Задача: Создать простой парсер INI-файла на Rust с использованием nom или pest. Парсер должен корректно обрабатывать комментарии и секции.

Промт:

Напиши на Rust парсер INI-файла с помощью библиотеки nom версии 7. Парсер должен извлекать секции (заголовки в квадратных скобках) и пары ключ=значение. Игнорируй строки, начинающиеся с ';'. Верни структуру HashMap<String, HashMap<String, String>>.

Пример использования:

use nom::{
    bytes::complete::{tag, take_until},
    sequence::{preceded, terminated},
    IResult,
};
// ... полная реализация парсера

Такой парсер пригодится для утилит, читающих конфиги (например, для игровых серверов или систем мониторинга).

3. Промт для написания CLI-утилиты с clap

Задача: Создать CLI-инструмент для подсчёта строк в файлах, с поддержкой рекурсивного обхода и флага --verbose.

Промт:

Напиши на Rust программу с использованием крейта clap (версия 4) для подсчёта строк в текстовых файлах. Реализуй аргументы: путь к файлу или директории, флаг -r для рекурсивного обхода, флаг -v для подробного вывода. Используй walkdir для обхода директорий.

Пример использования:

use clap::Parser;
use walkdir::WalkDir;

#[derive(Parser)]
struct Cli {
    path: String,
    #[arg(short = 'r')]
    recursive: bool,
    #[arg(short = 'v')]
    verbose: bool,
}

fn main() {
    let args = Cli::parse();
    // ... обработка
}

Этот промпт сэкономит вам час на написание boilerplate-кода для аргументов командной строки.

4. Промт для обработки ошибок с anyhow и thiserror

Задача: Написать модуль, который использует anyhow для контекстных ошибок и thiserror для пользовательских типов ошибок.

Промт:

Напиши на Rust пример, где определён пользовательский тип ошибки ParseError (с помощью thiserror), а функции возвращают Result<T, anyhow::Error>. Покажи, как добавить контекст с помощью .context() при вызове.

Пример использования:

use anyhow::{Context, Result};

#[derive(thiserror::Error, Debug)]
pub enum ParseError {
    #[error("invalid header")]
    InvalidHeader,
}

fn parse_config(path: &str) -> Result<String> {
    let content = std::fs::read_to_string(path)
        .with_context(|| format!("failed to read {}", path))?;
    Ok(content)
}

Это стандартная практика в Rust-проектах, которая делает код надёжнее.

5. Промт для работы с WebAssembly (wasm-pack)

Задача: Создать простую WASM-библиотеку, экспортирующую функцию для суммирования чисел из JavaScript.

Промт:

Напиши на Rust код для wasm-pack, который экспортирует функцию sum(a: i32, b: i32) -> i32. Добавь комментарии по настройке Cargo.toml с зависимостью wasm-bindgen и инструкцию по сборке wasm-pack build --target web.

Пример использования:

use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn sum(a: i32, b: i32) -> i32 {
    a + b
}

После сборки эту функцию можно вызвать из JavaScript: wasm.sum(2, 3).

6. Промт для сериализации/десериализации с serde

Задача: Реализовать структуру с автоматической сериализацией в JSON и TOML с помощью крейта serde.

Промт:

Напиши на Rust структуру Config, которая содержит поля: host (String), port (u16), debug (bool). Добавь derive-макросы Serialize и Deserialize из serde. Покажи пример чтения из JSON-файла и записи в TOML.

Пример использования:

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug)]
struct Config {
    host: String,
    port: u16,
    debug: bool,
}

fn main() {
    let config = Config { host: "localhost".into(), port: 8080, debug: false };
    let json = serde_json::to_string(&config).unwrap();
    println!("{}", json);
}

Это база для любого Rust-приложения, работающего с конфигурациями.

7. Промт для асинхронного парсинга веб-страниц

Задача: Написать асинхронный HTTP-клиент на reqwest для парсинга HTML с помощью scraper.

Промт:

Напиши на Rust асинхронную функцию, которая принимает URL, загружает HTML с помощью reqwest, и извлекает все ссылки (теги <a href="...">) с помощью крейта scraper. Используй tokio в качестве рантайма.

Пример использования:

use reqwest;
use scraper::{Html, Selector};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let html = reqwest::get("https://example.com").await?.text().await?;
    let document = Html::parse_document(&html);
    let selector = Selector::parse("a").unwrap();
    for element in document.select(&selector) {
        if let Some(href) = element.value().attr("href") {
            println!("{}", href);
        }
    }
    Ok(())
}

Этот код — основа для веб-скрепинга и мониторинга сайтов.

8. Промт для оптимизации производительности с профилированием

Задача: Использовать criterion для бенчмаркинга и профилирования функции.

Промт:

Напиши на Rust бенчмарк с помощью библиотеки criterion для функции, которая сортирует вектор целых чисел. Покажи, как настроить Cargo.toml и запустить тесты с cargo bench.

Пример использования:

use criterion::{black_box, criterion_group, criterion_main, Criterion};

fn sort_vec(mut data: Vec<i32>) -> Vec<i32> {
    data.sort();
    data
}

fn bench_sort(c: &mut Criterion) {
    let data = vec![5, 3, 1, 4, 2];
c.bench_function("sort",

|b| b.iter(|| sort_vec(black_box(data.clone()))));
}

criterion_group!(benches, bench_sort);
criterion_main!(benches);

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

9. Промт для работы с unsafe и FFI

Задача: Создать безопасную обёртку над C-функцией из libc.

Промт:

Напиши на Rust безопасную обёртку для функции getpid() из libc. Используй extern "C" и unsafe блок, но верни безопасный тип u32. Добавь документацию с примерами.

Пример использования:

extern "C" {
    fn getpid() -> i32;
}

pub fn get_process_id() -> u32 {
    unsafe { getpid() as u32 }
}

Этот паттерн используется в системных утилитах для взаимодействия с ОС.

10. Промт для написания макросов

Задача: Создать декларативный макрос для логирования с уровнем важности.

Промт:

Напиши на Rust декларативный макрос log!, который принимает уровень (INFO, WARN, ERROR) и сообщение. Добавь вывод с префиксом, например, [INFO] message. Используй macro_rules!.

Пример использования:

macro_rules! log {
    ($level:ident, $msg:expr) => {
        println!("[{}] {}", stringify!($level), $msg);
    };
}

fn main() {
    log!(INFO, "System started");
    log!(ERROR, "Failed to connect");
}

Макросы сокращают дублирование кода и улучшают читаемость.

Заключение

Эти 10 промптов покрывают основные сценарии разработки на Rust: от низкоуровневой работы с памятью до веб-сборки. Используйте их как отправную точку: адаптируйте под свои проекты, комбинируйте с другими крейтами и не забывайте проверять код с помощью cargo clippy и cargo test. Rust — язык, где промпты особенно полезны из-за строгости компилятора: AI может сгенерировать корректную структуру, но проверка безопасности остаётся за вами.

Если вы хотите глубже изучить системное программирование на Rust, обратите внимание на официальную документацию (doc.rust-lang.org) и книгу «The Rust Programming Language». А для практической работы с CLI и WASM рекомендую репозитории clap-rs/clap и rustwasm/wasm-pack на GitHub.

← Все статьи

Комментарии

Читайте также

Kubernetes + AI-агент: Как ASI Biont автоматизирует DevOps и снижает ручную работу SRE на 60%

14 июля 2026

10 промтов для CI/CD: GitHub Actions, GitLab CI и ArgoCD — от базовых до экспертных

14 июля 2026

Как AI-агент ASI Biont автоматизирует логистику и контроль оборудования через интеграцию с Asset Tracking

14 июля 2026

Как ASI Biont и Railway автоматизируют деплой: опыт ускорения релизов в 3 раза и снижения ошибок на 90%

14 июля 2026

Освойте сложные стандарты с курсом МСФО — Международные стандарты финансовой отчетности (продвинутый уровень) на Asibiont.com

14 июля 2026

Освоение ПОД/ФТ: Практическое руководство по курсу для сотрудников по комплаенсу на Asibiont.com

14 июля 2026

Освойте веб-разработку на Python с Django и FastAPI — практический курс на Asibiont.com

14 июля 2026

ERP и SAP — корпоративные системы управления ресурсами: как обучение на AI-платформе Asibiont открывает двери в мир крупного бизнеса

14 июля 2026

Экономика рекурсивного самоулучшения: Почему Vibe Coding меняет правила игры

14 июля 2026