KPG писал(а):
А есть грани чёткого разделения между ними?
Т.е. отсутствие сказуемого в предложении есть признак правильности написанного? Извините.
KPG писал(а):
Оставайтесь Дейкстра-ординарным.
Это не ко мне, это к
терапевту Зингеру.
Рассмотрим простой пример (с запасного форума):
Код:
VARIABLE TEST3
TEST3 2000 ALLOCATE THROW !
Здесь заведомо есть ошибка - неправильное расположение значений на стеке; но даже для того, чтобы ее найти, надо в лучшем случае рассматривать не только сами слова, но и их стековые комментарии, а в худшем - отслеживать "ход исполнения". Если адрес переменной рассчитывается более сложно или кусок кода между ней и расчетом значения нетривиален, то заметить ошибку гораздо сложнее.
Но, самое интересное здесь, что данный простой! фрагмент содержит в себе еще несколько потенциально опасных моментов:
1. Если значения CURRENT и CONTEXT не совпадают, то вполне вероятно, что вызывается не тот TEST3, который мы только что определили.
2. Поведение THROW может зависеть от охватывающего CATCH.
3. Выделение массива в 2000 байтов требует где-то в дальнейшем проверок, что при заполнении не будет выхода за его пределы. Здесь уместнее применение константы, т.к. нет никакой гарантии, что при правке программы размер массива не поплывет.
Список можно продолжить.