Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт апр 16, 2024 13:41

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 27, 2007 19:16 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Зы 8)
Не надо путать одно с другим.
Я встречаю в СПФ выражения следующего типа: > 0= IF - это дикость!
причем найдичайшая. Как вариант можно использовать другой подход - более логичный: > IF ELSE - это корректнее выглядит: но работает медленнее из-за лишнего перехода. Подход с IFNOT гораздо нагляднее и короче ( всего одно слово, смысл которого ни с чем не спутать). Да и засорением словаря два новых слова IFNOT WHILENOT не грозит!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 27, 2007 19:21 
profiT писал(а):
Код:
: NOT 0= ;
: <= > NOT ;
...
<= IF
...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 12, 2007 12:34 
файл изменений последней Олеговой сборки писал(а):
все IF ELSE заменил на IFNOT и 0= WHILE на WHILENOT

WTF??

Это называется бездумная замена. Ладно если тараканы в голове (у кого их нет?), но зачем их плодить наружу-то?

Код:
\ коментарий до закрывающей скобки ) либо конца строки
\ обычно используется для коментирования стековой диаграммы
: ( ( / asc<parent> --> )
    BEGIN [CHAR] ) DUP PARSE + C@ = WHILENOT
          REFILL IFNOT EXIT THEN
    REPEAT ; IMMEDIATE


PARSE + C@ = 0= WHILE -- это проверка на "magic value"! Случай №3 из, судя по всему так и не прочитанного (а прочитанного, так не понятого; а понятого, так плюнутого) разложения применений 0=. Логические выражения там не при делах совершенно. Такие вот замены, с шашкой наголо, это не "упрощение" кода (и без того в высшей степени сомнительное), это его обфускация и создание удобных условий жизни для багов в коде.

Я, когда, с твоей подачи, переводил свои библиотеки на ~profit/lib/logic.f хоть понимал что именно я творю. В итоге, оказалось, что на самом деле нужно было делать лишь небольшие отдельные изменения только в 5-и файлах из где-то 60-и.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 12, 2007 14:09 
Упс, извиняюсь за горячие слова.. С примером на ( дал плюху. Это правда, не отменяет других слов (в цикле sFindIn есть такое с магическим нулём слова SEARCH-WORDLIST).

Кстати... А почему бы раз всё равно используется EXIT не написать слово ( так:
Код:
: ( ( -- )
BEGIN
DUP PARSE + C@ [CHAR] ) = IF EXIT THEN
REFILL NOT IF EXIT THEN
AGAIN ; IMMEDIATE


colorForth'образно слегка.. Ну, раз уж открыли ящик EXIT'а то уже не испортишь..

А ещё не надуманно ли писать = WHILENOT вместо <> WHILE? Ведь слово <> ты у себя не вырезал.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 14, 2007 06:41 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
profiT писал(а):
PARSE + C@ = 0= WHILE -- это проверка на "magic value"! Случай №3 из, судя по всему так и не прочитанного (а прочитанного, так не понятого; а понятого, так плюнутого) разложения применений 0=. Логические выражения там не при делах совершенно. Такие вот замены, с шашкой наголо, это не "упрощение" кода (и без того в высшей степени сомнительное), это его обфускация и создание удобных условий жизни для багов в коде.


очень даже при делах. Во-первых слова IF WHILE UNTIL и им подобные должны получать логические значения, которые генерируют флаги. Правда этим словам позволена некая удобная вольность считать все значения отличные от FALSE - значениями TRUE - эта приятная мелочь избавляет от необходимости писать такие вещи 0 <> IF а просто писать IF - может это не очень корректно с какой-нибудь формальной точки зрения, но очень удобно 8) и практично.

К тому же пример приведен не очень правильный, так как мне и самому это самое слово '(' не очень нравится, да руки у меня до него не добрались ( слово не очень правильное - так как должно бы вообще-то быть не более чем однострочным и никаких REFILL в нем быть не должно бы )

profiT писал(а):
Упс, извиняюсь за горячие слова.. С примером на ( дал плюху. Это правда, не отменяет других слов (в цикле sFindIn есть такое с магическим нулём слова SEARCH-WORDLIST).

8)))
ну и что? не могу понять чем не нравится "магический 0" - значение-то действительно редкое и удобное 8)

profiT писал(а):
А ещё не надуманно ли писать = WHILENOT вместо <> WHILE? Ведь слово <> ты у себя не вырезал.

нет не вырезал, так как оно где-то используется. Но дело даже не в том, я не могу все слова в СПФе переписать или проконспектировать. А я до этого еще не дожился. (все время обнаруживаю озадачивающие меня слова - например мне очень в последнее время нравится слово READ-LINE - ужастно выглядит оно и не только оно к сожалению ) Поэтому я честно нашел все места где было написано 0= IF или 0= WHILE и заменил на IFNOT и WHILENOT 8) не особенно разбираясь зачем там нужно формировать флаг, когда без него можно обойтись.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 14, 2007 07:18 
Цитата:
Поэтому я честно нашел все места где было написано 0= IF или 0= WHILE и заменил на IFNOT и WHILENOT

Ну тогда я за горячие слова извиняться не буду, так теперь ясно что сказал совершенно по делу:

profiT писал(а):
WTF??

Это называется бездумная замена. Ладно если тараканы в голове (у кого их нет?), но зачем их плодить наружу-то?


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB