Синтаксис — это то, что я ввожу в код и передаю компилятору.
Выполнение — это то, что происходит во время выполнения программы.
Для исключений у нас есть синтаксис try..catch throws и throw. Для значений ошибок у нас есть классический способ
Код: Выделить всё
if err != nil {
return err
}
Пока давайте не будем смешивать Python, JavaScript или C++, где вы можете просто генерировать любое исключение, какое захотите. Я говорю конкретно о проверенных исключениях.
На уровне выполнения у нас есть раскручивание стека в случае исключения с использованием libunwind в C++. Вызов всех различных посадочных площадок и выполнение кода очистки или вызов обработчика. В случае значений ошибок это в значительной степени wysiwyg, после вызова функции есть ветвь, проверяющая наличие ошибки.
Но это два ортогональных аспекта. Я могу представить язык программирования, который использует синтаксис исключений, но преобразует его в возвращаемое значение, подобное result. Я также могу представить себе компилятор, который обрабатывает result по-другому и реализует это с использованием протокола исключений Itanium и libunwind.
Теперь меня беспокоит только это с аспектом Синтаксис в этом посте.
С моей точки зрения, проверенные исключения и значения ошибок просто изоморфны.
Но почему-то, если вы Google, чтобы узнать, почему проверенные исключения не удалось, вы получите много результатов. Аргументы все также применяются к значениям ошибок.
Новые исключения распространяются вверх по стеку вызовов, как и новые значения ошибок. Чем throws Exception отличается от box?
Подробнее здесь: https://stackoverflow.com/questions/790 ... es-praised