Quantcast

IF THEN

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

IF THEN

Victor Korolev
Добрый день!
Заметил некоторую нелогичность сообщений об ошибке в SPF при компиляции
условий IF THEN, когда лишняя THEN выдается сообщение: "-2007 Conditionals
not paired", но когда не хватает THEN ничего не выдает и компилирует как ни
в чем не бывало, только мусорит стек. Было бы проще найти подобную ошибку в
сложных словах со множеством вложенных IF THEN, если бы выдавалось сообщение
когда и не хватает THEN.



------------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: IF THEN

Andrey Cherezov
Добрый день, Королев Виктор!

Ваше сообщение от 09.01.2009 16:19:
> Заметил некоторую нелогичность сообщений об ошибке в SPF при компиляции
> условий IF THEN, когда лишняя THEN выдается сообщение: "-2007 Conditionals
> not paired", но когда не хватает THEN ничего не выдает и компилирует как ни
> в чем не бывало, только мусорит стек. Было бы проще найти подобную ошибку в
> сложных словах со множеством вложенных IF THEN, если бы выдавалось сообщение
> когда и не хватает THEN.
>  
Правильность вложенности управляющих конструкций контролируется ими
самими. На отсутствие THEN просто некому ругаться. Т.е. если в тексте
встречаются (и немедленно выполняются) всякие там IF ELSE THEN BEGIN
WHEN UNTIL REPEAT AGAIN, то они могут увидеть, что состояние переданного
им стека не соответствует ожидаемому, и возмутиться явной ошибки. А если
их (слов) нет, то и проконтролировать некому. Разве что слову ";", но
оно от стека не зависит и формально не может иметь к нему претензий -
какая ему разница, что там не стеке, может программист так и задумал (и
ведь на самом деле можно разрешить ставить THEN не в том слове, в
котором был IF , ведь IF это просто ссылка вперед, т.е. отсутствие THEN
не обязательно ошибка!)

Контроль вложенности, конечно, иногда спасает от глупых ошибок, но
вообще не в традициях Форта контролировать программиста. Программист
считается сильно главнее машины :) И умнее. Вот мусор на стеке вы видите
- это уже достаточно сильный сигнал о том, что что-то не в порядке (если
этот мусор не запланированный).

------------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: IF THEN

oda-2
In reply to this post by Victor Korolev
Королев Виктор пишет:
> Заметил некоторую нелогичность сообщений об ошибке в SPF при компиляции
> условий IF THEN, когда лишняя THEN выдается сообщение: "-2007 Conditionals
> not paired", но когда не хватает THEN ничего не выдает и компилирует как ни
> в чем не бывало, только мусорит стек. Было бы проще найти подобную ошибку в
> сложных словах со множеством вложенных IF THEN, если бы выдавалось сообщение
> когда и не хватает THEN.

1. Добавить в определение нового слова (в слова : и ; ) проверку на
сохранение глубины стека вроде несложно. Ну может еще во всякие LITERALы
придется. Но в принципе это легче контролировать самостоятельно, не
раздувая компилятор. Поставил "DEPTH . CR" в начале и в конце модуля,
сравнил. (Кстати, в определении модуля, в слова MODULE: ;MODULE такая
проверка бы гораздо лучше вошла, как мне кажется. Модули вроде нечасто
стек двигают. И Warning какой-нибудь выводить, если что. Может
разработчики вставят?)
2. Из-за особой настраиваемости компилятора на форте гораздо больше
стилей программирования, чем в классических C/Pascal и иже с ними. Но
такие особенности форта, как:
- замена операций с переменными операциями со стеком,
- передача параметров в процедуры этим же стеком,
- чрезвычайно малая длина текста служебных конструкций для определения
нового слова,
- возможность манипуляций со словарями,
(наверное еще можно добавить) дают прекрасную возможность разбивать
большие определения с кучей вложенных условий и циклов на несколько
маленьких определений. Их гораздо проще отлаживать (если стековые
диаграммы не забывать писать :) ), понимать как посторонним, так и
самому себе через 1-2 месяца, повторно использовать в других
определениях. Есть еще чисто психологический аспект: сложная проблема
описывается в главном Слове одной осмысленной(!) фразой из
вспомогательных слов, разбивается на набор проблем поменьше, помнить
подробности которых одновременно(!) нет необходимости. Звучит это
наверное абстрактно, но если попробовать написать маленькую программку
сначала длинными определениями, а затем короткими, то разница будет
очевидна. Вроде бы автор форта для себя считал оптимальной длиной одного
определения 7 слов. Мой (пока что маленький) опыт приводит к такой же цифре.
К чему я это все писал. Мне ни разу не пришлось использовать вложенные
условия и вложенные циклы. Они у меня всегда расходились про разным
словам. У меня нечасто встречается даже условие в цикле.

P.S. В основном это вольное осмысливание книги Лео Броди Thinking Forth.
P.P.S. Господа местные! Подскажите пожалуйста, есть ли на этой рассылке
какие-нибудь особые правила, и где их прочитать.


------------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: IF THEN

Andrey Cherezov
Добрый день, Oda!

Ваше сообщение от 10.01.2009 12:44:
> P.P.S. Господа местные! Подскажите пожалуйста, есть ли на этой рассылке
> какие-нибудь особые правила, и где их прочитать.
>  
Особых правил нет.

------------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: IF THEN

Ruvim Pinka
In reply to this post by Victor Korolev
День добрый!

2009/1/9 Королев Виктор <[hidden email]>
[...]
но когда не хватает THEN ничего не выдает и компилирует как ни
в чем не бывало, только мусорит стек.
 
Было бы проще найти подобную ошибку в сложных словах со множеством вложенных IF THEN, если бы выдавалось сообщение когда и не хватает THEN.

1. Делайте простые слова. Освобождайте код от вложенных структур управления через рефакторинг.
2. Но если таки очень хочется, то подключите check-control-flow.f

--
Ruvim

------------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Loading...