Почему Rust — это не просто модный язык, а инструмент для будущего?
Если вы следите за миром программирования, то наверняка заметили, как Rust уверенно ворвался в топ самых любимых языков разработчиков. По опросам Stack Overflow, он уже несколько лет подряд занимает первое место по «желанию продолжать использовать». И это не случайно. Rust предлагает невероятную производительность C/C++ с гарантиями безопасности памяти, которых так не хватает старым языкам.
Но язык — это лишь половина дела. Настоящая сила Rust раскрывается через его экосистему, а точнее — через открытый исходный код на Rust. GitHub буквально кишит потрясающими проектами, которые меняют представление о системном программировании. Сегодня мы разберём лучшие репозитории, которые стоит изучить каждому разработчику, независимо от того, новичок вы или опытный инженер.
Критерии отбора: как мы выбирали лучшие проекты
Прежде чем нырнуть в список, давайте определимся с критериями. В мире существует тысячи репозиториев на Rust, но мы отобрали те, которые:
- Активно поддерживаются — коммиты не старше месяца
- Имеют высокий рейтинг и звёзды — сообщество их ценит
- Полезны для реальной разработки — вы сможете использовать их прямо сейчас
- Обучают хорошим практикам — код в этих проектах — образец для подражания
Итак, поехали!
1. Serde — король сериализации
Репозиторий: serde-rs/serde
Если вы пишете на Rust, вы почти наверняка используете Serde. Это фреймворк для сериализации и десериализации данных, который работает с JSON, YAML, TOML, BSON и десятками других форматов. Его главная фишка — нулевая стоимость абстракций: вы получаете максимальную производительность без накладных расходов.
Вот как выглядит типичное использование Serde:
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
struct User {
name: String,
age: u8,
email: String,
}
fn main() {
let user = User {
name: "Алексей".to_string(),
age: 30,
email: "alex@example.com".to_string(),
};
// Сериализация в JSON
let json = serde_json::to_string(&user).unwrap();
println!("{}", json); // {"name":"Алексей","age":30,"email":"alex@example.com"}
// Десериализация из JSON
let deserialized: User = serde_json::from_str(&json).unwrap();
println!("{:?}", deserialized);
}
Этот проект — идеальный пример того, как открытый исходный код на Rust может быть одновременно мощным и простым в использовании. Serde используется в таких гигантах, как Amazon, Cloudflare и Dropbox.
2. Tokio — асинхронное сердце Rust
Репозиторий: tokio-rs/tokio
Tokio — это runtime для асинхронного программирования. Если вы пишете сетевое приложение, веб-сервер или любой I/O-интенсивный код, вы будете работать с Tokio. Он предоставляет event loop, таймеры, синхронизацию и работу с сокетами.
Простой пример асинхронного TCP-эхо-сервера:
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::net::TcpListener;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
println!("Сервер запущен на localhost:8080");
loop {
let (mut socket, addr) = listener.accept().await?;
println!("Новое подключение: {}", addr);
tokio::spawn(async move {
let mut buf = vec![0; 1024];
loop {
let n = socket.read(&mut buf).await.unwrap();
if n == 0 { break; } // Соединение закрыто
socket.write_all(&buf[..n]).await.unwrap();
}
});
}
}
Tokio — это не просто библиотека, это целая экосистема. Вокруг неё построены гипер (HTTP), Tonic (gRPC) и множество других инструментов. Изучение Tokio — обязательный шаг для любого Rust-разработчика, который хочет писать современные сетевые приложения.
3. Tauri — десктопные приложения нового поколения
Репозиторий: tauri-apps/tauri
Забудьте про Electron. Tauri позволяет создавать десктопные приложения с веб-интерфейсом, но использует Rust для бэкенда. Результат: приложения в 100 раз меньше по размеру и потребляют в разы меньше памяти.
Вот как выглядит минимальный Tauri-проект (файл src-tauri/src/main.rs):
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
#[tauri::command]
fn greet(name: &str) -> String {
format!("Привет, {}! Ты используешь Tauri на Rust!", name)
}
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("Ошибка запуска приложения");
}
Фронтенд может быть на React, Vue, Svelte или даже на чистом HTML+JS. Tauri — это отличный пример того, как Rust-репозитории на GitHub меняют правила игры в десктопной разработке.
4. SQLx — работа с базами данных без магии
Репозиторий: launchbadge/sqlx
SQLx — это асинхронный SQL-драйвер с проверкой запросов на этапе компиляции. Вы пишете SQL-запросы прямо в коде, а компилятор проверяет их синтаксис и типы. Это не ORM, это работа с SQL напрямую, но с дополнительной безопасностью.
Пример использования с PostgreSQL:
use sqlx::postgres::PgPoolOptions;
#[tokio::main]
async fn main() -> Result<(), sqlx::Error> {
let pool = PgPoolOptions::new()
.max_connections(5)
.connect("postgres://user:pass@localhost/mydb")
.await?;
// Проверка запроса на этапе компиляции
let row: (i32,) = sqlx::query_as("SELECT $1")
.bind(150_i32)
.fetch_one(&pool)
.await?;
println!("Результат: {}", row.0);
Ok(())
}
SQLx поддерживает PostgreSQL, MySQL, SQLite и MSSQL. Это один из самых зрелых проектов в экосистеме Rust для работы с базами данных.