Обновить
82
0
Даниил Тутубалин@DandyDan

Пользователь

Отправить сообщение

А рандомное число из памяти я получил в safe коде.
Теперь представьте, что это было не в одном файле:

  • hack в каком-то крейте

  • main у ничего не подозревающего программиста, использующего этот крейт

Если бы вы хоть раз заглянули в исходный код стандартной библиотеки, а не в рекламные проспекты, вы бы увидели, что сплошь и рядом там оборачивание в runtime проверки. Поэтому утверждение не ложное.

Если оптимизатору иногда удаётся их выбросить - отлично, ребята в LLVM хорошо поработали. Что никак не отменяет того факта, что моё высказывание истинно.

не допускающей в Safe Rust использования ещё не инициализированной памяти

Hold my beer

use std::mem::MaybeUninit;

// Unsafe Rust
fn hack<T>(x: MaybeUninit<T>) -> T {
    unsafe { x.assume_init() }
}

// Perfectly safe Rust
fn main() {
    let x:MaybeUninit<i32> = MaybeUninit::uninit();
    let y = hack(x);
    println!("{y}");
}

Я просто жду, когда вы возьмёте назад слова

И здесь вы начали нести не соответствующую действительности чушь

и извинитесь ;)

Спасибо, что нашли ещё одно подтверждение моих слов ;)

Мы собираемся внести в код два изменения, которые помогут оптимизатору понять

Оптимизатор, если ему подсказать, уберёт ненужные проверки, которые изначально там всё-таки были. А если не подсказать, то не уберёт. Простите, что с плохими новостями, но деда Мороза не существует.

Для опровержения любой гипотезы достаточно одного контр-примера.
И я его привел. Моя позиция подтверждена конкретным фактом.

Вы же продолжаете демагогию в худших традициях маркетинга и пропаганды.

Я так и думал, что вы верите в магию, и считаете, что unsafe можно превратить в safe без runtime проверок. И что вы никогда не заглядывали в godbolt, чтобы посмотреть, что там на самом деле получается.

Тут вопрос скорее в маркетинговой сфере.
Громкие заявления: "У нас крутая система владения и заимствования, которая позволяет управлять памятью без GC."
Реальность: "Утечки ищите и устраняйте сами."

Ах да. Там же какая-то магическая сила превращает unsafe в safe всемогущей властью компилятора.

Тем временем, RefCell:

pub fn borrow(&self) -> Ref<'_, T> {
    match self.try_borrow() {
        Ok(b) => b,
        Err(err) => panic_already_mutably_borrowed(err),
    }
}

Код try_borrow даже постить не буду ;)

Ещё где-то внизу маленькими буквами пишем: "утечки памяти не считаются UB, разбирайтесь с ними сами, но на сайте продукта всё равно поставьте шилдик Made with Rust"

создаешь Vec, а все связи между узлами выражаешь через обычные индексы этого вектора

То есть как бы говоришь: "Спасибо, Rust, но мы как-нибудь без тебя" ;)

  1. Пишем unsafe код.

  2. Оборачиваем его в runtime проверки.

  3. Пишем в первой главе руководства, что всё за нас делает компилятор без оверхеда.

  4. ???

  5. PROFIT!

Жёлтый ромб,
Белый круг
На растрескавшейся земле.

Перекрёстные ссылки и Rust - взаимоисключающие понятия.

Чтобы сделал любую структуру данных сложнее массива, вам придётся использовать смарт поинтеры. Которые, сюрприз-сюрприз, заимствованы у С++. И это единственное заимствование, которое имеет практический смысл.

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

А про всякие сырые указатели и смарт указали расскажем как-нибудь потом, потому что если вы узнаете про них прямо сейчас, у вас возникнет недоумение, зачем вообще городили этот огород, если всё равно потом всё приходится делать через обёртки вокруг сырых указателей и UnsafeCell.

Порой мне кажется, что Safe Rust не обладает даже полнотой по Тьюрингу.

Пробежать по двусвязному списку и в каждом узле прибавить единичку.
Элементарная задачка на любом языке, кроме Rust.

Сложно было с племянниками смотреть фильм и объяснять им, то 2015 год - это будущее.

Самое прикольное, когда в интернациональной команде работает более одного русского, и все они используют таинственную "синюю программу". У иностранцев шок и недоумение.

Прекрасно работает. После установки Far наконец-то смог нормально пользоваться этой шайтан-машиной.

Откуда вы узнали, что в  /home есть файл fias.xml, какой у него размер, и что у него внутри? Откуда вы узнали, что есть папка /home/egrul и что в ней лежит?

Наверное, вы всё-таки сперва делали cd, ls и cat.

Так вот, ls, cd и cat гораздо быстрее и удобнее делать в файловом менеджере, чем в голом шелле.

Информация

В рейтинге
6 348-й
Зарегистрирован
Активность