В компилятор Delphi 13 Florence добавлена директива "noreturn". "noreturn" - это атрибут объявления процедуры, который указывает, что вызов процедуры 100% вызовет исключение, а не завершит обычное выполнение. Это позволит компилятору выполнить оптимизацию путем исключения лишнего кода и пропустить предупреждение о неопределенных результатах в функциях.
Пример использования:
procedure RaiseTestException; noreturn; // новая директива noreturn begin raise Exception.Create('Test2'); end; function Test(N: Integer): Integer; begin if N = 0 then Result := 0 else begin case N of 1: Result := 1; 2: Result := 2; else // Result := 0; // раскомментировать, чтобы скрыть предупреждение RaiseTestException; end; end; end; // Warning "W1035 Return value of function 'Test' might be undefined"
Используя атрибут "noreturn", вы даете компилятору обещание: вызывающая функция никогда не вернет управление. Нарушение этого обещания (т.е. возврат из вызова) может иметь негативные последствия. Например, компилятор удалит код, следующий после вызова с noreturn. Эта новая директива может использоваться для устранения предупреждений "W1035 Return value of function '%s' might be undefined" при возникновении исключений.
Вот уж странная штука. Суть-то понятна, но вводить ради этого специальную конструкцию? Неожиданно. Такое впечатление, что это реверанс в сторону любителей Exception-Driven Development.
ОтветитьУдалить