Rust — язык, который даёт контроль над памятью без сборщика мусора. Его используют в ядрах операционных систем, браузерных движках (Firefox), криптобиржах и облачных сервисах. Но писать на Rust с нуля сложно: borrow checker, unsafe, макросы — всё это требует опыта. Хорошие промты для нейросетей позволяют ускорить разработку в разы: достаточно описать задачу, и вы получите каркас, который останется адаптировать.
В этой подборке — 10 промтов, которые я проверил на практике в 2026 году. Они подходят для ChatGPT, Claude, Gemini и других LLM. Каждый промт снабжён примером использования и фрагментом кода. Копируйте, адаптируйте, используйте — и не забывайте проверять код.
Промт 1. Безопасный unsafe-код
Иногда приходится работать с raw-указателями или вызывать C-код. Важно, чтобы каждый unsafe-блок был обоснован и снабжён комментариями SAFETY. Этот промт заставляет модель проверять инварианты.
Write a Rust function that wraps a raw pointer dereference. Ensure miri-safe code, check null and alignment, and add SAFETY comments for each unsafe block.
Пример использования: при работе с FFI (например, вызове функций WinAPI). Промт сгенерирует обёртку вида:
/// # Safety
/// `ptr` must be non-null and aligned to `std::mem::align_of::<T>()`.
pub unsafe fn read_from_raw<T>(ptr: *const T) -> Option<T> {
if ptr.is_null() { return None; }
Some(ptr.read_unaligned()) // SAFETY: checked null, unaligned read is fine
}
Подробнее о правилах безопасности — в Rust Reference и Nomicon.
Промт 2. Рефакторинг без изменения семантики
Часто нужно улучшить код, не ломая публичный API. Промт просит применить clippy-линты и при этом показать diff.
Refactor the following Rust code. Keep public API unchanged, apply clippy suggestions, use `thiserror` for error handling. Show the diff.
Например, заменяем .unwrap() на ok_or_else() с собственным типом ошибки:
// Было
let val = data.get(key).unwrap();
// Стало
let val = data.get(key).ok_or_else(|| AppError::MissingKey(key.to_string()))?;
Такой рефакторинг уменьшает количество паник и делает код надёжнее. Clippy — стандартный линтер Rust, его рекомендации стоит учитывать.
Промт 3. Парсинг с nom
Nom — один из самых мощных парсер-комбинаторов в Rust. Но писать сложные парсеры с нуля — долго. Промт генерирует парсер под конкретную грамматику.
Create a nom parser for the following grammar: list of integers, separated by commas, allowing surrounding whitespace. Use `nom::sequence`, `nom::multi`, and `nom::character::complete`. Return errors as `nom::error::VerboseError`.
Результат:
use nom::{character::complete::{char, digit1, space0}, multi::separated_list0, sequence::delimited, IResult, error::VerboseError};
fn parse_i32(i: &str) -> IResult<&str, i32, VerboseError<&str>> {
let (rest, digit) = digit1(i)?;
Ok((rest, digit.parse().unwrap()))
}
fn parse_list(i: &str) -> IResult<&str, Vec<i32>, VerboseError<&str>> {
separated_list0(char(','), delimited(space0, parse_i32, space0))(i)
}
Совет: сложные грамматики разбивайте на маленькие функции и комбинируйте их — так проще поддерживать код.
Промт 4. CLI-утилита с clap
Clap де-факто стандарт для CLI в Rust. Промт создаёт сразу рабочий каркас с флагами и обработкой ошибок.
Generate a command-line tool using clap derive. It should read a file, process it line by line, and support flags --verbose and --output. Use anyhow for error handling.
В результате получите код с #[derive(Parser)], структурой аргументов и главной функцией. Вот фрагмент:
#[derive(Parser)]
struct Cli {
input: PathBuf,
#[arg(short, long)]
output: Option<PathBuf>,
#[arg(short, long)]
verbose: bool,
}
Это экономит часы ручной работы над разбором аргументов. Документация clap — на docs.rs.
Промт 5. Оптимизация производительности
Когда нужно выжать максимум из кода, важно быстро найти узкие места. Промт помогает с профилированием и аллокациями.
Profile this Rust function with cargo flamegraph. Replace Vec with SmallVec where appropriate, add #[inline] and #[cold] annotations, use criterion for benchmarks.
Пример: замена Vec<String> на SmallVec<[String; 8]> уменьшает число аллокаций в критическом цикле. Крейт smallvec — стандартное решение для таких задач.
Промт 6. Документация Rustdoc
Хорошая документация — признак зрелого проекта. Промт генерирует doc-комментарии с примерами и секциями Panic, Safety, Errors.
Write high-quality Rustdoc comments for the following module. Include examples in markdown code blocks, mark panic cases, and list safety requirements. Follow rustfmt.
Так вы получите готовые комментарии, которые сразу проходят cargo test (док-тесты). Помните: документация — часть кода, её нужно обновлять вместе с логикой.
Промт 7. WebAssembly: связывание с JS
WebAssembly из Rust — одна из самых востребованных технологий для высоконагруженных веб-приложений. Промт показывает, как скомпилировать функцию и вызвать её из JavaScript.
Show how to compile this Rust function to WebAssembly with wasm-bindgen. Write JS code to call it and handle errors. Include #[wasm_bindgen] attributes and export a struct with methods.
Пример Rust-кода:
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn fibonacci(n: u32) -> u64 {
match n {
0 => 0,
1 => 1,
_ => fibonacci(n - 1) + fibonacci(n - 2),
}
}
А в JS:
import { fibonacci } from './pkg/bundle.js';
console.log(fibonacci(10)); // 55
Официальная документация — на wasm-bindgen.
Промт 8. Безопасные FFI-обёртки
Интеграция с C-библиотеками требует аккуратной работы с указателями и строками. Промт генерирует обёртку, которая скрывает unsafe от пользователя.
Create a Rust wrapper for the C library libcurl. Use repr(C) structs, convert C strings to Rust with CStr, handle error codes. Use libc crate and unsafe extern "C" blocks.
Результат: безопасный API, где пользователь не видит ни одного unsafe. Обязательно используйте cargo miri для проверки UB в тестах.
Промт 9. Промт для property-based тестов
Обычные unit-тесты проверяют один сценарий, а property-based — все возможные. Промт пишет тест с proptest.
Write a proptest for this Rust function that reverses a vector. Generate random vectors with proptest, test properties like involution, length preservation, and element equality.
Пример:
proptest! {
#[test]
fn reverse_twice_is_identity(v: Vec<i32>) {
let v2 = v.clone().into_iter().rev().rev().collect::<Vec<_>>();
assert_eq!(v, v2);
}
}
Proptest находит краевые случаи, которые вы не предусмотрели. Это мощный инструмент для надёжности кода.
Промт 10. Типовые приёмы для borrow checker
Новички часто сражаются с заимствованием. Промт предлагает переработать структуры кода, чтобы обойти ограничения.
Explain how to restructure this Rust code to satisfy the borrow checker. Use enum instead of multiple structs, avoid double borrows, and leverage interior mutability where appropriate.
Пример: замена RefCell на Cell для типов Copy, или использование Rc<RefCell<>> для графов. Эти приёмы описаны в главе про ownership в The Rust Book.
Сводная таблица промтов
| Номер | Назначение | Ключевые крейты |
|---|---|---|
| 1 | Безопасный unsafe | miri |
| 2 | Рефакторинг | clippy, thiserror |
| 3 | Парсинг | nom |
| 4 | CLI | clap, anyhow |
| 5 | Оптимизация | smallvec, criterion |
| 6 | Документация | rustdoc |
| 7 | WebAssembly | wasm-bindgen |
| 8 | FFI-обёртки | libc |
| 9 | Property-based тесты | proptest |
| 10 | Borrow checker | — |
Это далеко не все сценарии, но эти 10 промтов покрывают большинство задач, с которыми я сталкиваюсь каждый день. Держите их под рукой — и Rust станет заметно продуктивнее.
Попробуйте прямо сейчас: возьмите промт 4 или 2 и примените к своему проекту. Быстрый результат мотивирует, а в блоге asibiont.com вы найдёте ещё больше материалов по Rust — от системного программирования до WebAssembly.
Комментарии