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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 59 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Ср май 09, 2018 23:11 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Вот поэтому и вопрос о целях, задачах и назначении форт-системы. Назначение - компилировать огромные исходники?

Victor__v писал(а):
Да ладно. Вот этого точно не ожидал.
Что проще и быстрее найти в списке? Число или строку? Что проще 2OVER COMPARE или OVER = ?
Конечно, выигрыш будет заметен на большой выборке. Хотя, с компиляцией 2 или 4 либ в основном словаре слов будет под 1000.

Так сколько конкретно это по времени? Часы, минуты? Ну хотя бы секунды? Я понимаю, что можно подставить 100 секунд и найти размер файла, на котором это произойдет. А на практике?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Чт май 10, 2018 19:25 
Не в сети

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

Для повторения его ошибок я немного опоздал :wink: Экономическое образование вместе с чтением "Капитала" и "Этики" неплохо так повышаю понимание происходящего.
Хоть первый труд местами высосан из пальца (моё мнение, читал давно).

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Чт май 10, 2018 20:06 
Не в сети

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


Вот специально заморочился и попробовал прогнать. Что ж быстрее? Сравнение хешам или по строкам?

Код:
: STD-SFIND
CONTEXT @ L>LLFA CELL+ >R
BEGIN
R@ WHILE
R@ L>NFA @ R@ L>countFA W@ 2OVER
COMPARE 0= IF R@ L>FFA W@ R> L>CFA @  -1 EXIT
R> @ >R
REPEAT
RDROP 0
;


Поиск в Нове:
Код:
: SFIND \ a u -- a u 0| ffa@ xt -1
2DUP VOC-HASH
DUP VOC-TH CELLS >R      \ смещение треды
VOC0 @ CONTEXT 2>R

BEGIN
R@ @ L>LLFA
2 RPICK
+
>R
   BEGIN
   R@ WHILE
   R@ L>HFA @ OVER =    
         IF
         DROP 2DROP
         R@ L>FFA W@
         R@ L>CFA @
         -1
         RDROP RDROP RDROP RDROP
         EXIT
         THEN
   0/1#11&<1^
   REPEAT
RDROP

2R@ XOR WHILE
R> CELL- >R
REPEAT
RDROP RDROP RDROP
0/00x
;



Комментарии по словам поиска.
Первый вариант поиск по цепочке со сравнением строк. Поскольку в Нове 4 цепочки, то используется только 2-я.

У первого варианта по сравнению со вторым есть фора где-то в 50 тактов. Ни хеширования тебе, ни сложения со смещением треды. Зато вызов слова COMPARE в цикле.

Для замера используется слово TIMER@ из поставки СПФ. Мною тупо скопировано в бинарном виде.

Результаты
Nova
1641264836 \ время начала замера
1641269036 \ время окончания
1-THR
1641238820
1641264648
OK
Nova
1292889040
1292893292
1-THR
1292835954
1292888880
OK
Nova
833191700
833195876
1-THR
833165684
833191500
OK
Nova
891541484
891545692
1-THR
891517572
891541296

То бишь быстрее от 5 до 12 раз сравнение по хешам.
Выборка производилась на 162 словах. Каждая функция поиска искала 2 слова, которые находились в конце второй треды ( 2- и >param ).
Стоит отметить, что у меня COMPАRE немного нестандартный: если длина строк не совпадает, то возвращается -1.
То есть в нашем случае ещё одна фора поиску с сравнением строк.

Касательно примера:
В Нове на момент теста было 667 слов. Поиск словом STD-SFIND вёлся только по 2-й треде. Для пущего эффекта надо было бы натравить это слово на все слова. Тогда отрыв поиска по хешу был бы выше.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Чт май 10, 2018 20:15 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Hishnik писал(а):
Victor__v писал(а):
Факт простой, что компиляция исходников длится меньше секунды.
Ну, а если файлов много? И у них сложные взаимоотношения? Я сейчас сильно утрирую, разумеется.

Вот поэтому и вопрос о целях, задачах и назначении форт-системы. Назначение - компилировать огромные исходники?


Как вариант. Я вообще исхожу из того, что не знаю какой маразматичности и сложности проект будет в будущем.
Поэтому и стараюсь проводить ревизию по всем найденным фронтам.
Трансляция только один из них. Только один! Для меня кстати не краеугольный камень наступления.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Пт май 11, 2018 01:34 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Victor__v писал(а):
Nova
1641264836 \ время начала замера
1641269036 \ время окончания

Разность составляет 4200. Видимо, это такты процессора. Длительность работы глазу незаметна. Более того, время чтения этого файла будет больше, даже с SSD.
Victor__v писал(а):
Как вариант. Я вообще исхожу из того, что не знаю какой маразматичности и сложности проект будет в будущем.
Поэтому и стараюсь проводить ревизию по всем найденным фронтам.
Трансляция только один из них. Только один! Для меня кстати не краеугольный камень наступления.

При таком варианте существует риск потратить слишком много времени на малозначимые задачи, и "выгореть".


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Пт май 11, 2018 20:48 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Hishnik писал(а):
время чтения этого файла будет больше, даже с SSD.

С этим никто не спорит. АПИ в расчёт не брался. Только SFIND'ы
Hishnik писал(а):
При таком варианте существует риск потратить слишком много времени на малозначимые задачи, и "выгореть".

Горю уже год. Может, огнеупорный :)

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Пт май 11, 2018 20:53 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
О! Вспомнил зачем вообще начал ускорять поиск в словаре и пр.
У меня же цепочка трансляции не заканчивается на слове SFIND у меня далее идёт поиск в таблице предкомпиляции. А там поиск записи и по одиночным значениям и по нахождению XT в множестве. А потом вызов обработчиков всех этих записей.
Вот и ускорял, дабы компиляция была чуть быстрее. Так сказать, немного скомпенсировать.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Сб май 12, 2018 20:22 
Не в сети
Moderator
Moderator
Аватара пользователя

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

можно пояснить о чем речь?

_KROL писал(а):
> Преобразование данных

тоже не ясно

_KROL писал(а):
> Работа с хэндлами (или может это обьеденить с "работой с памятью"?)

тоже не ясно

_KROL писал(а):
> Связь ШК и нативного кода (НК), если такой имеется

а это что значит?

_KROL писал(а):
Очень хочу единый парсер обработки как ввода, так и вывода (не люблю я < # #s >)

причем тут "парсер вывода"- это вообще как? и чем вам не нравятся <# # #S #> и прочие?
Может лучше научиться ими пользоваться?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Сб май 12, 2018 22:04 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
причем тут "парсер вывода"- это вообще как? и чем вам не нравятся <# # #S #> и прочие?
Может лучше научиться ими пользоваться?

Печать с использованием фиксированного имени PAD по заранее определенному алгоритму - очевидная "затычка". Если когда-то так было сделано, это не значит, что такой способ преобразования числа в строку для печати единственно возможный. Я уже не говорю о том, что для спецсимволов можно найти и более разумное применение в прикладной программе. А уж "учить" частное решение ранних стадий развития Форта вовсе ни к чему.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Сб май 12, 2018 23:14 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Hishnik писал(а):
mOleg писал(а):
причем тут "парсер вывода"- это вообще как? и чем вам не нравятся <# # #S #> и прочие?
Может лучше научиться ими пользоваться?

Печать с использованием фиксированного имени PAD по заранее определенному алгоритму - очевидная "затычка". Если когда-то так было сделано, это не значит, что такой способ преобразования числа в строку для печати единственно возможный. Я уже не говорю о том, что для спецсимволов можно найти и более разумное применение в прикладной программе. А уж "учить" частное решение ранних стадий развития Форта вовсе ни к чему.

Плюсую)

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Сб май 12, 2018 23:27 
Не в сети
Moderator
Moderator
Аватара пользователя

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

Хорошо, предложи альтернативу.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Вс май 13, 2018 00:03 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
mOleg писал(а):
Hishnik писал(а):
Печать с использованием фиксированного имени PAD по заранее определенному алгоритму - очевидная "затычка".

Хорошо, предложи альтернативу.


Так можно на ходу создавать буфер, к примеру, на стеке и копаться уже там.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Вс май 13, 2018 02:34 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Да, можно буфер на стеке, а при наличии высокоуровневого языка, на котором пишется Форт, можно пользоваться его библиотеками. Если речь об ассемблере, то там можно и низкоуровневый вариант написать.
А вообще ведь и преобразование "с конца" (взятием остатка от деления) является причиной появления PAD. Если взять за основу алгоритм, который получает цифры, начиная со старшего разряда, то их можно сразу печатать и нигде не хранить. Тогда преобразование числа в строковую переменную можно оформить как "EMIT в память".


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Вс май 13, 2018 09:04 
Не в сети
Moderator
Moderator
Аватара пользователя

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

бред.
Что от этого поменяется? Будут те же <# #S #> а!? Просто менее привычные в использовании...
Это не альтернатива, а паллиатив.

Hishnik писал(а):
Да, можно буфер на стеке, а при наличии высокоуровневого языка, на котором пишется Форт, можно пользоваться его библиотеками. Если речь об ассемблере, то там можно и низкоуровневый вариант написать.

опять паллиатив же.

Hishnik писал(а):
А вообще ведь и преобразование "с конца" (взятием остатка от деления) является причиной появления PAD.

Использовать рекурсивные алгоритмы? А оно надо?
Ведь память так или иначе придется использовать для хранения.
Неужели, это единственная причина по которой не нравится механизм форматного преобразования в форте?
Вот, не помню, какие требования к PAD в стандарте (мы же на стандарт смотрим свысока и вообще побоку его),
но по факту, никто не мешает располагать буфер где-угодно, и, более того, обзывать его как угодно, т.к.
напрямую с ним никто не работает (лишь через прокладки: <# #S #> и так далее, скажем, я пошел чуть дальше и сделал
несколько другой набор завершающих и открывающих скобок, да еще ввел один буфер в придачу, в итоге вышли:
{# #} <| KEEP KEEPS |> ... )
причем, я так понимаю, что все забыли о: (d.) (n.) (h.) и т.п.,
сразу возвращающие результат преобразования в виде строки со счетчиком.

Hishnik писал(а):
Если взять за основу алгоритм, который получает цифры, начиная со старшего разряда, то их можно сразу печатать и нигде не хранить. Тогда преобразование числа в строковую переменную можно оформить как "EMIT в память".

И вот, хочется увидеть и алгоритм, и интерфейс, и хотя бы набросок реализации 8)

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-систему без ошибок?
СообщениеДобавлено: Вс май 13, 2018 16:40 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
Использовать рекурсивные алгоритмы? А оно надо?
Ведь память так или иначе придется использовать для хранения.
Неужели, это единственная причина по которой не нравится механизм форматного преобразования в форте?
Вот, не помню, какие требования к PAD в стандарте (мы же на стандарт смотрим свысока и вообще побоку его),
но по факту, никто не мешает располагать буфер где-угодно, и, более того, обзывать его как угодно, т.к.

В кварке я именно где угодно его и расположил. Никаких PAD <# # там в принципе нет на уровне Форта, хотя все сопутствующее есть в коде. Доступа к буферу через словарь нет.

mOleg писал(а):
сразу возвращающие результат преобразования в виде строки со счетчиком.

Строку со счетчиком можно забыть вместе с Турбо Паскалем.

mOleg писал(а):
И вот, хочется увидеть и алгоритм, и интерфейс, и хотя бы набросок реализации 8)

Что именно посмотреть? Как переопределять EMIT, чтобы он выводил символы в заданный буфер? А алгоритмов преобразования числа в строку - целый Интернет. Речь изначально шла о том, что в Форте многовато внутренних механизмов вынесено программисту под предлогом "чтоб не забывал, с каким языком имеет дело". Поэтому утверждения о том, что Форт определяет какие-то специальные правила работы с известными и устоявшимися вещами работают только в минус Форту. Чего стоят только скобки в виде комментариев (чтобы программисты затвердили, что в Форте - постфикс?), фиксированная точка вместо плавающей ("Мур сказал, что плавающая не нужна") и строка со счетчиком (все WinAPI использует ASCIIZ). Это еще сопровождается специфичной острой реакцией апологетов "элитарного Форта". Соответственно, надо поворачиваться лицом к актуальным задачам, если уж вообще есть необходимость что-то полезное писать, а не просто гордиться наедине с собой причастностью к элитарным технологиям.


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

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


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

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


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

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