Введение
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.
Комментарии