The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз языка программирования Rust 1.24, opennews (??), 16-Фев-18, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


123. "Релиз языка программирования Rust 1.24"  +/
Сообщение от Аноним (-), 16-Фев-18, 23:05 
Лучше сразу продумывать работу функции до конца и не приделывать ей пятое колесо и делать субъективные выводы о том, что если она вдруг не сделает "panic" (или abort), то данные обязательно испортятся. Мне уже тошно читать иногда исходники firefox'а мозиловцев на русте. Что не строчка, то перечисление, завернутое в класс(точнее наоборот), то какой нибудь panic.
Ситуации разные бывают, и иногда все же важнее не упасть в обморок, а успеть сохранить не сохраненные данные.
Ответить | Правка | Наверх | Cообщить модератору

125. "Релиз языка программирования Rust 1.24"  +/
Сообщение от Крутой аноним (?), 16-Фев-18, 23:10 
> Лучше сразу продумывать работу функции до конца и не приделывать ей пятое
> колесо и делать субъективные выводы о том, что если она вдруг
> не сделает "panic" (или abort), то данные обязательно испортятся. Мне уже
> тошно читать иногда исходники firefox'а мозиловцев на русте. Что не строчка,
> то перечисление, завернутое в класс(точнее наоборот), то какой нибудь panic.
> Ситуации разные бывают, и иногда все же важнее не упасть в обморок,
> а успеть сохранить не сохраненные данные.

А можно пример? Во-первых классов в rust вообще нет.
Во-вторых ошибки и обязательность их обработки это то в чем Rust силен.
Всякие "?", .map_err и т.д. и т.п. в C++ об этом можно было только мечтать,
или пилить свой framework вместо работы.

Ответить | Правка | Наверх | Cообщить модератору

150. "Релиз языка программирования Rust 1.24"  +2 +/
Сообщение от Orduemail (ok), 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 в коде, а частоту реальных падений.

Ответить | Правка | К родителю #123 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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