Использование "is" и символа точки с запятой ';'
Бесконечное горе ждет тех пользователей Ады, которые путают назначение символа точки с запятой ';' с назначением "is".
При использовании некоторых компиляторов, это приводит к длинной последовательности сообщений об ошибках.
Наиболее вероятен случай использования точки с запятой вместо is - при описании подпрограмм, также как это делается в языке Паскаль:
procedure Do_Something(X : Integer); -- <---- это подразумевает проблему!!!
-- описания begin -- инструкции end Do_Something; |
Проблема заключается в том, что такое использование символа точки с запятой допустимо, но смысл его отличается от того, что вы ожидаете.
Строка:
procedure Do_Something(X : Integer); |
является, в реальности, описанием спецификации процедуры, что в языке Паскаль больше похоже на опережающее описание процедуры с помощью директивы forward.
Следовательно, перепутывание символа точки с запятой ';' с is
почти гарантировано приводит к порождению большого количества сообщений об ошибках компилятора, поскольку синтаксический анализатор компилятора Ады будет трактовать такую инструкцию как спецификацию подпрограммы и будет сбит с толку появлением последующего блока begin-end, который ошибочно располагается вне контекста.
Появление is точно указывает Ада-компилятору на то, что далее следует тело подпрограммы.
Спецификации подпрограмм, являющиеся частью спецификации пакета, могут рассматриваться в контексте опережающих описаний, для чего в Паскале обычно используется директива forward.
В этом случае, первая строка тела подпрограммы (в теле пакета) должна быть идентична спецификации, за исключением того, что символ точки с запятой ';' заменяется на is.
Это отличается от Паскаля, где список параметров может не повторяться.
Copyright (C) А.Гавва | V-0.4w май 2004 |