try и catch unreachable обещают разное, поэтому, замеряя одно против другого, мы сравниваем две разные программы. Обе версии вызывают функцию, возвращающую объединение с ошибкой. Одна через try передаёт сбой вызывающему. Другая, от которой ждут выигрыша, использует catch unreachable.
Второй вариант утверждает, что сбой невозможен. Если он всё же случится, сборка с проверками безопасности может аварийно завершиться. Обязанность вернуть ошибку исчезла, так что его время не отражает цену эквивалентного поведения.
Примерный порядок.
- Сравнить распространение через
tryс явной веткой, которая возвращает ту же ошибку. - С обеих сторон одинаковые входы, работа с данными, владение выделенной памятью и обработка у вызывающего.
- Прогоны только с успехами и с намеренно внедрёнными сбоями замерять порознь. Затем смешанная нагрузка с записанной частотой ошибок.
- Подготовку держать вне замеряемого участка, если заявленная нагрузка её не включает.
- Записать версию компилятора, режим сборки, целевую платформу, состояние машины и сделать достаточно повторов, чтобы был виден разброс.
catch unreachable можно включить в прогон только с успехами, если явное предусловие исключает все относящиеся к делу ошибки для этих входов. Вывод тогда не выходит за это предусловие. Чтение сгенерированного кода может потом помочь объяснить результат, но заменить его не может.
Такое сравнение имеет смысл провести. Результатов пока нет.