Они - совсем другой вид языков и способа, которым они обрабатывают исключения, могло бы довольно отличаться.. Как обработка исключений реализована и каково различие в реализации в этих языках?
Я задаю этот вопрос также, потому что я заметил, что обработка исключения C++, кажется, является очень медленной по сравнению с версией JavaScript.
Если вы спрашиваете, как он внутренне генерирует эти исключения, то это довольно сложный вопрос.
Один из подходов (который, я думаю, используется в C ++ и Java, я не знаю о Javascript) - поддерживать стек обработчиков ошибок. Когда генерируется исключение, верхняя запись извлекается из стека и обрабатывает исключение соответствующим образом или выталкивает другую запись из стека, если она не может ее обработать (например, она получила исключение NullPointerException, когда верхним обработчиком является исключение OutOfBoundException).
Я знаю только основы обработки исключений C ++, но, насколько я могу судить, в Java есть явная основанная на объекте
иерархия для исключений ( Throwable
, Exception
], RuntimeException
, Error
) в то время как в C ++ вы можете сделать
try
{
throw 1337;
}
catch (int i)
{
// i == 1337
}
Это, конечно, отражается на дизайне ваших структур классов и общих политик обработки исключений и т. Д.
Другое отличие Это, казалось бы, незначительное отличие состоит в том, что в C ++ на самом деле есть только то, что в мире Java известно как исключения времени выполнения, что означает, что вы можете генерировать что угодно в любое время без явного написания кода для обработки псевдоисключения throw ( I ' m не желает называть int
или любой другой примитивный тип исключением, это просто возможно исключительные значения ).
Наконец, из-за своей природы по сравнению с исключениями Java исключения C ++ по умолчанию не содержат ничего, сопоставимого с трассировками стека Java.