В компилятор 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.
ОтветитьУдалить