LINUX.ORG.RU

История изменений

Исправление DarkEld3r, (текущая версия) :

На самом деле раст нихрена не safe, чем кресты, но это никого не волнует. И «без потери скорости» - так же смешно.

Ты много говоришь, а конкретных аргументов так и не было.

С таким же успехом я могу помножить это на ноль использую твоё «unsafe» - видишь сишный каст - значит unsafe и всё наглядно.

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

Как ты собрался гарантировать проверку указателя в рантайме?

Не в рантайме, а во время компиляции. Да, (опуская подробности) просто нельзя «разыменовать» не проверив.

Ну это проблема твой реализации. Выкатывай.

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

enum Choice {
    A,
    B,
    C,
    D,
}

let c = ...
    
match c {
    Choice::A => {},
    Choice::B => {},
    _ => {}
}

Нет, это решается вменяемыми подходами.

Не решается.

Исходная версия DarkEld3r, :

На самом деле раст нихрена не safe, чем кресты, но это никого не волнует. И «без потери скорости» - так же смешно.

Ты много говоришь, а конкретных аргументов так и не было.

С таким же успехом я могу помножить это на ноль использую твоё «unsafe» - видишь сишный каст - значит unsafe и всё наглядно.

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

Как ты собрался гарантировать проверку указателя в рантайме?

Не в рантайме, а во время компиляции. Да, (опуская подробности) просто нельзя «разыменовать» не проверив.

Ну это проблема твой реализации. Выкатывай.

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

enum Choice {
    A,
    B,
    C,
    D,
}

let c = ...
    
match c {
    Choice::A => {},
    Choice::B => {},
    _ => {}
}