Ответы пользователя по тегу Rust
  • Как правильно обработать rusqlite mappedrows?

    Tyranron
    @Tyranron
    Туториал устарел. Лучше всегда читать официальную доку. Она в Rust очень удобная и в сообществе принято её хорошо сдабривать примерами.

    Первая ошибка говорит о том, что Вы возвращаете Candle {...}, в то время как ожидается Result (это как раз устаревшая часть туториала). Просто сделайте Ok(Candle {...}) (пример с документации как раз подобное и показывает).

    Вторая ошибка говорит о том, что Вы пытаетесь возвращаемый тип rusqlite::row::MappedRows подставить туда, где явно ожидаете Vec. Rust статически и строго типизированный язык, так не получится. По сути, Вам там просто нужно добавить .collect() после ?. Так как MappedRowsреализует Iterator, то .collect() как раз пробежится по всем значениям итератора и соберёт их в Vec, который Вам и нужен.
    Ответ написан
  • Почему минимальный размер приложения такой большой?

    Tyranron
    @Tyranron
    Избитая тема, которая уже подымалась и изучалась не один раз. Достаточно сделать: https://www.google.com/search?q=rust+binary+size и сразу попадаем на статью Rustlog: Why is a Rust executable large?. Настоятельно рекомендую к прочтению, хоть она и слегка устарела (Rust больше не использует jemalloc по умолчанию), но вопрос там разобран крайне детально.

    Если коротко, то в Ваш бинарь попадают:
    1. Если собирали не в release mode, то debug-символы.
    2. Аллокатор, либо код-клей для системного аллокатора.
    3. Код для panic unwinding (в том числе и libbacktrace).
    4. Части libstd Rust'а, даже если Вы их не используете.

    Если стоит задача минимизировать бинарь Rust (под всякий embedded, к примеру), то обычно делают #![no_std], юзают мини-аллокаторы, делают panic = abort и идут на другие лишения.
    Ответ написан
    3 комментария
  • Математически доказанная безопасность Rust - это как?

    Tyranron
    @Tyranron
    Процитирую humbug из комментов к недавней статье:

    Конкретно в https://people.mpi-sws.org/~dreyer/papers/rustbelt... формально доказывается, что система типов Раста, владение, заимствование и прочее — корректны. Доказывается, что программа безопасна, если написана на безопасном подмножестве Раст. Доказывается, что программа безопасна, если в ней есть вкрапления unsafe, в которых программист не допустил ошибки, UB.

    Кроме того, проект RustBelt на текущем этапе занимается формальной верификацией библиотеки std, но полная проверка требует времени. Поэтому библиотеку проверяют по кускам. Да, были найдены и исправлены 2 ошибки в unsafe коде (что показывает, что ребята делом занимались), тем не менее все эти thread, mutex, Arc/Rc формально безопасны.


    Собственно, сами математические доказательства смотрите в научных публикациях:
    RustBelt: Securing the Foundations of the Rust Pro...
    KRust: A Formal Executable Semantics of Rust
    K-Rust: An Executable Formal Semantics for Rust

    Сайт проекта RustBelt: plv.mpi-sws.org/rustbelt
    Ответ написан
    Комментировать
  • Есть ли аналог curl для Rust?

    Tyranron
    @Tyranron
    Если пишете в web на Rust, то маст-хэв эту ссылку:
    www.arewewebyet.org
    Там расписано большинство аспектов касающихся web и текущее состояние экосистемы Rust по ним.

    Касательно Вашего вопроса, то это к HTTP Clients:
    www.arewewebyet.org/topics/clients
    Пишет "getting there, stable but still maturing", значит все достаточно неплохо.
    Ответ написан
    Комментировать