LINUX.ORG.RU

Rust is not safe!

 ,


1

7

https://youtu.be/vfMpIsJwpjU

Для Ъ: в этом вашем Rust с 2015 года существует уязвимость, позволяющая неограниченно расширить время жизни любой переменной и воспроизвести любые уязвимости, связанные с памятью.

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

А Linux тут при том, что и на нём эти уязвимости прекрасно воспроизведутся.

★★★★★

Последнее исправление: Dimez (всего исправлений: 3)

Ответ на: комментарий от grem

Зачем ты это приплел? Мой посыл был в том, что ада скорее всего медленнее плюсов и руста раз в 500, вот и ненужна никому. Ну это в довесок к отсутствующей напрочь опенсорсной инфраструктуре.

spbzip
()

язык для бессмысленной и бесполезной мастурбации вприсядку.

примерно как кресты, но даже на голову выше их в этом смысле.

я бы за попытку втащить раст в прод вообще бы увольнял.

lovesan ★★
()
Основа растафарианства — любовь к ближнему и отказ от образа жизни западного общества, которое называют «Вавилон». Растафарианцы провозглашают Святую Землю — африканский аналог Сиона, располагающуюся либо в Эфиопии, либо во всей Африке — в качестве первоначальной родины


сразу бы сказали что не взлетит. придумали тут аналог питона, понимаешь ли...

etwrq ★★★★★
()
Ответ на: комментарий от grem

На самом деле Ada - язык общего назначения, по крайней мере, ничего из свойств самого языка ему не мешает быть таким, в том числе быть системным языком. А вот rust как системный концептуально негоден, хотя его и пихают в таком качестве. Что это блин за системный язык, в котором без кучи unsafe нельзя написать драйвер?

anonymous
()
Ответ на: комментарий от spbzip

Ada компилируется в нативный код, причём в том числе есть фронтенд для неё у gcc. Уже одно это означает, что она не может быть медленнее в 500 раз, даже если трансляция не оптимальная.

anonymous
()

первая была, когда люди стали эмулировать сырые указатели с помощью индексов в массивах.

Ахаха! Срочно ввести контроль времени жизни индексов массивов.

wandrien ★★
()
Ответ на: комментарий от anonymous

Что это блин за системный язык, в котором без кучи unsafe нельзя написать драйвер?

Выглядит так, будто ты не понимаешь, что такое 𝙪𝙣𝙨𝙖𝙛𝙚, примерно никак 😊.

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)
Ответ на: комментарий от dimgel

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

Virtuos86 ★★★★★
()

Продолжаем веселиться!

https://glitchbyte.io/posts/rust-wont-save-us/

Большинство уязвимостей в ПО связаны с небезопасными функциями, выставленными в публичный API (48.8%), либо с кривым роутингом (19.5%).

Т.е. услилия растоманьского комьюнити какбэ направлены на устранение 20% уязвимостей, но в силу уязвимостей в самом языке эти усилия тщетны.

Я даже больше могу сказать, чтобы попытаться устранить 20% уязвимостей растоманам нужно переписать 80% софта на «безопасном».

Принцип Парето наоборот, ЛОЛ.

shkolnick-kun ★★★★★
() автор топика
Ответ на: комментарий от seiken

Насчёт i=i+1, в руководстве Intro to SPARK приводят пример процедур на языке Ada:

procedure Increment
  (X : in out Integer)
is
begin
  X := X + 1;
end Increment;

и SPARK:

procedure Increment
  (X : in out Integer)
with
  Global => null,
  Depends => (X => X),
  Pre => X < Integer'Last,
  Post => X = X'Old + 1;
grem ★★★★★
()
Ответ на: комментарий от monk

неявного приведения типов нет (специально)

Его и в Rust нет.

Есть.

https://godbolt.org/z/6zf65dvz6

fn b_fun(b: &B) -> () {
   b.fun()
}

pub fn main(){
   let c = C{};
   a_fun(&c)
}

Ты забыл остальной код:

struct A {}
impl A {
    fn fun(&self) -> () { println!("a_fun"); }
}

struct B {}
impl B {
    fn fun(&self) -> () { println!("b_fun") }
}
impl Deref for B {
    type Target = A;
    fn deref(&self) -> &Self::Target { &A{} }
}

struct C{}
impl Deref for C {
    type Target = B;
    fn deref(&self) -> &Self::Target { &B{} }
}

Неявнее некуда, ага.

hateyoufeel ★★★★★
()
Ответ на: комментарий от Virtuos86

Примерно понимаю, что unsafe - это способ обхода ограничений, но если чтобы написать драйвер надо отказаться от главной фичи раста, то в остальном чем он настолько лучше?

anonymous
()
Ответ на: комментарий от hateyoufeel

пока к нему базовый набор библиотек на каждый чих не наплодили.

И все говно. Читал статью про то как человек искал библиотеку для xml. Тонна вариаций, а по факту первая убогая, вторая unsafe, третья с херовым API и так далее.

PPP328 ★★★★★
()
Ответ на: комментарий от anonymous

На мой взгляд у раста два главных фу:

  1. Проприетарное хранилище библиотек, единственный производитель компилятора, полная завязка на одну компанию. Завтра она схлопнется или сделает инфру платной - пока-пока, как с Адой.

  2. Макросы. Все считают «ооо, как круто, написал [abyrvalg] и там всё само!». Ага, вот только это нулевой контроль за тем, что там происходит и что вклинивается в бинарь. Это такой curl xxx | bash только еще и с заливкой в бинарь этой посылки.

PPP328 ★★★★★
()
Ответ на: комментарий от anonymous

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

zurg
()
Ответ на: комментарий от hateyoufeel

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

Это обычно есть у языков, которые активно используются для web, разве нет? Rust развивался Mozilla, деятельность которой завязана на web.

grem ★★★★★
()
Ответ на: комментарий от zurg

соответственно и практическая рекомендация будет: делать unsafe куски достаточно маленькими и, главное, тривиально доказуемыми, а техническую корректность(а если ещё тайпстейт программинг заюзать то и логическую) программы в целом будет доказывать уже компилятор, и вот это вполне себе правильный и практический эволюционный шаг. А так у нас или spark, agda, coq т.п. плюс фактически полноценный прикладной математик, что очень дорого и долго и оправдано только для жёсткого миссион критикал, или си стайл болото с непознаваемыми блобами которые допинывают тестами до более менее рабочего состояния, и скрещивают пальцы

zurg
()
Последнее исправление: zurg (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Неявнее некуда, ага.

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

Если неявных преобразований нет, то из

fn b_fun(b: &B) ...

b_fun(x)

однозначно следует, что x имеет тип &B.

Так в Хаскеле, Аде. Не так в Си, Си++ и Расте.

monk ★★★★★
()
Ответ на: комментарий от anonymous

Главная фича раста в том, что в нём два языка: один быстрый, второй безопасный. И между этими языками есть полный интерфейс (можно вызвать любую функцию) и одинаковый синтаксис.

monk ★★★★★
()
Ответ на: комментарий от grem

Это обычно есть у языков, которые активно используются для web, разве нет?

Нет. Централизованный каталог библиотек – это просто очень, мать его, удобно. А пакетный менеджер – просто интерфейс к нему плюс унификация сборки. А не как в C, когда есть полтора десятка систем сборки, дюжина утилит для поиска библиотек по всей ФС, и все из них – полное говно. Ну, то есть, один autoconf только чего стоит.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Централизованный каталог библиотек – это просто очень, мать его, удобно

Ага, поломалась сеть и можно не работать.

унификация сборки

Только на одном языке?

grem ★★★★★
()
Ответ на: комментарий от anonymous

Неа, ансэйф это черный ящик, где творится всякое небезопасное, а наружу из этого ящика выставляют безопасный 𝘼𝙋𝙄, что позволяет считать этот черный ящик в общем и целом безопасным, пока не нужно залезать внутрь. Но тогда ты точно знаешь, что надо быть внимательным. Согласись, удобно, когда точно знаешь, где можешь наворотить дел?
Никто ничего от чего не отказывается в расте, иначе это был бы куцый бесполезный язык. Всего лишь есть четкое разделение на мух и котлет. А вот сишники любят всё вперемешку 😊 𝙐𝙥𝙙. подумал, что нечетко сформулировал: ансэйф сам по себе никакого безопасного 𝘼𝙋𝙄 не предоставляет, но он позволяет это сделать, поскольку небезопасные операции локализованы.

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 2)
Ответ на: комментарий от grem

До сих пор не понимаю, почему столько желающих писать на rust и так мало на ada и spark?

Потому что стандартная библиотека последнего в бесплатной версии идёт под GPL. Хочешь писать не GPL код - плати или пиши всё с нуля.

Pwner
()
Ответ на: комментарий от Virtuos86

просто в си надо сделать квалификаторы unsafe и trusted.

unsafe - это зубодробительный код на адресной арифметике, корректность которого не доказана, хотя бы неформально.

trusted - это unsafe, но корректность которого не вызывает сомнений.

весь остальной код считается safe, в нем запрещена адресная арифметика и все прочие опасности.

правда это сломает совместимость.

alysnix ★★★
()
Ответ на: комментарий от grem

Ну так после того, как ты в первый раз запустил сборку проекта на каком-нибудь Расте (или другом современном языке с пакетным менеджером), у тебя тоже все зависимости проекта будут лежать локально.

Погоди, или ты думал, что они при каждой сборке скачиваются заново?

theNamelessOne ★★★★★
()
Ответ на: комментарий от grem

Ага, поломалась сеть и можно не работать.

Да-да. Поломалась сеть и твой Debian превратился в тыкву. Твоя же логика.

Только на одном языке?

Большинство проектов написаны на одном языке. Если нужно что-то сложнее, вариантов тоже масса.

hateyoufeel ★★★★★
()
Ответ на: комментарий от alysnix

если у тебя программа работает не так как надо, и ты имеешь дело с отладчиком и стек трейсами, то что дадут сейфы с ансейфами?

а если программа работает так как надо?

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

Lrrr ★★★★★
()