Hacker News Digest

Тег: #pointers

Постов: 4

Automatically Translating C to Rust (cacm.acm.org)

Автоматические инструменты перевода кода с C на Rust полезны, но создают небезопасный и неидиоматичный код. Авторы Jaemin Hong и Sukyoung Ryu исследуют эти проблемы и предлагают решения с использованием статического анализа. Основные трудности включают различия в управлении памятью, типах данных и моделировании ресурсов между двумя языками.

Исследователи подчеркивают, что статический анализ может помочь идентифицировать небезопасные паттерны и предложить более идиоматичные альтернативы на Rust. Они отмечают, что хотя автоматический перевод экономит время, ручная доработка все еще необходима для обеспечения безопасности и производительности. Авторы также выделяют оставшиеся проблемы, такие как обработка указателей, многопоточности и низкоуровневых операций, которые требуют особого внимания при переводе.

by FromTheArchives • 24 октября 2025 г. в 15:12 • 93 points

ОригиналHN

#c#rust#static-analysis#memory-management#pointers#multithreading

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

  • Обсуждение вращается вокруг проблемы автоматического перевода C в Rust и обратно, включая проблемы с безопасностью, размером массивов и управлением памятью.
  • Участники отмечают, что автоматический перевод может привести к небезопасному коду, особенно если не удается точно определить размеры массивов.
  • Также обсуждается, что если Rust потеряет популярность, то может появиться необходимость в обратном переводе, что вызывает сомнения в целесообразности таких усилий.
  • Некоторые участники подчеркивают, что вместо полного переписывания, возможно, лучше сосредоточиться на создании инструментов, которые могли бы помочь в безопасной работе с памятью в C.
  • В конце концов, обсуждение подводит к мысли, что вместо попыток автоматического перевода, лучше было бы сосредоточиться на создании инструментов, которые могли бы помочь в безопасной работе с памятью в C.

Safe zero-copy operations in C# (ssg.dev)

В C# операции с массивами автоматически проверяют границы для безопасности, что может снижать производительность. Компилятор способен убрать проверки в идеальных условиях, например, в цикле с известными границами, но при передаче индексов извне проверки остаются, что видно по ассемблерному коду.

Можно использовать небезопасный код с указателями для полного избежания проверок, но это рискованно: ошибки ведут к сбоям или уязвимостям. Решение — тип Span<T>, который объединяет ссылку на данные и их длину, обеспечивая безопасный нулевой копирование доступ без дополнительных проверок. Это позволяет писать высокопроизводительный код без ущерба для безопасности, сочетая низкоуровневую эффективность с управляемыми гарантиями.

by sedatk • 29 сентября 2025 г. в 23:12 • 197 points

ОригиналHN

#csharp#span#readonlyspan#memory-management#performance-optimization#unsafe-code#pointers#dotnet

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

  • Использование Span<T> и ReadOnlySpan<T> позволяет избежать лишних выделений памяти и повысить производительность, особенно при работе со строками и массивами.
  • Эти структуры предоставляют безопасные, безграничные представления памяти, заменяя необходимость в небезопасном коде и указателях.
  • Оптимизации с помощью Span<T наиболее эффективны в сценариях с интенсивной обработкой данных (например, парсинг, игры), а не в типичных CMS, где узкие места обычно в БД или кэше.
  • Внедрение Span<T в .NET стандартизировало ранее фрагментированные подходы к работе с памятью, улучшив interoperability между библиотеками.
  • Хотя Span<T предлагает контроль, сравнимый с Rust, он ограничен моделью сборки мусора C#, тогда как Rust предоставляет более строгие гарантии времени жизни на уровне компилятора.

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

Скалярные типы

  • u8u128, i8i128 — целые фикс. размера
  • usize/isize — целые под указатель
  • f32/f64 — вещественные
  • bool, char — логика и UTF-4

Составные

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

Безразмерные

  • [T], str, dyn Trait — сами не компилятся, живут за ссылкой
  • &[T], &mut [T], &str, &mut str, &dyn Trait, &mut dyn Trait — срезы и трейт-объекты

Ссылки

  • &T, &mut T — заимствование

Диапазоны

  • a..b, ..b, a.., a..=b, ..=b, .. — полу- и замкнутые

Утилиты

  • Option<T>, Result<T, E>, Ordering, Arguments — стандартные обёртки

Асинхронность

  • Poll<T>, Context, Pin<P> — фундамент async

Анонимки

  • fn(), |x|, async fn, async ||, impl Trait — функции, замыкания, existential

unsafe

  • UnsafeCell<T>, ManuallyDrop<T>, PhantomData<T> — сырые/мета-инструменты

Указатели

  • *const T, *mut T, fn(T)->U — сырые и функц. указатели

Прочее

  • PanicInfo, Location, ! — паника и «никогда»

by ashvardanian • 08 сентября 2025 г. в 12:21 • 214 points

ОригиналHN

#rust#type-system#data-types#references#pointers#async#unsafe#lifetimes

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

  • Пользователи хвалят cheats.rs за визуальные схемы lifetimes и memory-layout, удобную мобильную прокрутку и напоминание диапазонов целых.
  • Отмечают, что таблица «как таблица Менделеева» — компактна и полезна.
  • Вопрос: почему PhantomData в группе unsafe — ответ: она нужна dropck для указателей-владельцев.
  • Побочное обсуждение: «а не сделать ли signed-целые симметричными с NaN» — быстро отвергли как лишённое смысла.

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).