Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб июн 23, 2018 13:52

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Перемещаемость кода.
СообщениеДобавлено: Пн янв 05, 2009 15:01 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Возник следующий вопрос. Нужна ли Форту перемещаемость кода?
То есть возможность в любой момент раздвинуть часть "кодофайла" и вставить в него нечто или же, наоборот, вынуть лишнее и сдвинуть оставшееся, чтобы в коде не оставалось дыр.

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

п.с. для тех, кто плохо относится к слову "кодофайл" - попробуйте привести его к своему пониманию.
Предложите свое название для блока кода и данных, который сохраняется в файле как Форт-система.
Для меня оно просто "очевидно".

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4920
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
WingLion писал(а):
Возник следующий вопрос. Нужна ли Форту перемещаемость кода?

конечно!
но это зависит от типа платформы, типа ШК, других особенностей.

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

нет, эта возможность очень полезна при подключении бинарного кода к системе. Можно заранее откомпилировать библиотечки, и пользоваться ими, как dll, к примеру. Впрочем, применений можно найти много.

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

этот самый алгоритм перемещения вообще не обязателен. Много зависит от типа ШК и используемой модели памяти.

WingLion писал(а):
п.с. для тех, кто плохо относится к слову "кодофайл" - попробуйте привести его к своему пониманию.
Предложите свое название для блока кода и данных, который сохраняется в файле как Форт-система.
Для меня оно просто "очевидно".

адресное пространство данных и кода (они могут быть разнесены), и может быть, к примеру, еще пространство имен.

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6332
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
Думается, перемещение кода сильно отдельная часть, даже скорее утилита, чем элемент расширений, а тем более ядра. При встроенном компиляторе всегда есть возможность перетранслировать всю систему за разумное время и автоматически.
WingLion писал(а):
п.с. для тех, кто плохо относится к слову "кодофайл" - попробуйте привести его к своему пониманию.
Предложите свое название для блока кода и данных, который сохраняется в файле как Форт-система.
Для меня оно просто "очевидно".

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


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Хищник писал(а):
При встроенном компиляторе всегда есть возможность перетранслировать всю систему за разумное время и автоматически.

В том числе и "забыть" часть образа памяти системы восстановлением указателей (используя MARKER ) и перекомпилировать заново...

_________________
With best wishes, in4.


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Хищник писал(а):
Думается, перемещение кода сильно отдельная часть, даже скорее утилита, чем элемент расширений, а тем более ядра. При встроенном компиляторе всегда есть возможность перетранслировать всю систему за разумное время и автоматически.


Однако, если в исходнике встречается N неких "удалений из середины", то перетрансляций может оказаться до N! (N факториал) вместо N простых перемещений.
Код:
компилируем код АА
...
..
.
ой-а-мы-оказывается-на-луне, надо код AA удалить - перекомпиляция
и добавить в то вместо код BB - перекомпиляция
...
..
.
О-а-луна-то-не-настоящая--симулятор, вертать-все-взад! - перекомпиляция
...
..
.
Упс... симулятор-то-на-венере, опять-25! - перекомпиляция
чОрД-венера-не-русская:( - перекомпиляция


И будет оно компилировать-компилировать-компилировать кучу комбинаций, пока нужная не получится. Автомат же!

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6332
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
WingLion писал(а):
Однако, если в исходнике встречается N неких "удалений из середины", то перетрансляций может оказаться до N! (N факториал) вместо N простых перемещений.

А зачем же? Удаляем все, подбираем нужный список загрузок, и перетранслируем один раз.


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Хищник писал(а):
А зачем же? Удаляем все, подбираем нужный список загрузок, и перетранслируем один раз.


A если этот список просто неизвестен сначала компиляции?
Например, надо откомпилировать кусок кода, отработать с его помощью выяснить некий параметр аппаратуры/программы и после этого компилировать заново.
А знать все заранее - нереально.
Может, пример, в чем-то и надуман, но, имхо, вполне вероятен.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6332
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
Простых вариантов 2
1) Оставить уже загруженный код
2) Все-таки откатить назад состояние и загрузить другой

Потому что перемещение видится опасным из-за возможного наличия "форт-хаков", которыми на деле могут стать некоторые конструкции, неучтенные алгоритмами перемещения. Ведь надо понять, что в системе ссылается на перемещаемый код, и каким образом надо изменить ссылки. Теперь сакраментальный вопрос: а что из скомпилированного является ссылкой на убиваемый/перемещаемый адрес? И главное, как надежно отличить ссылки от не-ссылок, причем с учетом всех возможных CREATEd слов?


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
(глубокий вздох) значит, придется таки отставить эту идею в сторону, оставив для тех случаев, когда хаки идут лесом, а все ссылки учитываются через таблицу ссылок, строящуюся в процессе компиляции.
Во всяком случае, на ZX-Spectrum - такое прокатывало, и в небезызвестные перемещаемые GENS4-MONS4 я для себя вставлял куски перемещаемого кода.
Тем более, когда ШК сам по себе является структурой, несущей в себе таблицы ссылок.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4920
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
эхехех. Зависит от модели памяти и от кучи других вещей простота перемещаемости.
Ну, вот, к примеру, в СПФ все переходы внутри слов относительные, это значит что править их не придется при любом расположении кода.
Остаются только внешние ссылки, которые компилируются словами COMPILE, и возможно BRANCH, .
Эти слова можно перехватить, и для каждого случая делать адресную ссылку в специальной таблице адресов, пришитой к коду.
Правка будет заключаться в корректировании всех адресов, входящих в эту таблицу (получаем классический dll).
Но есть и другие варианты

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6332
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
mOleg писал(а):
Эти слова можно перехватить, и для каждого случая делать адресную ссылку в специальной таблице адресов, пришитой к коду.
Правка будет заключаться в корректировании всех адресов, входящих в эту таблицу (получаем классический dll).
Но есть и другие варианты

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


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4920
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
Хищник писал(а):
mOleg писал(а):Эти слова можно перехватить, и для каждого случая делать адресную ссылку в специальной таблице адресов, пришитой к коду.
Правка будет заключаться в корректировании всех адресов, входящих в эту таблицу (получаем классический dll).
Но есть и другие варианты
То есть и получается, что код генерировать можно только с оглядкой, пытаясь вычитать в документации, в какие еще таблицы мы не занесли информацию о себе.

а не пошел бы Хищник посмотреть SMAL32 :)
потому как там это дело реализовано, и никаких напрягов из-за этого не возникает (если их себе не придумывать).

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6332
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
mOleg писал(а):
а не пошел бы Хищник посмотреть SMAL32

Шо, опять? :)) И смотреть, надо полагать, до просветления? :))
mOleg писал(а):
потому как там это дело реализовано, и никаких напрягов из-за этого не возникает (если их себе не придумывать).

Конечно, какие могут быть напряги? Просто пиши как разрешили, и дело с концом.


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Смысла выкусывания кода из середины я не вижу, а вот перемещение кодофайла по любому адресу в полне, но тогда переход будет рассчитайсь по смещению. Кстати в таком случае кодофайл будет себя хорошим образом чуствовать в куче.

_________________
Меня нет, не будет и не было.


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Трудности есть при перемещении... :( Если интенсивно используется интерпретация - для получения адресов слов - и оптимизация - непосредственная загрузка констант - адресов кода (mov ax, offset myWord), то перемещение затрудняется... :(
Столкнулся с таким при создании самокомпилирующегося компилятора - старался принимать более "высокоуровневые" решения, без "магических констант" и вставки байтов машинного кода через C, ...

_________________
With best wishes, in4.


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

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


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

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


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

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