Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт дек 01, 2020 12:10

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Nova Дневник разработчика
Автор Сообщение
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
В настоящий момент пишу уже 3-й вариант реализации ООП
С каждым разом код все проще и понятней и, как следствие, его проще модифицировать.

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

Сделал создание кода инициализатора с 2 дополнительными точками входа. Теперь можно создать свой префикс (по умолчанию ALLOC-), или полностью свои имя для инициализации объекта.
Сообщение Добавлено: Пт окт 16, 2020 15:37
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
mOleg писал(а):
Для вызова кода из временных словарей используй отдельный вариант (8 байт)


Отдельный вариант будет использоваться, если расстояние между кодом и местом вызова больше/меньше 0x80000000

В большинстве случаев это как раз будет вызов слова из основного пространства кода во врем. словарь.

mOleg писал(а):
А вопрос был по поводу кода в хипе, ты его собираешься сохранять? Если да, то как?

А зачем его сохранять?
Оверлеи мне особо и не пригодились.
Можно конечно заморочиться созданием релокаций, но нафига?

Обычно нет необходимости сохранять временные словари) Они же временные, ака плагины для форта)
Сообщение Добавлено: Вс сен 27, 2020 21:35
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Для вызова кода из временных словарей используй отдельный вариант (8 байт)

А вопрос был по поводу кода в хипе, ты его собираешься сохранять? Если да, то как?
Сообщение Добавлено: Вс сен 27, 2020 19:31
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Не понял сути вопроса.
Переведите свою мысль на язык простых смертных)
Сообщение Добавлено: Пт сен 25, 2020 21:44
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Victor__v писал(а):
временные словари

ну и вызывай их длинными переходами
кстати, а как собираешься вызывать такой код? И, главное, как его сохранять?(или не предполагается сохранять?)
Сообщение Добавлено: Пт сен 25, 2020 17:56
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
mOleg писал(а):
Покажи для начала программу, где длинные переходы будут оправданы.
Размер бинарника даже в гигабайт выглядит чудовищным


Всего 2 слова: временные словари.

Неизвестно По какому адресу ОС выделит для них память.
Ну и, естественно, может возникнуть ситуация, когда нужно создать код просто в хипе.
Сообщение Добавлено: Чт сен 24, 2020 12:32
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Покажи для начала программу, где длинные переходы будут оправданы.
Размер бинарника даже в гигабайт выглядит чудовищным
Сообщение Добавлено: Чт сен 24, 2020 10:31
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
mOleg писал(а):
переходы внутри одного определения - короткие,
между определениями - длинные.
имхо

Эм?

"короткие" 4 байта
"длинные" 8 байт.

Речь не о том, какие переходы лучше, а как дальновиднее будет обойти ограничения архитектуры x86 касательно длин переходов
Сообщение Добавлено: Ср сен 23, 2020 22:40
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
переходы внутри одного определения - короткие,
между определениями - длинные.
имхо
Сообщение Добавлено: Ср сен 23, 2020 19:18
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
начал портировать под 64 бита среднеуровневые слова форта ( в основном те, которые компилируют нативный код).

Скажем так, слово RECOMPILE получилось переусложненным.

Итак рассмотрим возможные состояния для перекомпиляции:
новый код недалеко от места, куда его надо засунуть ( т. е. расстояние 0x80000000)
- все просто делаем как в 32-битной версии.

новый код далеко от места, куда его надо всунуть, а в месте использован длинный вызов кода.
- просто переписываем длинный вызов.

новый код далеко от места, куда его надо всунуть, а в месте использован обычный вызов кода.
- а вот тут я хрен знает. Впихнуть невпихуемое оч. проблематично (обычный вызов 5 байт, длинный 12). Пока поставил исключение на случай появления такой ситуевины.

И вот как её разрешить?
Поскольку все мы помним закон Мерфи? Если хрень может случиться, то она обязательно случится. :weep;

Можно конечно поступить с фортевской решительностью - сделать так, чтобы все вызовы имели формат длинного вызова.
т. е.

Код:
MOV RBX, code
CALL RBX
Сообщение Добавлено: Ср сен 23, 2020 18:45
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Как упростить Нову.

Может попробовать хранить указатели на пространства данных в TIB?

Код доступа к адресу тогда в нативе будет
что-то вроде
FS: MOV EAX, [100]
LEA EAX, [20+EAX]

Достоинства:
Расширяемость и упрощение - можно будет упростить механизм для контроля пересечения пространств данных.

Однако всплывает недостаток в другом месте - у временных словарей данных хранятся отдельно, что логично. И как тогда указатели на них хранить в FS (GS)?

Самый очевидный (относительно) способ решить проблему - оставить реализацию в врем. словарей как есть, а данные основного пространства в TIB?

Но это усложнит контроль корректности указателей (придется добавить ветвления, что может подвести (обжигались уже)).

Вот такие вот заметки на полях
Сообщение Добавлено: Пт сен 18, 2020 11:37
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
И снова по поводу потоков.

У меня сейчас в форте доступность пользовательских переменных в каллбеке реализована через сохранение указателя
в области TIB, что в винде.
Недостаток такого выкрутаса - портируемость.
Если переводить Нову на другую ОС, то этот код надо будет менять, да и 64 разрядом та же фигня.

Поэтому решил реализовать эту поддержку непосредственно средствами форта, не полагаясь на малодокументированные свойства Винды и архитектуры процессора.

Решил поступить просто:
Завести переменную, в которую все потоки будут вписывать указатели на свои пользовательские области.
Калбеку соответственно для доступа к юзверям надо будет узнать идентификатор потока, в котором он выполняется, и запросить указатель на юзверей.

Делов-то 3 слова написать: TLS-SAVE TLS-RESTORE TLS-DELETE ну и переменная, где хранятся все айдишки с указателями.

Сложности:
Поскольку код предполагает потенциальный доступ множества потоков к одному и тому же массиву, логичным будет ввести блокировку массива потоком. Так сказать, сделать двоичный семафор.
Благо, у меня была небольшая заметка на эту тему
Сообщение Добавлено: Пн авг 10, 2020 15:25
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Недавно выяснил, что у меня в потоках вылетает форт-система из-за WINAPI-оберток.

Воспользовавшись методом Чака Нориса (буравить взглядом исходник, пока он не выдаст всю информацию), понял в чем проблема.

У меня код-обертки (winapi-code) при своем вызове самомодифицируется на (stdcall).
Вот только для самомодификации используется переменная DP.

В чем прикол
DP дает указатель, где хранится HERE. Вот только это место у каждого словаря свое,
Код для понятности: : DP CURRENT @ L>hereFA @ ;
Вот.
А при создании потока текущий словарь не прописывается в пользовательской области!
Из-за этого при самомодификации код пытался получить значение переменной по недопустимому адресу!

В итоге поменял код с самомодификацией.
Короче, опять ввел в форт-систему слово RECOMPILE, которое компилирует вызов по адресу со стека данных.
Сообщение Добавлено: Пн авг 03, 2020 12:21
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
f02732 писал(а):
Мне вообще не нравится такой механизм обработки ненайденных слов поиском NOTFOUND в словаре. Чем он лучше простого векторизированноно определения, которое можно в любой момент изменить/восстановить без проблем, + нет лишних заголовков, + не тратится время на поиск одного и того же слова по несколько раз?


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

Цитата:
+ не тратится время на поиск одного и того же слова по несколько раз?

Это в СПФ NOTFOUND каждый раз искался в словаре, в Nova просто прописано в поле, откуда обработчик берётся.
Сообщение Добавлено: Пт дек 27, 2019 02:20
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Victor__v писал(а):
F-MAP писал(а):
NOTFOUND так много забирает времени при сборке... 5-ть 10-ть кило лишнего, сейчас никого не напугают..


Чё ито он много времени забирает? Я несколько не понял, проясните, будьте любезны

Мне вообще не нравится такой механизм обработки ненайденных слов поиском NOTFOUND в словаре. Чем он лучше простого векторизированноно определения, которое можно в любой момент изменить/восстановить без проблем, + нет лишних заголовков, + не тратится время на поиск одного и того же слова по несколько раз?
Сообщение Добавлено: Чт дек 26, 2019 20:50

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


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