Hacker News Digest

Тег: #traits

Постов: 2

A clickable visual guide to the Rust type system (rustcurious.com)

### Скалярные типы
- `u8` 0…255  
- `i8` -128…127  
- `bool` true/false  
- `u16`, `i16`, `f32`, `u32`, `i32`, `u64`, `i64`, `f64`, `u128`, `i128`, `usize`, `isize`, `char`

### Составные
- `(T, U)` кортеж  
- `struct` именованные поля  
- `enum` варианты  
- `union` пересекающиеся данные  
- `[T; N]` массив фикс. длины  
- `()` юнит

### Безразмерные
- `[T]` слайс  
- `str` строковый слайс  
- `dyn Trait` трейт-объект  
- `&[T]`, `&mut [T]`, `&str`, `&mut str`, `&dyn Trait`, `&mut dyn Trait`

### Ссылки
- `&T` shared  
- `&mut T` mutable

### Диапазоны
- `a..b`, `..b`, `a..`, `a..=b`, `..=b`, `..`

### Утилиты
- `Option<T>`  
- `Result<T, E>`  
- `Ordering`  
- `Arguments` (format!)

### Асинхронность
- `Poll<T>`  
- `Context`  
- `Pin<T>`

### Анонимные
- `fn()` item  
- `|x| …` closure  
- `async fn` / `async ||`  
- `impl Trait`

### unsafe
- `UnsafeCell<T>`  
- `ManuallyDrop<T>`  
- `PhantomData<T>`

### Сырые указатели
- `*const T`, `*mut T`

### Указатели на функции
- `fn(T…) -> U`

### Паника
- `PanicInfo`, `Location`

### Недостижимый
- `!` never

by stmw • 05 сентября 2025 г. в 16:39 • 243 points

ОригиналHN

#rust#type-system#programming-languages#traits#asynchronous-programming#closures#unsafe#pointers#strings#json

Комментарии (39)

  • Пользователи сравнивают визуализацию «Elements of Rust» с периодической таблицей и другими подобными гайдами (например, cosmic.mearie.org), отмечая, что она выглядит красиво на десктопе, но неудобна на мобильных и требует горизонтального скролла.
  • Некоторые находят подборку полезной для быстрого погружения, особенно если уже знакомы со статически типизированными языками.
  • Критика: «таблица» кажется произвольной в группировке типов, не объясняет, почему важные концепты рядом, и из-за плотности информации может отпугнуть новичков.
  • Упоминаются аналоги из C/C++, а также ссылки на другие Rust-гайды, попадавшие на HN.
  • Для строковых представлений в стандартной библиотеке есть трейты Display и Debug; сериализация JSON доступна через сторонние крейты (например, serde).

The Core of Rust (jyn.dev)

Rust — это язык с жёсткой внутренней связностью.
Он не сложен из-за плохой документации, а потому что его концепты переплетены: замыкания, трейты, заимствование, Send/Sync, итераторы и прочие вещи нужны сразу. Поняв их, вы получаете мощный и последовательный инструмент.

Мини-пример.
20 строк кода на Rust, отслеживающие изменения файлов:

use notify::{Watcher, RecursiveMode};
fn main() -> Result<(), notify::Error> {
    let mut w = notify::recommended_watcher(|r| {
        if let Ok(e) = r {
            println!("{:?} {:?}", e.kind, e.paths);
        }
    })?;
    ["pages", "templates", "static"].iter()
        .try_for_each(|p| w.watch(p.into(), RecursiveMode::Recursive))?;
    loop { std::thread::park(); }
}

Даже здесь нужно знать: Result, замыкания, итераторы, трейты Display, 'static, Send.
На JavaScript то же заняло бы 5 строк и не потребовало бы ни трейтов, ни заимствований.

Вывод.
Внутри Rust прячется «меньший, чище» язык с ясным видением: безопасность без сборщика мусора, абстракции без потерь, композиция через трейты. Этот язык появляется, когда все части складываются в единую картину.

by zdw • 21 августа 2025 г. в 16:27 • 130 points

ОригиналHN

#rust#javascript#typescript#closures#traits#iterators#async-await#promises#modules#gleam

Комментарии (108)

  • JS-пример из поста содержит несколько багов (null-файл, for-in вместо for-of), которые TypeScript не всегда ловит.
  • Автору ставят в вину, что он «забыл» упомянуть async/await, Promise, модули и прочие скрытые концепции JS.
  • Комментаторы спорят, можно ли выкинуть из Rust «половину» фич и остаться при этом «малым и чистым»; большинство считает, что нет.
  • Многие советуют новичкам не начинать с Rust: компилятор будет целыми днями выдавать ошибки, прежде чем программа запустится.
  • Несколько человек упоминают Gleam, Zig и Austral как «упрощённые» альтернативы, но подчёркивают, что это уже другие языки.