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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вс май 14, 2017 23:49 
Victor__v писал(а):
но просматривать отъилнайненный код 10 20 + выше моих духовных сил.
Это по неопытности. Вот будет у Вас листинг дизассемблера хотя бы десятка килобайт чужого кода, будете рады любой избыточности.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Пн май 15, 2017 00:26 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Hishnik писал(а):
Нужны и IDE, и библиотеки, и визуальные средства проектирования интерфейсов. Но нужно ли это для "точечного решения", каким часто является Форт?

Кто знает? :)
Если даже в некоторых учебных методичках рассматривают Algorithm Builder for AVR. в качестве одного из инструментариев. (в теме про АВ на форуме vrtp)

P.S. Форт гораздо лучше для этих целей и многое уже существует в рамках имеющихся решений (хотя и можно найти его упоминание в учебных материалах)
Что то подобное Г.Р.Алпатов Применение PIC-контроллеров в измерительной технике ,но могло бы быть гораздо "фундаментальнее"
Можно, какие то Forth (Форт) материалы добавить и на twirpx - в раздел по Форт


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Пн май 15, 2017 04:21 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
KPG писал(а):
Кто знает?
Если даже в некоторых учебных методичках рассматривают Algorithm Builder for AVR. в качестве одного из инструментариев. (в теме про АВ на форуме vrtp)

P.S. Форт гораздо лучше для этих целей и многое уже существует в рамках имеющихся решений (хотя и можно найти его упоминание в учебных материалах)
Что то подобное Г.Р.Алпатов Применение PIC-контроллеров в измерительной технике ,но могло бы быть гораздо "фундаментальнее"
Можно, какие то Forth (Форт) материалы добавить и на twirpx - в раздел по Форт

А что теперь со всем этим делать? Я еще раз могу сконструировать ситуацию - вот мы потратили 1-2 месяца на некое форт-ядро. Оно пока работает с консолью и имеет ограниченный набор слов, но уже что-то умеет. Теперь вопрос - на что потратить следующие 6 месяцев? На разработку дополнительных инструментов, Algorithm Builder-ов, IDE и оптимизаторов, или на попытки применить разработанное ядро и на основе конкретных требований дописывать конкретные фрагменты системы? Я не знаю ни одного примера форт-системы, "взлетевшей" именно потому, что туда был добавлен оптимизатор или IDE.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Пн май 15, 2017 11:04 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Hishnik писал(а):
Я не знаю ни одного примера форт-системы, "взлетевшей" именно потому, что туда был добавлен оптимизатор или IDE.

Слово "взлетевшей" в отношении Форт систем и пользователей требует уточнения.
Не последнюю роль для использования SPF4 определяет и имеющийся в системе макрооптимизатор, также как и привлекательность iDE в Win32Forth
(хотя бы для того чтобы подвигнуть новых пользователей Форт поробовать запустить имеющиеся в системе примеры и понять как они работают)

P.S. 8th, например, разрабатывается в мультиплатформенности и с IDE (Factor языку тоже вроде не чужды оптимизации и IDE)
Частные "проблемы" Хищника пусть они ими и остаются, никто же никого не неволит. :)
C IDE можно вспомнить и Quest32 да и в тех же SwiftForth, VFX, iForth, отчасти Bigforth - IDE также как и оптимизатор
присутствуют.
"Взлететь" промышленно больше шансов у Форт систем с IDE чем без неё :D
Как пример наличия IDE Mosaic Development Software
ST Robotics RoboForth тоже с какой то IDE средой.

Hishnik писал(а):
Оно пока работает с консолью и имеет ограниченный набор слов, но уже что-то умеет. Теперь вопрос - на что потратить следующие 6 месяцев?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Пн май 15, 2017 23:23 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
KPG писал(а):
Слово "взлетевшей" в отношении Форт систем и пользователей требует уточнения.
Не последнюю роль для использования SPF4 определяет и имеющийся в системе макрооптимизатор, также как и привлекательность iDE в Win32Forth
(хотя бы для того чтобы подвигнуть новых пользователей Форт поробовать запустить имеющиеся в системе примеры и понять как они работают)

Я что-то не помню, чтобы SPF сначала был никому не нужен, а когда появился оптимизатор, то все сказали "ну вот, другое дело, сразу стало гораздо быстрее и именно этого нам тут не хватало".
KPG писал(а):
Частные "проблемы" Хищника пусть они ими и остаются, никто же никого не неволит.

А у меня с Фортом не проблемы, а сплошь одни решения.

KPG писал(а):
"Взлететь" промышленно больше шансов у Форт систем с IDE чем без неё

Промышленно? Как раз с возможностью подключения к разным редакторам. SPF я в свое время выбрал именно потому, что можно было запускать из командной строки, а не продираться через самопальные IDE.
KPG писал(а):
Сначала определится с целевой аудиторией, позиционированием инструментария и кругом решаемых задач и может оставить всё как и есть.
(редактор Far, терминал и командная строка данная нам в ощущения)

Может и оставить.


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Hishnik писал(а):
KPG писал(а):
Частные "проблемы" Хищника пусть они ими и остаются, никто же никого не неволит.

А у меня с Фортом не проблемы, а сплошь одни решения.

Хорошо.
Частные "решения" Хищника пусть они ими и остаются, никто же никого не неволит. :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вт май 16, 2017 17:52 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Написал большую часть кода

Код:

\ Таблица предкомпияции
\ 16.05.2017 ~er
\

REQUIRE LY ~ER\HASH\LY.F

: HASH LY ;
0 VALUE EVENT-TABLE



0 DUP         CONSTANT gr-w
2+ DUP      CONSTANT gr-h
2+ DUP      CONSTANT name-gr-hash
CELL+ DUP      CONSTANT sp-ev
30 CELLS + DUP    CONSTANT sp-h
30 CELLS +
CONSTANT rec-event-size

\ добавить запись-пустышку в таблицу и
\  выдать адрес записи
: new-event-rec \ xt-e - rec-addr
EVENT-TABLE >R
BEGIN
   R@ @ 0=   \ если запись пуста или помечена как
   R@ @ -1 =   \ удалённая
   OR
   INVERT
WHILE
   R> rec-event-size + >R
REPEAT

\ очистка на случай, если запись удалена
R@ rec-event-size 0 FILL

1 R@ W!  R@ sp-ev + !
R>
;

\ если xt имееся в записях или группах записей,
\ то выдать адрес записи и вернуть истину
\ в противном случае xt и ложь

: event-rec? \ xt -- addr-rec -1| xt 0
EVENT-TABLE >R
BEGIN    
      R@ @ 0= IF RDROP 0 EXIT THEN
      R@ @ -1 <> IF
               DUP
               R@ sp-ev + R@ W@ CELLS
               ROT >R RP@
               CELL
               SEARCH NIP NIP
               RDROP
               INVERT \ 0 ЕСЛИ ИСТИНА
            ELSE
               -1
            THEN
      
      
WHILE
R> rec-event-size + >R
REPEAT
DROP
R> -1

;

\ пометить запись для удаления в будущем
: mark-delete-ev \ addr-rec
rec-event-size -1 FILL
;

\ собрать группу из ранее записанных
\ в таблицу слов предкомпиляции, 
\ которые имеют адреса xt1 ... xtn количеством n
\ Группа сотворяется с псевдонимом addr u, который хешируется
\ Если среди xt есть те, которые отсутствуют в таблице,
\ то ловим исключение
\ Если запиcи пусты т.е. имеют только xt,
\ то запись помечается для удаления
\ создаётся запись-группа и возвращаеся её адрес
\

: compute-group \ xt1 xt2 .. xtn n addr u -- addr-rec
   HASH >R
   DUP >R
   BEGIN R@ PICK R@ - DUP WHILE
   R@ +
\   DUP .    \ отладка
   event-rec?
   0= IF . CR -3001 THROW THEN
   REPEAT
   DROP
   R@

   BEGIN
   SWAP
   >R
      R@ gr-h + W@ \ если есть обработчик
      R@ W@ 1 >     \ или это группа
      OR          
      0=   
         IF R@ mark-delete-ev THEN
   RDROP
   1-
   DUP 0=
   UNTIL
   DROP
   DROP
   0
   new-event-rec >R
   RP@ CELL+ @ R@ W!

   \ переносим данные со стека в таблицу. Стек растёт вниз!!!
   SP@
      R@ sp-ev +
      RP@ CELL+ @ CELLS
                   MOVE

   \ очищаем стек от слов
   SP@ RP@ CELL+ @ CELLS + SP!
   R>
   RDROP
   R> OVER name-gr-hash + !
       

;

\ добавить обработчик xt-h к слову предкомпиляции xt-e
\ если xt-e не слово предкомпиляции, то ловим исключение
\ если xt-e не в записи, а в группе записей,
\ то создать запись xt-e с обработчиком

: ->EVENT \ xt-h xt-e --
   >R
   R@ event-rec?
   0= IF . CR -3001 THROW THEN

   \ если слово предкомпиляции в группе
   DUP W@ 1 > IF     
            EVENT-TABLE >R
            rec-event-size +
            TO EVENT-TABLE
            RP@ CELL+ @ \ D: -- xt-e
            \ если слово только в группе или группах,
            \ то создаём запись
            event-rec? 0=
               IF    
                  R> TO EVENT-TABLE
                  new-event-rec
               ELSE   
                  DROP \ rec-addr --
               \ продолжаем искать запись
               \
   
            \      ." RECURSER" CR   \ отладка
            \      DEPTH .SN CR   \ отладка

                  RP@ CELL+ @ \ D: -- xt-e
                  RECURSE
                  R> TO EVENT-TABLE
                  RDROP EXIT
               THEN
         THEN

\   DEPTH .SN CR   \ отладка

   >R \ R: -- rec-addr
   
   R@ 2+ W@ CELLS    \ СМЕЩЕНИЕ
   R@ sp-h +      \ ДЛЯ ПОКЛАДА ОБРАБОТЧИКА
   +
   !
\   DEPTH .SN CR   \ отдадка
   
   \ увеличить кол-во обработчиков на 1
   R@ 2+ W@ 1+ R@ 2+ W!

   RDROP
   RDROP
;      
   
: find-next-rec \ xt-e rec-addr1 -- xt-e rec-addr? -1 | xt-e 0   
2>R
BEGIN
      BEGIN
         R@ @ 0=
         R@ @ -1 =
         OR INVERT
      WHILE
         R@ sp-ev + R@ W@ CELLS   
         RP@ CELL+ CELL
         SEARCH NIP NIP
         IF 2R> -1 EXIT THEN
         R> rec-event-size + >R
      REPEAT

\ Внимание!!! манипуляция со стеком потока-управления
R@ @ -1 = IF
         R> rec-event-size + >R
         [ 2SWAP ] AGAIN
      THEN
RDROP
R> 0                
;


USER-VALUE EVENT-RP@

: EVENT-EXIT EVENT-RP@ RP! ;


: EVENT-COMPILE, \ FFA@1 xt1 -- FFA@? xt1|xt?|'noop
   RP@ TO EVENT-RP@
   >R
   R@ event-rec?
   0= IF -3005 THROW THEN
   DROP

   R@ EVENT-TABLE
   BEGIN
      find-next-rec
   WHILE         
      >R \ rec-addr
      R@ sp-h + R@ 2+ W@
         0 ?DO
            I CELLS + >R
            \ FFA@ xt -- ??? FFA@ xt
            R@ @ EXECUTE
            R>
           LOOP
      DROP
      R> rec-event-size +
      R@ SWAP
   REPEAT
   RDROP   
                     
;





_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вт май 16, 2017 17:56 
Victor__v писал(а):
Написал большую часть кода
А зачем Вам пытаться улучшить FORTH, если Вы совершенно не умеете на нем писать?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вт май 16, 2017 18:00 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Ну и где же наигрубейшие ошибки?

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вт май 16, 2017 18:14 
Victor__v писал(а):
Ну и где же наигрубейшие ошибки?
Вы пишете на FORTH как на C++. Наличие определений длиннее двух-трех строчек это достаточно грубо. Использование обфускации - это совсем плохо.

Например, изумительное

R@ @ 0= \ если запись пуста или помечена как
R@ @ -1 = \ удалённая
OR
INVERT

вместо

R@ @ 0> \ запись используется


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вт май 16, 2017 20:12 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 128
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Hishnik писал(а):
Victor__v писал(а):
Вот и я про тоже. Постоянно переключать режимы - наживать ошибки.

Да тут вообще надо осторожно с оптимизациями. Вот была многолетняя эпопея у Максимова с макроподстановщиком. Только сделано было топорно, вручную, через перечисление вариантов кода и замены этого кода. Разумеется, нужен был инструмент задания правил.

Немного заступлюсь, все баги Макс исправил и работает достаточно стабильно, а как там реализовал ему респект


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вт май 16, 2017 20:34 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Цитата:
R@ @ 0= \ если запись пуста или помечена как
R@ @ -1 = \ удалённая
OR
INVERT

вместо

R@ @ 0> \ запись используется

Спасибо. Исправлю.

Насчёт определений в две-три строчки вопрос спорный.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вт май 16, 2017 20:56 
Victor__v писал(а):
Насчёт определений в две-три строчки вопрос спорный.
Ну, Броуди по этому поводу собрал достаточное количество мнений. Рациональное, видимо, такое: раз FORTH-программа предназначена не для компиляции, а для получения решения методом итераций, то следует иметь доступ к любой "единице действия". Следовательно, любой фрагмент, который можно поименовать, должен иметь имя. Причем, FORTH-илитарность требует не считать таким фрагментом, ни константы, ни переменные. Только действия и законченные мысли.
Тем более, при писании FORTH-программы "как думаешь". Как только додумал до чего-то - сделал словом.
Если же FORTH-программа компилируется, то нет ничего странного, что стиль ее написания тяготеет к наиболее "естественному" компилируемому языку - C, или более привычному C++.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вт май 16, 2017 22:26 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Hishnik писал(а):
Я что-то не помню, чтобы SPF сначала был никому не нужен, а когда появился оптимизатор, то все сказали "ну вот, другое дело, сразу стало гораздо быстрее и именно этого нам тут не хватало".

Более 20-ти лет назад и DOS был весьма востребованой и эффективной системой :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Ср май 17, 2017 20:57 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 128
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Victor__v писал(а):
Написал большую часть кода

Код:
0 DUP         CONSTANT gr-w
2+ DUP      CONSTANT gr-h
2+ DUP      CONSTANT name-gr-hash
CELL+ DUP      CONSTANT sp-ev
30 CELLS + DUP    CONSTANT sp-h
30 CELLS +
CONSTANT rec-event-size


В этом коде наверно структуру использовать намного читабельней , например как в SPF
Код:
0
0           -- gr-w \ ?
2           -- gr-h
2           -- name-gr-hash
CELL       -- sp-ev
30 CELLS -- sp-h
30 CELLS -- sp-?
CONSTANT rec-event-size

А при использовании HASH, не избежать ведь коллизий, может привести к чему нибудь не хорошему


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

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


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

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


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

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