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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Вопросы и ответы для занесения в FAQ прошу постить сюда.
СообщениеДобавлено: Вт май 01, 2007 15:38 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:42
Сообщения: 17
Откуда: с планеты Земля
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
А то уже год форуму, а вместо FAQ одни обещания.

чтобы не было флуда в теме с самим ForthFAQ,
вопросы и ответы прошу постить сюда.

Вопросы, приводящие к флуду, будут из этой темы выделяться в отдельные топики. Прошу за ними следить и не повторяться, чтобы не плодить одинаковые темы.

_________________
АдMин - это не просто админ. АдMин - это Адский Mинистр!
XXIV (подпись неразборчива)


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Я открывал несколько тем "Вопрос к FAQ по Форту" давненько уже, и тут по форуму есть

_________________
понимаю некоторую бестолковость некоторых вопросов


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Такие темы надо бы собрать в кучку в виде списка:

Вопрос -- ссылка на топик с ответом(обсуждением);

просто собираю ссылки на факообразные топики:

FAQ по FORTH (обсуждение)

http://fforum.winglion.ru/viewtopic.php?t=627

http://fforum.winglion.ru/viewtopic.php?t=616

http://fforum.winglion.ru/viewtopic.php?t=608

http://fforum.winglion.ru/viewtopic.php?t=485

http://fforum.winglion.ru/viewtopic.php?t=548

http://fforum.winglion.ru/viewtopic.php?t=475

http://fforum.winglion.ru/viewtopic.php?t=455

http://fforum.winglion.ru/viewtopic.php?t=419

http://fforum.winglion.ru/viewtopic.php?t=409

http://fforum.winglion.ru/viewtopic.php?t=402

http://fforum.winglion.ru/viewtopic.php?t=374

http://fforum.winglion.ru/viewtopic.php?t=348

http://fforum.winglion.ru/viewtopic.php?t=348 < Что такое Форт?

http://fforum.winglion.ru/viewtopic.php?t=280

http://fforum.winglion.ru/viewtopic.php?t=273

http://fforum.winglion.ru/viewtopic.php?t=214

http://fforum.winglion.ru/viewtopic.php?t=79

http://fforum.winglion.ru/viewtopic.php?t=13

http://fforum.winglion.ru/viewtopic.php?t=246


ссылки, которые надо бы отразить в FAQ:

http://faqs.org.ru/progr/other_l/forth.htm

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Тема про отладку выделена сюда: http://fforum.winglion.ru/viewtopic.php?t=2150

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 14, 2009 11:31 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Я решил проявить инициативу

дополнения к ЧАВО по форту (заодно развлечение для фортеров)

по циклам

1. почему цикл DO LOOP считается самым медленным до того, что некоторые фортеры выносят его из ядра (fork, relf)? Нельзя ли его ускорить?

2. почему в цикле DO LOOP возможно, чтобы при неисполнении условия

таком
Код:
0 9  DO         LOOP

цикл всё же выполнялся и притом значительное число раз? В чём смысл поддерживать такое свойство, не лучше ли
обойтись тем, что фортеры называют
?DO LOOP

3. Обязательно ли располагать LEAVE непосредственно перед LOOP?

4. Обязательно ли располагать индексы при реализации на стеке возвратов? Ведь это мешает манипуляциям со
стеком.

5. Почему обращение к счётчику происходит по буквам? их 2-3 , а что если мне вдруг нужен 4-уровневый цикл. Вот в некоторых языках компиляторы поддерживают размерность массивов минимум 7 (стандарт) - это нормально, есть такие алгоритмы, что же делать со счётчиком, если мои циклы работают с этими массивами ...

6. Знакомая программисту ситуация: чтобы цикл был быстрее, он организуется так, что ... после выхода из него, мы не знаем, по какой причине вышли

например

Код:
BEGIN

condition
counter @
AND
WHILE


REPEAT
(продолжить, если истинно  условиe и счётчик не равен 0 )


мы можем выйти из цикла, если неистинно условие или обнулился счётчик и нам может быть далее важно, а
собственно отчего мы вышли , поскольку на выходе это не очевидно, приходися писать операцию сравнения, т.е.
дополнительный код.
В некоторых языках есть оператор GOTO и по счётчику мы выходим сразу за цикл, а по условию идём дальше, не
дублируя сравнения.
Есть ли такая стандартная возможность в форте?

BEGIN

condition ?GOTO туда
counter @
\ \ \ \ AND уже не нужно
WHILE


REPEAT

...
...
...
туда
...


7. такой же вопрос по оператору CONTINUE
если нужно продолжить цикл с некоторого места, не заканчивая итерацию?

8. где LEAVE для циклов без счётчика?
9. поскольку в форте не оптимизируются обращения .... вообще нет как правило оптимизации, то почему отсутствуют слова для многократного выхода? Ведь получается, что в каждом из циклов нужно предусмотреть дополнительное ветвление - не привели ли вложенные циклы к необходимости прервать итерации на текущем уровне.


Некоторые вопросы детские и ответы на них известны, но это FAQ


Последний раз редактировалось вопрос Ср окт 14, 2009 22:11, всего редактировалось 1 раз.

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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
вопрос писал(а):
Я решил проявить инициативу
дополнения к ЧАВО по форту (заодно развлечение для фортеров)
по циклам

Понимаете, в Форте открытый транслятор, поэтому любые "хотелки"
фортер может легко реализовать.
Вот про GOTO, например:
Код:
VARIABLE CNT  10 CNT !

M: ?GO   DROP L1 J< ;
M: TO:   L1: ;

: 1-!    @A-- DROP ;

: S1 BEGIN
         CNT @ 4 < ?GO
         CNT 1-! CNT @ .
     AGAIN
     TO: CNT @ CR . ;

S1

лог
Код:
9 8 7 6 5 4 3
3
Ok

такой FAQ подойдет для языков с закрытым транслятором, а для Форта нет.
Устройство Форт-системы нужно(движок-интерпретатор, структуры - словари, стеки и т.п.)

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 14, 2009 20:29 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
chess писал(а):

Понимаете, в Форте открытый транслятор,

:D Ну неужели же я не знал?
:) И неужели даже такая простая вещь как FAQ неподъёмна.

chess писал(а):

Вот про GOTO, например:
такой FAQ подойдет для языков с закрытым транслятором, а для Форта нет.
Устройство Форт-системы нужно(движок-интерпретатор, структуры - словари, стеки и т.п.)

:dmad; Ну. вариантов GOTO с разным назначением только в devel СПФ можно найти 3 или больше, но 2 - в статьях :) и 1 не собственно фортовый (дальше не искал) - это не значит "любые хотелки" - вопрос касался замысла форта а не
...

можно перезадать: почему некоторые части обычного алгоритма организации цикла реализованы сразу и прямо, а некоторые - нужно реализовывать отдельно
Со сколькими системами совместим приведенный код?


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

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


В СПФ есть дизассемблер, все можно посмотреть

Код:
>: XX 8 0 DO LOOP ;
Ok
>SEE XX

58AE70 8945FC      MOV     FC [EBP] , EAX
58AE73 C745F808000000   MOV     F8 [EBP] , # 8
58AE7A 33C0      XOR     EAX , EAX
58AE7C BA00000080   MOV     EDX , # 80000000
58AE81 2B55F8      SUB     EDX , F8 [EBP]
58AE84 8D1C02      LEA     EBX , [EDX] [EAX]
58AE87 8B45FC      MOV     EAX , FC [EBP]
58AE8A 689DAE5800   PUSH    , # 58AE9D
58AE8F 52      PUSH    EDX
58AE90 53      PUSH    EBX
58AE91 90      XCHG     EAX, EAX
58AE92 90      XCHG     EAX, EAX
58AE93 90      XCHG     EAX, EAX
58AE94 FF0424      INC     [ESP]
58AE97 71FB      JNO     58AE94
58AE99 8D64240C      LEA     ESP , C [ESP]
58AE9D C3      RET     NEAR
END-CODE   Ok
>: YY 8 BEGIN 1- DUP 0= UNTIL DROP ;
Ok
>SEE YY

58AEA0 8945FC      MOV     FC [EBP] , EAX
58AEA3 B808000000   MOV     EAX , # 8
58AEA8 8D6DFC      LEA     EBP , FC [EBP]
58AEAB 90      XCHG     EAX, EAX
58AEAC 83C0FF      ADD     EAX , # -1
58AEAF 75FB      JNE     58AEAC
58AEB1 8B4500      MOV     EAX , 0 [EBP]
58AEB4 8D6D04      LEA     EBP , 4 [EBP]
58AEB7 C3      RET     NEAR
END-CODE   Ok
>


На в самом цикле тат и тат 2 команды.


вопрос писал(а):
0 9 DO LOOP

цикл всё же выполнялся и притом значительное число раз? В чём смысл поддерживать такое свойство, не лучше ли
обойтись тем, что фортеры называют
?DO LOOP


0 9 ?DO LOOP
выполнит такое-же количество циклов что и 0 9 DO LOOP

?DO проверяет только на равенство. Можно сравнить на больше или равно.
Но еще какое, знаковое или беззнаковое?

вопрос писал(а):
Обязательно ли располагать LEAVE непосредственно перед LOOP?


не обязательно.


вопрос писал(а):
Почему обращение к счётчику происходит по буквам? их 2-3 , а что если мне вдруг нужен 4-уровневый цикл.


Нужен счётчик n-ой вложенности, давай сделаем.


вопрос писал(а):
BEGIN

condition ?GOTO туда
counter @
\ \ \ \ AND уже не нужно
WHILE


REPEAT

...
...
...
туда
...


Код:
REQUIRE A_AHEAD ~mak\lib\a_if.f   \ некий эквивалент GOTO

condition A_IF
counter @
\ \ \ \ AND уже не нужно
WHILE


REPEAT

...
...
...
A_THEN
...



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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
Нужен счётчик n-ой вложенности, давай сделаем.

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



58AE8F 52 PUSH EDX
58AE90 53 PUSH EBX
58AE91 90 XCHG EAX, EAX
58AE92 90 XCHG EAX, EAX
58AE93 90 XCHG EAX, EAX

58AE94 FF0424 INC [ESP]
58AE97 71FB JNO 58AE94

Если бы перед выделенным был прыжок, то это было бы выравнивание, а так - что ?



Цитата:
0 9 ?DO LOOP
выполнит такое-же количество циклов что и 0 9 DO LOOP

?DO проверяет только на равенство. Можно сравнить на больше или равно.
Но еще какое, знаковое или беззнаковое?

Да, точно, прозевал.
Но вопрос остается - чтобы не было "безмерного удивления" - почему выбрана такая странная форма? (т.е. почему нет алгоритмически понятной ситуации)


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
вопрос писал(а):
Ну вот, словно я это только для себя. Как раз сейчас сижу и делаю.


У меня как-то потребности не вызывало. Ну назовем его NI .

Код:
3 CELLS CONSTANT LOOPSIZE

: NI ( n -- i )
LOOPSIZE * CELL+ RP@ + 2@ - NEGATE ;


: TST 4 0 DO
     CR 4 0 DO 0 NI . I .
               1 NI . J .
            LOOP
      LOOP ;
TST




вопрос писал(а):
Если бы перед выделенным был прыжок, то это было бы выравнивание


прыжок назад

58AE93 90 XCHG EAX, EAX
58AE94 FF0424 INC [ESP]
58AE97 71FB JNO 58AE94


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
вопрос писал(а):
1. почему цикл DO LOOP считается самым медленным до того, что некоторые фортеры выносят его из ядра (fork, relf)? Нельзя ли его ускорить?

1) потому, что он делает больше проверок
2) потому, что при работе использует несколько параметров (а не один, как в других случаях)
3) потому, что из него наиболее неудобный выход (UNLOOP LEAVE)
4) потому, что в большинстве случаев можно обойтись другими циклами

вопрос писал(а):
6. Знакомая программисту ситуация: чтобы цикл был быстрее, он организуется так, что ... после выхода из него, мы не знаем, по какой причине вышли
например
Код:BEGIN
condition
counter @
AND
WHILE
REPEAT
(продолжить, если истинно  условиe и счётчик не равен 0 )

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


для этого существует замечательная возможность:

Код:
BEGIN condition WHILE
          counter @ WHILE
          loop body
    REPEAT  \  тут если счетчик равен нулю
       EXIT
THEN \ тут если condition = 0
 
;

То есть проблемы в действительности нет.
тем более, что из таких циклов можно без проблем выходить по EXIT

вопрос писал(а):
7. такой же вопрос по оператору CONTINUE
если нужно продолжить цикл с некоторого места, не заканчивая итерацию?

тут не совсем понятно, нужен пример, если не сложно.

вопрос писал(а):
8. где LEAVE для циклов без счётчика?

а он просто не нужен, так как параметры (кроме FOR NEXT) лежат на стеке данных, а не возвратов, как в случае с DO LOOP

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 09, 2009 14:47 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Администрации желательно :shuffle; бы обратить внимание, что ответы всё-таки как-то появляются, и, может быть, их стоит переносить в ответы



Цитата:
вопрос писал(а):
7. такой же вопрос по оператору CONTINUE
если нужно продолжить цикл с некоторого места, не заканчивая итерацию?


тут не совсем понятно, нужен пример, если не сложно.

цикл чтения строк...
в начале итерации читаем строку, потом разбираем
если мы наткнулись на "комментарий до конца строки" ,
желательно не разбирать строку до конца, а начать новую итерацтю


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

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

7. такой же вопрос по оператору CONTINUE
если нужно продолжить цикл с некоторого места, не заканчивая итерацию?
тут не совсем понятно, нужен пример, если не сложно.

цикл чтения строк...
в начале итерации читаем строку, потом разбираем
если мы наткнулись на "комментарий до конца строки" ,
желательно не разбирать строку до конца, а начать новую итерацтю


ну, во-первых, речь идет о двух циклах:
<pre>
BEGIN readline WHILE \ цикл чтения строки до исчерпания источника данных
BEGIN NextWord WHILE \ до исчерпания строки
?comment WHILE \ пока не коментарий до конца строки
тело цикла
REPEAT
REPEAT
</pre>
причем, последнее обычно разбивается на несколько определений, так как вобщем-то вложенные циклы и не нужны.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Это всего-лишь пример (я так и знал, что придирка к примеру будет)
Понятно, что речь может идти, скажем, о строке с ограниченным числом полей ...
зараннее заданным
Несовершенство примера не отменяет необходимости оператора, прерывающего очередную итерацию посредине и продолжающего следующую сначала

скажем, жто может быть ini -файл со специальным форматом

поле - значение

алгоритм не будет включать никаких вложенных циклов

Цитата:
псевдокод

ПОКА не закончились строки НАЧАЛО
распознать_поле
Если_это_поле_комментария продолжить_цикл
иначе распознать и присвоить значение
ПОВТОРИТЬ


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

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

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

создается два определения (не обязательно оба должны иметь имя) но должен быть вызов вложенного.
дальше ты выполняешь (в цикле ли, последовательно ли) необходимые действия, и выходишь из середины обработки (описано у Броуди).
то есть просто используешь возможность вложенного выхода:


: обработка первое ?EXIT второе ?EXIT третье ?EXIT ...

: sample BEGIN .... WHILE обработка REPEAT ...

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

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


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

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


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

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