The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Релиз языка программирования Rust 1.24"
Отправлено Ordu, 17-Фев-18 07:51 
Rust has a tiered error-handling scheme:

    If something might reasonably be absent, Option is used.
    If something goes wrong and can reasonably be handled, Result is used.
    If something goes wrong and cannot reasonably be handled, the thread panics.
    If something catastrophic happens, the program aborts.
(c) https://doc.rust-lang.org/nomicon/unwinding.html

> Лучше сразу продумывать работу функции до конца и не приделывать ей пятое колесо и делать субъективные выводы о том, что если она вдруг не сделает "panic" (или abort), то данные обязательно испортятся.

Не "обязательно испортятся", а "нет способа дать какие-либо гарантии в отношении того, что будет делать любой код, какой бы мы не написали" и ещё, вероятно, "нет никакого осмысленного действия, которое мы могли бы совершить". Продумывать сразу -- это очень хорошо задумано, но это не работает. Сразу я может и продумал, но затем произошёл рефакторинг кода в соседнем сорце, и всё что я там себе напридумывал оказалось неверным. Когда я продумываю "сразу", я не могу предусмотреть всего, что будет с этой программой дальше, как будет меняться её код, и какие инварианты, на которые я полагаюсь, будут нарушены. А тут, мы оказываемся в очень интересной ситуации. Мы ведь думаем о программах в рамках логики, а логика -- это такая штука, что если каким-то образом в нашей базе истинных утверждений окажется одно ложное, то дальше логика может доказать истинность любого утверждения и одновременно она может доказать ложность любого утверждения. Иными словами, если в логических рассуждениях была допущена хотя бы одна ошибка, то мы сходу теряем любую способность отличать истину от лжи.
И всё, приехали. Потому что невозможно писать осмысленный код, не полагаясь ни на что. То есть, мы можем переключиться с аристотелевой логики в режим байесианской логики, и писать код, который работает с какой-то вероятностью, но у нас нет технологий написания такого кода. Попадаются отдельные хаки, но они не тянут на технологию, скорее на отсутствие технологии.

> Что не строчка, [...], то какой нибудь panic.
> Ситуации разные бывают, и иногда все же важнее не упасть в обморок, а успеть сохранить не сохраненные данные.

Никто не мешает, "падая в обморок", отловить панику, сохранить несохранённые данные и упасть только после этого.

https://doc.rust-lang.org/std/panic/fn.catch_unwind.html

std определяет достаточно гибкий механизм, которого хватит вполне для любого user-space кода. А для не-userspace можно определить свою panic_fmt и делать по-своему.

Ну а если браузер падает в обморок при любой ошибке, то тут вопрос не в том, правильно это или нет, а в том, как часто это случается. Браузер должен вызывать abort, если дальнейшее его поведение непредсказуемо, потому что непредсказуемое поведение браузера слишком чревато. И ничего сохранять при этом он не должен, я переживу, если часть истории будет потеряна, или последние закладки, которые я добавлял, потеряются. Даже если сотня текущих открытых вкладок будет потеряна -- не беда. Хуже будет, если браузер допустит выполнение произвольного кода или сольёт данные кредитки васяну-хакеру.
Так что вопроса что делать браузеру, "if something goes wrong and cannot reasonably be handled", у меня лично не стоит. Вопрос лишь в том, как часто "something goes wrong". Причём под этой частотой, я подразумеваю не частоту упоминания слова panic в коде, а частоту реальных падений.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру