Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 02:59

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 90 ]  На страницу Пред.  1, 2, 3, 4, 5, 6
Автор Сообщение
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Сб ноя 18, 2017 16:35 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
gudliefr писал(а):
2. Невзирая на (1) система и сама по себе настолько сложна, что жрет любые ресурсы и безбожно тормозит на любой машине.
Кое-что было сделано (и делается) специально, с взглядом на будующее. Я где-то "слышал", что XP могла запускаться и на 486.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Сб ноя 18, 2017 16:51 
_KROL писал(а):
Кое-что было сделано (и делается) специально, с взглядом на будующее.
Наоборот. Первое, что делает каждое новое приложение и/или драйвер - требует обновить Windows...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Сб ноя 18, 2017 16:57 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
gudleifr писал(а):
_KROL писал(а):
Кое-что было сделано (и делается) специально, с взглядом на будующее.
Наоборот. Первое, что делает каждое новое приложение и/или драйвер - требует обновить Windows...
В каком смысле обновить? Или ты на Win 9x зациклился?)
У меня до сих пор XP стоит, и ничего.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Сб ноя 18, 2017 17:21 
_KROL писал(а):
...
Давайте об этом в другом месте. Мы уже коллеге всю тему замусорили.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Пн ноя 20, 2017 17:44 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
пример использования итераторов для перебора всех слов во всех словарях:
Код:

: WORDS-ITER: \ LFA -- iter: LFA --
L>LLFA 0 2>R
BEGIN
2R@ + @ >R
BEGIN
R@ WHILE
R@ RP@ 3 CELLS + @ EXECUTE
R> @ >R
REPEAT
RDROP
CELL RP@ +!
4 CELLS R@ = UNTIL
RDROP RDROP
RDROP
;

: VOCS-ITER: \ iter: LFA --
VOC0 @ CONTEXT 2>R
BEGIN
R@ @
RP@ 2 CELLS + @ EXECUTE
2R@ XOR WHILE
R> CELL- >R
REPEAT
RDROP RDROP
RDROP
;


: ALL-VOC:
R>
GET-ORDER
VOC0 FROM CONTEXT 2 N>KEEP
300 CELLS RALLOT RF >R
SET-ORDER
>R \ xt
['] VOCS-ITER: >R

GET-ORDER
VOCS-ITER:
WORDS-ITER:
BEGIN
L>CFA @
DUP ['] VOC-CODE CALL-IN-ADDR?
WHILE
>param @ >R
R@ SSET-IN
DUP CONTEXT VOC0 @ - 4 / XOR 0= IF RDROP EXIT THEN
SET-ORDER
GET-ORDER
R>
REPEAT
DROP

;

: ALL-WORDS-TYPE
['] . >R
0 ALL-VOC:
>R
." VOC: "
R@ L>NFA @ R@ L>countFA W@ TYPE CR
R>
WORDS-ITER: >R
R@ L>NFA @
R@ L>countFA W@ TYPE
9 ( TAB ) EMIT
DUP 8 MOD 0= IF CR THEN
1+
;

;


Не отлаживал, прост полёт мысли

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Чт ноя 23, 2017 23:57 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Несколько слов по бектрекингу.
Бектрекинг тут понимается как "идея реализованная в лоб в каждом конкретном случае".
То есть без либ вообще. Взяли и вызвали остаток кода. Всё.
Основные проблемы при использовании бектрекинговых итераторов:
Как прервать итератор?

Примечание от 13.12.2018
Можно в итератор передавать RP@ для сброса в случае необходимости.

Код:
... RP@ TEST: DUP 10 = IF RP! EXIT THEN ....





К примеру мы нашли нужное значение и наша задача выйти из итератора.
Как это сделать не зная особенностей реализации отдельного итератора?
Рассмотрим 3 варианта:
1)
Создание конвенции о вызовах итераторов.
В простейшем случае при вызове остатка кода второй элемент на стеке возвратов представляет собою указатель для сброса стека возвратов. Т.е. в остатке кода достаточно сделать так:
Код:
RDROP R> RP! EXIT

Недостатки: усложнение написания итераторов, дополнительная нагрузка на программиста ( поддерживает ли итератор соглашение?)
2)
Использование механизма перехвата исключений.
Достаточно всего трёх слов:
CATCH: \ --> / err|0 <--
\ вызвать остаток кода и перехватить исключение, если оно было. При откате положить на стек код исключения.
TO-CATCH \ -- 0
\ Выйти из кода, который был вызван из CATCH или CATCH: без исключений с сохранением ТОЛЬКО стека данных
THROW^ \ <-- err|0
\ На обратном ходу (при откате) снять число со стека данных и перейти на CATCH ( CATCH: ), если код отличен от 0 с очисткой стеков данных и возвратов.
Недостатки: дополнительная нагрузка на стек исключений, запись THROW^ CATCH: ... может сбить с толку.

3)
Дополнительный инструментарий.
Тут останавливаться особо не над чем.
Реализация доп.стека под бектрекинг и операции с ним описаны у Гасаненко, а также реализована в СПФ у ~profit'а.
Кстати, Гасаненко говорил, что можно использовать не стек, а цепочку.
См. "Одностековая реализация бэктрекинга для языка Форт". Кстати, единственная работа, которую легко найти в инете. Всё остальное пришлось пережёвывать из поставки СПФ.
Недостатки: доп. сущность, за которой надо следить. Новый лексикон в который надо "въехать".
Я, к примеру, 2 месяца пытался понять логику PRO И CONT , и меня внезапно осенило на прогулке :) На самом деле ничего сложного. Непривычно и всё.

Проблема вторая.
Локальные переменные совместно с итераторами.
Условимся, что переменные должны поддерживать многопоточность.
То есть хранение переменных в ШК не подходит.
Хочется, чтобы можно было делать так:
: TEST { a b } ITER: a ! ... ;
Использование конвенций не выглядит тут оптимальным решением.
А вот варианты 2 и 3 выглядят более менее отлично.
Поскольку 3-й вариант описан, сосредоточимся на 2-ом.
Ограничение: должно использоваться слово CATCH:
Так гораздо проще организовать, однако ж не столь очевидно будет применение этого слова для лок.переменных. А это доп. нагрузка на программиста.
Хм, будем думать дальше как сделать логичней и прозрачней.

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


Последний раз редактировалось Victor__v Чт дек 13, 2018 15:46, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Пт ноя 24, 2017 00:03 
Victor__v писал(а):
Бектрекинг тут понимается как "идея реализованная в лоб в каждом конкретном случае".
...
1) Создание конвенции о вызовах итераторов.
2) Использование механизма перехвата исключений.
3) Дополнительный инструментарий.

Постановка проблемы в первой строке подразумевает негодность (1-3) супротив
4) "реализовать [выход] в лоб в каждом конкретном случае".

Пример: http://gudleifr.forum2x2.ru/t31-topic#243.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Пт ноя 24, 2017 15:51 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
gudleifr писал(а):
Victor__v писал(а):
Бектрекинг тут понимается как "идея реализованная в лоб в каждом конкретном случае".
...
1) Создание конвенции о вызовах итераторов.
2) Использование механизма перехвата исключений.
3) Дополнительный инструментарий.

Постановка проблемы в первой строке подразумевает негодность (1-3) супротив
4) "реализовать [выход] в лоб в каждом конкретном случае".

Пример: http://gudleifr.forum2x2.ru/t31-topic#243.

Не, ну хочется как-то унифицировать без всяких дополнительных стеков и списков ( >L ).

Меня на форуме вот что зацепило:
Цитата:
Одна моя знакомая компания "фортеров" озаботилась компактной записью стековых операций: например "3/12321" означает, если не ошибаюсь, то же, что и " >R 2DUP R> ROT ROT SWAP ", только путем неявных вызовов PICK . Нужен ли такой язык? (На настоящий момент он уже настолько развит, что в нем можно решать подобные задачи "не опускаясь" до использования обычных FORTH-слов).
Совсем не нужен! Хотя бы потому, что использование подобных конструкций, свидетельствует о крайне низкой культуре фортописания. Как только у вас в программе начинают появляться такие монстры, значит, надо срочно пересмотреть структуру своей программы!

неявные вызовы PICK использовал токмо Profit да и то в кач-ве теста.
Цитата:
свидетельствует о крайне низкой культуре фортописания

Это вообще как? Причём тут использование DSL и культура фортописания?
Цитата:
Как только у вас в программе начинают появляться такие монстры, значит, надо срочно пересмотреть структуру своей программы!

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Пт ноя 24, 2017 16:25 
Victor__v писал(а):
Не, ну хочется как-то унифицировать без всяких дополнительных стеков и списков ( >L ).
Опять же, зависит от задачи. В приведенном мной примере, например, стек (для бэктрекинга) использовался родной, а применение массива диктовалось решением задачи (для обрезания уже рассмотренных комбинаций).

Victor__v писал(а):
Причём тут использование DSL и культура фортописания?
Я понимаю так: применение FORTH отрицает потребность в DSL. Новый язык пишется под конкретную проблему, а не под некую "предметную область", к которой потом придется сводить "похожие" проблемы.

Victor__v писал(а):
Но стековые манипуляторы позволяют написать низкоуровневые слова без использования ассемблера
Последнее проще и удобнее. А еще проще и удобнее отказаться от сложных вычислений в стеке.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Пт ноя 24, 2017 17:48 
Не в сети

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

Ну, я за 2 минуты написал на стек.манипуляторе COMPARE, а перетряхивание данных, для WINAPI вообще вырождается.
Насчёт вычислений не понял.
Имеется ввиду внутренняя реализация манипуляторов?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Пт ноя 24, 2017 18:05 
Victor__v писал(а):
Насчёт вычислений не понял.
http://gudleifr.forum2x2.ru/t31-topic?p=241

Victor__v писал(а):
а перетряхивание данных, для WINAPI вообще вырождается.
Это плохо - http://gudleifr.forum2x2.ru/t31-topic?p=247

Victor__v писал(а):
Ну, я за 2 минуты написал на стек.манипуляторе COMPARE
А я обычно за 0 секунд обхожусь без COMPARE .


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Пт ноя 24, 2017 21:33 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
gudleifr писал(а):
Victor__v писал(а):
Насчёт вычислений не понял.
http://gudleifr.forum2x2.ru/t31-topic?p=241

Причём здесь СТЕКОВЫЙ МАНИПУЛЯТОР?
Какие там нафиг сложные вычисления?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Пт ноя 24, 2017 21:39 
Victor__v писал(а):
Какие там нафиг сложные вычисления?
В самих манипуляторах - никаких. Но если нет сложных вычислений со многими переменными, хранимыми на стеке, зачем нужны манипуляторы?

Victor__v писал(а):
Причём здесь СТЕКОВЫЙ МАНИПУЛЯТОР?

Ни при чем. Он не нужен.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Пт ноя 24, 2017 22:41 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Зачем?
в форте можно работать "без проблем" с 3 верхними элементами стека
3! = 6 вариантов действий
моя реализация поддерживает 5 переменных-регистров 0 1 2 3 4
5! = 120 вариантов действий
Плюс циклы и условия.
Код очень короток в наборе и очень близок к ассемблерному варианту, а то и полностью идентичен.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Наработки от victor__v для СПФ
СообщениеДобавлено: Пт ноя 24, 2017 22:49 
Victor__v писал(а):
3! = 6 вариантов действий
5! = 120 вариантов действий
Ага, только, по сравнению с операциями с 1-2 параметрами, операции с 5 и 6 параметрами практически равновероятны. Я в своей практике встречал такие считанные разы и, обычно, по собственной дурости.


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

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


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

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


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

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