Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт окт 06, 2026 15:36

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 219 ]  На страницу 1, 2, 3, 4, 5 ... 15  След.
Автор Сообщение
 Заголовок сообщения: Nova Дневник разработчика
СообщениеДобавлено: Пт мар 01, 2019 23:12 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1381
Благодарил (а): 4 раз.
Поблагодарили: 20 раз.
Прежде всего надо определиться с концепцией использования форта.
В Нове в силу исторических причин :) появилась концепция: "всё что нужно в основном словаре, всё вспомогательное во временных словарях, и после удаляется".
Такой подход вспомогательности привёл к нынешней в Нове архитектуре построения словаря.
Именно по этой причине изначально каждый словарь может иметь свой обработчик нераспознанных строк. А с недавнего времени и обработчик компиляции определений.
Пример последнего можно посмотреть в библиотеке поддержки лок. переменных (~er/locals/r-local.f)

Но сам подход предполагающий кучу вспомогательных словарей может сильно замедлить поиск. Естественно, из-за большего времени поиска слов.
Чтобы компенсировать это, поиск ведётся не по строке, а хешу от этой строки. В ходе философских бесед с mOleg я пришёл к выводу, что для ускорения трансляции неплохо подойдёт поиск по 4-м цепочкам, а не по 1-й.
Почему 4, а не 8 или 16?
Причина больше в целесообразности. Если цепочек 4, то на 100 слов в каждой в каждой цепочке будет 25. Но во всех вспом. словарях кол-во слов редко когда превышает 100. Если же цепочек будет больше, то некоторые из них будут пустовать. Можно, конечно, добить и более равномерного распределения, но тогда придётся переписывать слово для нахождения номера цепочки от хеша.
Сейчас код такой:
Код:
: VOC-TH 3 AND ; \ в ядре реализовано на ассемблере

Быстро, дёшево и сердито.
Поэтому 4 цепочки, по моему скромному мнению, оптимальный вариант.
В итоге скорость поиска выросла значительно, если считать в тактах :)

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

И раз коснулись портируемости, то поговорим и о ней.
Вначале в Нове использовался стековый манипулятор как а-ля высокоуровневый ассемблер, благо он им и был.
Использовался он для быстрого набора определений. Так на нём было написано слово COMPARE .
Помимо этого стековый манипулятор является неплохим DSL для написания участка кода, который будет использован 1 раз и сложновыражаем на форте.
К примеру в одном месте используется код для замены в строке всех символов, которые равны n на символ m
Соотно, входные параметры n m addr u
Вот что вышло на манипуляторе: 3/B1&3..?(1&2..<)1i0dU
А теперь распишите это на форте.

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

Как показывает скромная статистика в Нове с каждым обновлением количество слов становится всё меньше. Убираются в основном редкоиспользуемые слова, да и те переменные, которые на прямую использовать не нужно и/или не рекомендуется.
При этом переменные "остаются" в ядре, но не явно. Они существуют в словах, которые их используют.
Эти переменные де-юре и константы де-факто можно либо заменить, либо подменить на время. Хотя и синтаксиса для этого не предусмотрено, ибо требовалось аж 0 раз.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Nova Дневник разработчика
СообщениеДобавлено: Сб мар 02, 2019 01:33 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2238
Благодарил (а): 9 раз.
Поблагодарили: 76 раз.
Victor__v писал(а):
Как показывает скромная статистика в Нове с каждым обновлением количество слов становится всё меньше. Убираются в основном редкоиспользуемые слова, да и те переменные, которые на прямую использовать не нужно и/или не рекомендуется.

Сравнение, наверное, не в пользу GForth manual :)

P.S. Заметил, что в сети много ресурсов изучения языков online (тестирования кода в веб-фреймворке)
и в качестве Форта прикручивают GForth 0.7.3, но при этом функционал терминальной консоли не полный
и не отрабатывает как слово PAGE так и команды управления курсором консоли и запуск того же банального консольного тетриса tt.fs из внутренностей GForth приводит к выводу Escape-последовательностей в диалоговое окно,
хотя штатный Бенчмарк от VFX Forth отрабатывается, но с прохождение ANSI 94 Forth теста похоже (из-за консоли) возникают проблемы.
А так, в online сессии запуска Форт кода можно запустить, наверное, разный Форт-скрипт. (какой нибудь майнер :)


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 8215
Благодарил (а): 30 раз.
Поблагодарили: 148 раз.
Victor__v писал(а):
Прежде всего надо определиться с концепцией использования форта.

Ну а где же ниже приведена концепция? Концепция системы - термин из ГОСТ 34-й группы, там можно посмотреть, что это такое и какие должны быть рассуждения на эту тему. Собственно, из-за пропуска этой стадии в нужном виде дальше получается масса чрезмерно детализированных частностей.

Victor__v писал(а):
концепция: "всё что нужно в основном словаре, всё вспомогательное во временных словарях, и после удаляется".

Это и близко не тянет на концепцию. Это просто техническое решение, которое то ли корректно, то ли нет... а понять это можно, посмотрев как раз на концепцию системы. Какую задачу решает такой подход? Экономия памяти? Улучшение читаемости исходных текстов? Может быть, что-то еще? В зависимости от решаемой задачи (а набор решаемых задач служит достижению цели, определяемой в концепции) имеет смысл оценивать и принятые технические решения. Может быть, это прорыв, а может, временная затычка, сразу-то непонятно.

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

"Сильно" - это насколько? И относительно чего? И как это повлияет на потребительскую привлекательность программ?

Victor__v писал(а):
Но во всех вспом. словарях кол-во слов редко когда превышает 100.

Почему? Откуда такая статистика?

Victor__v писал(а):
Вот что вышло на манипуляторе: 3/B1&3..?(1&2..<)1i0dU
А теперь распишите это на форте.

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

Victor__v писал(а):
Но ассемблерность манипулятора мешает его портируемости.

Зато ухудшается производительность? :) А теперь смотрим выше - зачем было улучшать производительность, чтобы тут же ухудшить в другом месте? Какие приоритеты установлены для продукта? Какие граничные условия (т.е., например, "этот Форт должен быть достаточно быстрым, чтобы анализировать видео в реальном времени" - тогда при падении производительности ниже требуемого уровня какой-то прием отменяется).

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


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

Заре