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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 164 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 19, 2009 22:28 
Не в сети
Moderator
Moderator
Аватара пользователя

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

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


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

Зарегистрирован: Пн окт 15, 2007 17:24
Сообщения: 164
Откуда: Бийск
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Цитата:
Не понял! Там унутрях духи водятся что ли?

Она сама себе злобный дух.
В форт-машине изначально присутствует механизм изменения самой себя - определения новых слов и переопределения старых. И данные от кода однозначно не отделены: то что для внешнего интерпретатора - данные, для внутреннего - код ... ну а внешний, в свою очередь, тоже является кодом, интерпретируемым внутренним.
Поэтому, когда приходилось заниматься системами, требующими высокой надежности, на форте делались драйверы устройств сопряжения с объектом и интерпретатор другой виртуальной машины - а все алгоритмы управления делались на этой управляющей виртуальной машине, которая не могла сама себя модифицировать.

_________________
And so forth ...


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

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

Старый пример

Код:
VARIABLE SM
: P| ( -- ) DEPTH SM ! ;
: P ( n -- Pn ) DEPTH SM @ - 1- +  PICK ;

: MAJ3 ( n1 n2 n3 -- n1 n2 n3 ni|_ )
P|
0 P 1 P = IF 0 P ELSE 1 P 2 P = IF 1 P ELSE 0 P 2 P = IF 2 P THEN THEN THEN ;

STARTLOG
1 1 2 MAJ3
лог
Код:
( 1 1 2 1 )
Ok

Все это можно сделать аккуратно на нижнем уровне, с эффективностью не ниже локальных
переменных, но без ограничений, им присущих.
Остается "мелочь" - как эффективнее убрать замороженные на стеке параметры.
Если поменять адрес дна стека параметров, то поимеем утечку памяти, если сбросим
куда-то полученные выходные параметры на стеке и сбросим стек(это просто и эффективно),
а потом вернем выходные параметры на очищенный стек, то это неэффективно при большом
числе выходных параметров.
Вот если слово выдаст ссылку на массив своих выходных параметров другому слову,
для которого они входные, то это принимающее слово может прямо класть эти параметры
на свой стек и после работы на нем с полученными параметрами дать в свою очередь
ссылку на свой стек как на массив с параметрами следующему слову и т.д.
В такой схеме передачи и работы с параметрами глобальный стек становится
ненужным, заменяясь множеством локальных стеков для каждого слова.
Насчет такой схемы нужно еще поработать в плане эффективности и надежности.
Некоторый перерасход памяти на лок. стеки для слов это вопрос последний для системы с более-менее
большой памятью.

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


Последний раз редактировалось chess Пт фев 20, 2009 17:36, всего редактировалось 1 раз.

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

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
chess писал(а):
Вот если слово выдаст ссылку на массив своих выходных параметров другому слову,
для которого они входные, то это принимающее слово может прямо класть эти параметры
на свой стек и после работы на нем с полученными параметрами дать в свою очередь
ссылку на свой стек как на массив с параметрами следующему слову и т.д.
В такой схеме передачи и работы с параметрами глобальный стек становится
ненужным, заменяясь множеством локальных стеков для каждого слова.
Насчет такой схемы нужно еще поработать в плане эффективности и надежности.
Некоторый перерасход памяти на лок. стеки для слов это вопрос последний для системы с более-менее
большой памятью.


Знаете, что Вы сейчас описали с точностью над нюансами реализации?
Смолток-машину "Катана" или (чуть общней) - "Эльбрус" в его добабаяновский период... :)

"Локальный стек", в том, что было описано - есть реализация понятия "локальный контекст". Это и в Эльбрусе, и в Кроносе, и в Катане было прямо так и выделено в отдельную аппаратноподдерживаемую сучность-механизм. Локальность и защита были на уровне железа обеспечены + совершенно гибкая система адресации с адресному локальному пространству, не ограниченная стековой моделью...


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

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

К сожалению ничего по этому поводу не читал.
Могу только сказать, что такой механизм передачи параметров усложнит реализацию транслятора
на различных аппаратных платформах по сравнению с транслятором Форта, который ставится куда угодно.
Мне нравится обратная польская запись своей простотой(приоритет операций отсутствует).
Чтобы кардинально не менять форт-систему(с целью упрощения ее разворачивания на различных аппаратных платформах) можно стек параметров оставить глобальным, но чтобы сократить по максимуму манипуляции параметрами на стеке, заменить стек новой структурой данных( пусть она называется стеко-массив).
Стеко-массив на самом деле это два разных, но одинаковых по объему массива с одним указателем и одной глобальной переменной.
Слово(процедура) оставляет свои параметры в одном из массивов, работая с ним как со стеком.
Следующая процедура получает параметры на стеке от предыдущей переставляет указатель на другой массив
и работает с параметрами из первого массива на стеке(втором массиве) отработав она меняет значение глобальной переменной, которое будет занесено в указатель на первый массив(обнуление выходного стека для следующей процедуры).
Сумбурно все изложено, ну качели вообщем. Опять произвольный доступ к параметрам и работа на стеке в стиле "правильной" обратной польской записи.

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


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
chess писал(а):
Дело во-многом именно в "смехотворных мелочах".
Вот пример - нужно написать мажоритар на три параметра(если хотя бы два параметра равны, то на стеке оставить один из них).
Вот так это на форте
Код:: MAJ3 ( N1 N2 N3 -- Ni|_ )
>R OVER R> TUCK =
IF NIP NIP ELSE OVER = IF NIP ELSE OVER <> IF DROP THEN THEN THEN ;


а вот что у мя:
<pre>
: maj ( a b c --> n )
DDUP = ?EXIT ROT
DDUP = ?EXIT ROT
DDUP = ?EXIT
ERROR" Все числа разные!" ;

: MAJ ( a b c --> n ) maj OR NIP ;
</pre>

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


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

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

Вот это как раз пример частного решения в Форте.
Попробуйте написать мажоритар хотя бы для пяти параметров на стеке и поймете, что решение для трех параметров уже ни с какого боку полезным не будет. Вот может когда напишете для пяти, то станет понятно как написать мажоритар для 7, 9 и т.д. небольшого количества параметров. Но когда число параметров перевалит за 11 и этот метод для пяти уже будет частным и неподходящим. Я в этом быстро убедился. Кстати функция мажоритара одна из
функций пороговой логики и на практике полезна (например, для защиты от дребезга контактов).

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
chess писал(а):
Кстати функция мажоритара одна из функций пороговой логики и на практике полезна (например, для защиты от дребезга контактов).

Для защиты от дребезга контактов проще "на лету" подсчитать количество нулей и единиц. Тогда не придется делать мажоритар (а дребезг бывает разным, и может понадобиться 11, 13, 15... 1023 параметра). Еще вариант - конечный автомат с промежуточными состояниями "ждем 10 непрерывных чтений единицы - переходим к состоянию НАЖАТО, тогда ждем 10 непрерывных чтений нуля - переходим к состоянию НЕ НАЖАТО".


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

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
chess писал(а):
Попробуйте написать мажоритар хотя бы для пяти параметров на стеке и поймете, что решение для трех параметров уже ни с какого боку полезным не будет. Вот может когда напишете для пяти, то станет понятно как написать мажоритар для 7, 9 и т.д. небольшого количества параметров.

Так вот и я из-за этого как-то умственно плечами пожимал, когда читал высказывания Броуди про преимущество частных решений...
Да я лучше общую задачу решу один раз, а решения её частных будут просто достигаться её "настройкой", "параметризацией", а не переписыванием кода каждый раз заново... Буде общая задача успешно решена у меня будет меньше шансов "зевнуть" при очередном переписывании и перерешении очередной разновидности поставленной задачи. Дело ведь не только в ошибках типа количества параметров на стеке! Всё может быть гораздо серьёзней, когда стековый "приход/расход" в ажуре, а сам вычислительный алгоритм - с ошибкой...


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Wlad писал(а):
Да я лучше общую задачу решу один раз, а решения её частных будут просто достигаться её "настройкой", "параметризацией", а не переписыванием кода каждый раз заново...


Можо не переписывать, а копировать :D . И чем можификация частного решения не настройка
общего? Часто, на общее решения находится еще более общее. К томуже, частного решение
может оказаться вполе дстаточным.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Wlad писал(а):
Дело ведь не только в ошибках типа количества параметров на стеке! Всё может быть гораздо серьёзней, когда стековый "приход/расход" в ажуре, а сам вычислительный алгоритм - с ошибкой...

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


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

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
Mihail писал(а):
Можо не переписывать, а копировать :D .

"... Ууууу... Как всё запущено-то... "

Mihail писал(а):
И чем можификация частного решения не настройка общего?

Тем, что в этом случае это именно изменение алгоритма, это будет уже ДРУГОЕ решение, а параметризуемый алгоритм уже - ГОТОВОЕ ОБЩЕЕ решение.

Mihail писал(а):
Часто, на общее решения находится еще более общее. К томуже, частного решение
может оказаться вполе дстаточным.

Да-да-да... Уже мы это столько раз проходили!...
У меня над рабочим местом висит распечатка с двумя фразами, на которые я постоянно показываю заказчикам и коллегам пальцем: "Такого случая никогда не будет" и "Вероятность такой ситуации пренебрежимо мала"...

... Свежо придание ... :)

ЗЫ Хотя, если мы делаем поделки, а не системы, тогда - конечно...


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

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Wlad писал(а):
Mihail писал(а):
Часто, на общее решения находится еще более общее. К томуже, частного решение
может оказаться вполе дстаточным.

Да-да-да... Уже мы это столько раз проходили!...
...


Проектирование "сверху" -> "вниз"
или "снизу" -> "вверх"

а может лучше "слева-> "направо"
или "справа -> "налево"

P.S. Подходы могут быть формальны, а процесс создания необходимого решения нет:)
Пытаясь решить задачу в общем это такое же частное решение
или Вы думаете, что решения можно создавать по единственной применяемой
методике?


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

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
Мимо кассы!


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

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

Вот это как раз пример частного решения в Форте.
Попробуйте написать мажоритар хотя бы для пяти параметров на стеке и поймете, что решение для трех параметров уже ни с какого боку полезным не будет. Вот может когда напишете для пяти, то станет понятно как написать мажоритар для 7, 9 и т.д. небольшого количества параметров. Но когда число параметров перевалит за 11 и этот метод для пяти уже будет частным и неподходящим. Я в этом быстро убедился. Кстати функция мажоритара одна из
функций пороговой логики и на практике полезна (например, для защиты от дребезга контактов).

боюсь, что я с вами полностью не согласен.
нужно продумывать интерфейсы, а реализацию не фиксировать. У меня задан интерфейс: три параметра на входе, один на выходе, имя.
Все остальное на мое усмотрение, и как оно будет внутри устроено особой разницы не играет - лишь бы работало. Если вы меняете количество параметров - то вы меняете интерфейс!! А значит меняется много чего на куче уровней, которые затрагивает изменение.

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

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


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

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


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

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


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

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