Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб апр 20, 2024 04:27

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

Код:
\ 21-02-2007  конструкции, которых не хватает в СПФ

\ выдает смещение от текущего адреса до указанного.
: atod ( addr --> disp )  HERE CELL+ - ;

\ ветвление по нулю
: N?BRANCH, ( ? )
            ?SET
            0x85 TO J_COD
            ???BR-OPT
            SetJP  SetOP
            J_COD    \  JX без 0x0F
            0x0F     \  кусок от JX
            C, C,
            DUP IF atod THEN , DP @ TO LAST-HERE ;

\ пропустить, если 0 иначе переход за ELSE
: IFNOT ( flag --> ) ?COMP 0 N?BRANCH, >MARK 1 ; IMMEDIATE

\ продолжать цикл, если 0
: WHILENOT ( flag --> ) ?COMP 0 N?BRANCH, >MARK 1 2SWAP ; IMMEDIATE

\EOF

: sample ( flag --> ) IFNOT ." zero flag" ELSE ." non zero flag" THEN ;
FALSE DUP . sample CR
TRUE DUP . sample CR

: proba ( flag --> ) BEGIN DUP . DUP WHILENOT 1 - REPEAT . ;
0 proba CR
10 proba CR


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 21, 2007 22:01 
Цитата:
это и медленно и некрасиво!

Это и не медленно и не некрасиво.

По поводу "медленно":
Цитата:
lib/ext/disasm.f
: 0=if 0= IF 1 . ELSE 2 . THEN ;
SEE 0=if


По по поводу "некрасиво": "И сказал Мур: дробите и размножайте слова, и будет вам через это благоденствие" (с).

Эстетически красивей был бы NOT вместо 0= . Но NOT в SPF нет, 0= вместо него. Вот и весь сказ:

Цитата:
: NOT 0= ;


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
profiT писал(а):
Цитата:
это и медленно и некрасиво!
Это и не медленно и не некрасиво.


Код:
\ flag "истина" тогда и только тогда, когда x равно нулю.
CODE 0= ( x --> flag )
        SUB   EAX, # 1
        SBB   EAX, EAX
      RET
   END-CODE

ветвления лишнего нет 8) но две операции лишние есть! в добавление к коду IF
так что это и длиннее и медленнее

profiT писал(а):
По поводу "медленно":
Цитата:
lib/ext/disasm.f
: 0=if 0= IF 1 . ELSE 2 . THEN ;
SEE 0=if

: if 0= IF 1 . ELSE 2 . THEN ;
SEE if

Найди 10 отличий.

а ты выключи оптимизатор. А то получается не очень хорошо.
То что оптимизатор выправляет корявоси - это хорошо, но не всегда он есть 8)

profiT писал(а):
По по поводу "некрасиво": "И сказал Мур: дробите и размножайте слова, и будет вам через это благоденствие" (с).

вот это я и сделал 8)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 21, 2007 22:18 
Цитата:
а ты выключи оптимизатор. А то получается не очень хорошо.

Сам виноват. "Ага!.. -- сказали лесорубы, когда японская лесопилка наконец уже подавилась рельсой".

И вообще, с какого перепуку я должен запоминать и применять новое слово чтобы выиграть копейки скорости. Пусть компьютер за меня пыжится, это он железный, а не я.

mOleg писал(а):
profiT писал(а):
По по поводу "некрасиво": "И сказал Мур: дробите и размножайте слова, и будет вам через это благоденствие" (с).

вот это я и сделал

Неправильно сделал. Рефакторизация -- это не когда туча-туча слов делающих примерно одно и тоже. Это когда туча-туча слов, которые в комбинациях могут делать и то что может делать предыдущая туча, плюс ещё больше за счёт синергии.

Различие между этими подходами: определение слов "1+" "2+" "3+" и так далее, когда можно писать "1 +" , "2 +" , "3 +".

Бесполезно субли.. спорить на форуме -- времени жалко. Поэтому на этом я закончу.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 22, 2007 11:58 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
profiT писал(а):
Неправильно сделал. Рефакторизация -- это не когда туча-туча слов делающих примерно одно и тоже. Это когда туча-туча слов, которые в комбинациях могут делать и то что может делать предыдущая туча, плюс ещё больше за счёт синергии.

Полностью согласен. Не надо превращать форт в иероглифический язык(он и так уже во многом такой). Слова типа 1+, 2+, IFNOT, а по большому счету и /MOD и даже F+ и т.д. и т.п. - это все иероглифы. Проблемы, которые решаются введением таких слов нужно решать в других плоскостях(введением глубокой оптимизации, указанием типов и т.п.) - в общем без ввода лишних сущностей.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 22, 2007 12:01 
NB: Вообще, если бы в SPF сразу были NOT >= <= то это бы неплохо. Вспоминается, что именно отсутствие этих трёх слов (и EMPTY) в своё время сильно раздражало при переходе с SMAL32. Щас ничего, привык. Может даже слишком привык...

Слово 0= применяется в нескольких контекстах, с достаточно разными по смыслу целями. По уму их надо бы разделять, чтобы программа выглядела осмысленней:

1. 0= как NOT
2. 0= как 0 =
3. 0= как проверка на "magic value", возвращённое другим словом

Пример первого:

Код:
: do shouldWeQuit? NOT IF EXIT THEN ... ;


Пример второго:

Код:
: depth? DEPTH 0 = IF ." стек пуст" THEN ;


Пример третьего:

Код:
: str= ( addr1 u1 addr2 u2 -- f ) COMPARE 0= ;


Кстати, я так и сделал у себя: ввёл NOT и прочие вещи..


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 22, 2007 16:40 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 16, 2006 23:02
Сообщения: 65
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Not, кстати говоря - это побитовая операция. Стало быть, 543 not не эквивалентно 543 0 = . Посему предлагаю not в таком смысле не использовать, а использовать 0=.

_________________
Я знаю только то, что я ничего не знаю. /(с) Сократ/
Мой форт | Мой проект ИИ


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 22, 2007 17:19 
wormball писал(а):
Not, кстати говоря - это побитовая операция.

C INVERT не путаем?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 22, 2007 17:26 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
profiT писал(а):
wormball писал(а):
Not, кстати говоря - это побитовая операция.

C INVERT не путаем?


В одних Фортах NOT работает как INVERT, в других как 0= .


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 22, 2007 19:44 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Mihail писал(а):
В одних Фортах NOT работает как INVERT, в других как 0= .

А всего есть 3 варианта для NOT:
0=
INVERT
NEGATE
Поэтому его и убрали из стандарта-94 и из SPF !

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 22, 2007 22:39 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 16, 2006 23:02
Сообщения: 65
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
in4 писал(а):
NEGATE

Это уже как-то совсем жестоко. Лично я склоняюсь к побитовой операции - всё-таки обычно, говоря not, подразумевают именно её.

_________________
Я знаю только то, что я ничего не знаю. /(с) Сократ/
Мой форт | Мой проект ИИ


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 23, 2007 15:52 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
wormball писал(а):
Лично я склоняюсь к побитовой операции - всё-таки обычно, говоря not, подразумевают именно её.

Так используй 0= или INVERT , как и должно быть по стандарту! И не будет разночтений, не надо будет разбираться, какую именно операцию ты хотел сделать!! В этом месте стандарт как раз разумный! ;)
1 во всех условиях(IF WHILE) будет считаться TRUE, но
Код:
1 INVERT ( вместо твоего NOT )

0 никак не даст(м.б. $FFFE), надо сначала преобразовать 1 к TRUE !!
Или делать 0=...

_________________
With best wishes, in4.


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
chess писал(а):
Полностью согласен. Не надо превращать форт в иероглифический язык(он и так уже во многом такой). Слова типа 1+, 2+, IFNOT, а по большому счету и /MOD и даже F+ и т.д. и т.п. - это все иероглифы. Проблемы, которые решаются введением таких слов нужно решать в других плоскостях(введением глубокой оптимизации, указанием типов и т.п.) - в общем без ввода лишних сущностей.


полностью не согласен - нужно делать логично и удобно в первую очередь!
К тому же я не разделяю мнения что запись вида > 0= IF выглядит понятнее,
чем > IFNOT . К тому же от IFNOT "иероглифами" не пахнет!

А вообще мне не понятна позиция Азамата, в том, что для СПФ-а это плохо, а для других фортов хорошо 8((( Что он высказал в IRQе


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 23, 2007 21:27 
Цитата:
К тому же я не разделяю мнения что запись вида > 0= IF выглядит понятнее, чем > IFNOT .


Код:
: NOT 0= ;
: <= > NOT ;
...
<= IF
...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 25, 2007 17:49 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
mOleg писал(а):
chess писал(а):
Полностью согласен. Не надо превращать форт в иероглифический язык(он и так уже во многом такой). Слова типа 1+, 2+, IFNOT, а по большому счету и /MOD и даже F+ и т.д. и т.п. - это все иероглифы. Проблемы, которые решаются введением таких слов нужно решать в других плоскостях(введением глубокой оптимизации, указанием типов и т.п.) - в общем без ввода лишних сущностей.


полностью не согласен - нужно делать логично и удобно в первую очередь!
К тому же я не разделяю мнения что запись вида > 0= IF выглядит понятнее,
чем > IFNOT . К тому же от IFNOT "иероглифами" не пахнет!


У северных народов около 80-ти названий для слова "снег" - если я буду им рассказывать про снег за окном, используя обычные слова для его характеристики - они тоже скажут что так описывать снег неудобно и нелогично.

Любой приведенный ниже синтаксис(хотите добавьте свой) после его долгого применения войдет в привычку
IF W1 W2 .... ELSE W3 W4 ... THEN
ELSE W3 W4 ... IF W1 W2 ... THEN
IF0 W1 W2 .... IF1 W3 W4 ... THEN
IF1 W3 W4 ... IF0 W1 W2 ... THEN
{0 W3 W4 ... {1 W1 W2 ... END}
{1 W1 W2 ... {0 W3 W4 ... END}
и в каждом используется только 3 слова IF/IF1/{1 ELSE/IF0/{0 THEN/END}
В варианте IF/IFNOT ELSE THEN используется 4 слова - избыточность налицо. Есть избыточность полезная, например, избыточность слов разговорного языка позволяет различать слова в условиях шума, избыточность информации на диске позволяет восстанавливать потери информации от дефектов поверхности диска. В данном случае избыточность бесполезна. Вообще если нужный синтаксис просто реализовать без избыточности не удается - нужно править базовые принципы.

_________________
С уважением, chess


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

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


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

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


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

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