Pull to refresh
89
0
Александр Мещеряков@freecoder_xx

Rust разработчик

Send message

Нет, он говорит нам, что нужно больше инженеров. Особенно био.

Так и есть, в начале тяжело. Но через полгода-год практики уже перестаешь замечать, что пишешь на языке с BC, а не с GC.

Сейчас просто все смешалось: тяжелое наследие прошлого, текущий мейнстрим и ростки будущего. Насколько эти ростки жизнеспособны — покажет история, но кто-то уже сегодня их принял и к ним примкнул.

С криптовалютами можно и без чиновников.

Много чего покажет. Особенно если есть возможность прикинуть, какой процент покупателей вообще заморачивается с переустановкой (теряя при этом софт от производителя и некоторые гарантии).

Я, когда покупал себе ноутбук, не смог найти подходящую мне модель без предустановленной винды. Но это частный пример, как и ваше субъективное мнение, что DOS стали ставить чаще. Потому я и спрашиваю, владеет ли кто-нибудь статистикой?

А есть статистика, сколько продается ноутбуков и PC c предустановленными Linux-дистрибутивами? А сколько с Windows?

Мне недавно позвонили мошенники и назвали мое ФИО, дату рождения и текущий счет на карте в Альфа-Банке. При этом я мобильным приложением не пользуюсь.

Ну а флибустьером в ту интересную эпоху был любой владелец двухкассетного магнитофона.

Так и не понял, почему он был флибустьером, а не обычным пиратом..

Зато теперь понятно, чем можно заняться в тюрьме.

Не, ну можно, конечно, тихонечко отсидеться в уголочке. Только когда придут за тобой, а рано или поздно это вполне может случиться, за тебя заступаться будет уже некому.

Все-таки данная заметка — не про UB, а про неудобства с использованием null и "падения" программ из-за него. Думаю здесь уместнее было бы сравнение с Java (или с другим языком, имеющим null), а не с указателями C/C++.

Вот пример, воспроизводящий упомянутую вами проблему (использование после освобождения):


static R: &&i32 = &&0;

fn aux<'a, 'b>(_: &'a &'b i32, arg: &'b i32) -> &'a i32 {
    arg
}

fn foo() -> &'static i32 {
    let a = 0;
    let bar: fn(_, &i32) -> &'static i32 = aux;
    bar(R, &a)
}

fn main() {
    let res = foo();
    println!("{}", *res);
}

Запустить


И это — баг в компиляторе: https://github.com/rust-lang/rust/issues/25860

Дело в том что разработчики на ДТ языках не думают так как вы описали

А как именно они думают? Или они не думают, а тупо исправляют баги, когда те проявят себя?

В данном случае лайфтаймы проставлять не нужно.

Тут еще нужно понимать, что есть обращения, а есть определения, и это не одно и то же. Ну хочет человек, чтобы его называли Горшком, я бы его называл так, проблем тут не вижу. Проблемы начинаются, если он требует считать, что он является горшком, а не человеком.

В Rust своя собственная стандартная библиотека линкуется статически.

Ну вот зачем так писать:


fn read_keys() -> Packet {
    let device = unsafe { hw::Peripherals::steal() };

    #[cfg(any(feature = "keytron", feature = "keytron-dk"))]
    let u = {
        let p0 = device.P0.in_.read().bits();
        let p1 = device.P1.in_.read().bits();

        //invert because keys are active low
        gpio::P0::pack(!p0) | gpio::P1::pack(!p1)
    };

    #[cfg(feature = "splitapple")]
    let u = gpio::splitapple::read_keys();

    Packet(u)
}

И как автор решил эту проблему в Zig:


Для условной компиляции я переместил специфические для аппаратного обеспечения детали в отдельные файлы.

Что помешало и в Rust разместить специфические реализации в разных модулях?

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity