Forth http://fforum.winglion.ru/ |
|
Перемещаемость кода. http://fforum.winglion.ru/viewtopic.php?f=36&t=1852 |
Страница 1 из 2 |
Автор: | WingLion [ Пн янв 05, 2009 15:01 ] |
Заголовок сообщения: | Перемещаемость кода. |
Возник следующий вопрос. Нужна ли Форту перемещаемость кода? То есть возможность в любой момент раздвинуть часть "кодофайла" и вставить в него нечто или же, наоборот, вынуть лишнее и сдвинуть оставшееся, чтобы в коде не оставалось дыр. Процедуры, которые проводят подобное, очевидно, должны быть независимы от самого форта, ибо кодофайл по сути является жесткой структурой перекрестных ссылок, которая перестанет работать в момент, как только в ней будут начаты изменения до тех пор, пока они не будут закончены. Правильность изменений, разумеется, должна гарантироваться алгоритмом перемещения. п.с. для тех, кто плохо относится к слову "кодофайл" - попробуйте привести его к своему пониманию. Предложите свое название для блока кода и данных, который сохраняется в файле как Форт-система. Для меня оно просто "очевидно". |
Автор: | mOleg [ Пн янв 05, 2009 17:30 ] |
Заголовок сообщения: | |
WingLion писал(а): Возник следующий вопрос. Нужна ли Форту перемещаемость кода? конечно! но это зависит от типа платформы, типа ШК, других особенностей. WingLion писал(а): То есть возможность в любой момент раздвинуть часть "кодофайла" и вставить в него нечто или же, наоборот, вынуть лишнее и сдвинуть оставшееся, чтобы в коде не оставалось дыр. нет, эта возможность очень полезна при подключении бинарного кода к системе. Можно заранее откомпилировать библиотечки, и пользоваться ими, как dll, к примеру. Впрочем, применений можно найти много. WingLion писал(а): Процедуры, которые проводят подобное, очевидно, должны быть независимы от самого форта, ибо кодофайл по сути является жесткой структурой перекрестных ссылок, которая перестанет работать в момент, как только в ней будут начаты изменения до тех пор, пока они не будут закончены. Правильность изменений, разумеется, должна гарантироваться алгоритмом перемещения. этот самый алгоритм перемещения вообще не обязателен. Много зависит от типа ШК и используемой модели памяти. WingLion писал(а): п.с. для тех, кто плохо относится к слову "кодофайл" - попробуйте привести его к своему пониманию.
Предложите свое название для блока кода и данных, который сохраняется в файле как Форт-система. Для меня оно просто "очевидно". адресное пространство данных и кода (они могут быть разнесены), и может быть, к примеру, еще пространство имен. |
Автор: | Hishnik [ Пн янв 05, 2009 17:37 ] |
Заголовок сообщения: | |
Думается, перемещение кода сильно отдельная часть, даже скорее утилита, чем элемент расширений, а тем более ядра. При встроенном компиляторе всегда есть возможность перетранслировать всю систему за разумное время и автоматически. WingLion писал(а): п.с. для тех, кто плохо относится к слову "кодофайл" - попробуйте привести его к своему пониманию.
Предложите свое название для блока кода и данных, который сохраняется в файле как Форт-система. Для меня оно просто "очевидно". Есть термины "образ памяти" (image), программные секции. "Кодофайл" - это как морская свинка. Не морская, и не свинка. Потому что кодом форт-система не ограничивается, есть еще стек и данные (а то и куча), и как с файлом с этой областью памяти тоже не работают. |
Автор: | in4 [ Вт янв 06, 2009 05:12 ] |
Заголовок сообщения: | |
Хищник писал(а): При встроенном компиляторе всегда есть возможность перетранслировать всю систему за разумное время и автоматически.
В том числе и "забыть" часть образа памяти системы восстановлением указателей (используя MARKER ) и перекомпилировать заново... |
Автор: | WingLion [ Вт янв 06, 2009 09:35 ] |
Заголовок сообщения: | |
Хищник писал(а): Думается, перемещение кода сильно отдельная часть, даже скорее утилита, чем элемент расширений, а тем более ядра. При встроенном компиляторе всегда есть возможность перетранслировать всю систему за разумное время и автоматически.
Однако, если в исходнике встречается N неких "удалений из середины", то перетрансляций может оказаться до N! (N факториал) вместо N простых перемещений. Код: компилируем код АА
... .. . ой-а-мы-оказывается-на-луне, надо код AA удалить - перекомпиляция и добавить в то вместо код BB - перекомпиляция ... .. . О-а-луна-то-не-настоящая--симулятор, вертать-все-взад! - перекомпиляция ... .. . Упс... симулятор-то-на-венере, опять-25! - перекомпиляция чОрД-венера-не-русская:( - перекомпиляция И будет оно компилировать-компилировать-компилировать кучу комбинаций, пока нужная не получится. Автомат же! |
Автор: | Hishnik [ Вт янв 06, 2009 15:25 ] |
Заголовок сообщения: | |
WingLion писал(а): Однако, если в исходнике встречается N неких "удалений из середины", то перетрансляций может оказаться до N! (N факториал) вместо N простых перемещений.
А зачем же? Удаляем все, подбираем нужный список загрузок, и перетранслируем один раз. |
Автор: | WingLion [ Вт янв 06, 2009 15:37 ] |
Заголовок сообщения: | |
Хищник писал(а): А зачем же? Удаляем все, подбираем нужный список загрузок, и перетранслируем один раз.
A если этот список просто неизвестен сначала компиляции? Например, надо откомпилировать кусок кода, отработать с его помощью выяснить некий параметр аппаратуры/программы и после этого компилировать заново. А знать все заранее - нереально. Может, пример, в чем-то и надуман, но, имхо, вполне вероятен. |
Автор: | Hishnik [ Вт янв 06, 2009 15:48 ] |
Заголовок сообщения: | |
Простых вариантов 2 1) Оставить уже загруженный код 2) Все-таки откатить назад состояние и загрузить другой Потому что перемещение видится опасным из-за возможного наличия "форт-хаков", которыми на деле могут стать некоторые конструкции, неучтенные алгоритмами перемещения. Ведь надо понять, что в системе ссылается на перемещаемый код, и каким образом надо изменить ссылки. Теперь сакраментальный вопрос: а что из скомпилированного является ссылкой на убиваемый/перемещаемый адрес? И главное, как надежно отличить ссылки от не-ссылок, причем с учетом всех возможных CREATEd слов? |
Автор: | WingLion [ Вт янв 06, 2009 17:25 ] |
Заголовок сообщения: | |
(глубокий вздох) значит, придется таки отставить эту идею в сторону, оставив для тех случаев, когда хаки идут лесом, а все ссылки учитываются через таблицу ссылок, строящуюся в процессе компиляции. Во всяком случае, на ZX-Spectrum - такое прокатывало, и в небезызвестные перемещаемые GENS4-MONS4 я для себя вставлял куски перемещаемого кода. Тем более, когда ШК сам по себе является структурой, несущей в себе таблицы ссылок. |
Автор: | mOleg [ Вт янв 06, 2009 20:17 ] |
Заголовок сообщения: | |
эхехех. Зависит от модели памяти и от кучи других вещей простота перемещаемости. Ну, вот, к примеру, в СПФ все переходы внутри слов относительные, это значит что править их не придется при любом расположении кода. Остаются только внешние ссылки, которые компилируются словами COMPILE, и возможно BRANCH, . Эти слова можно перехватить, и для каждого случая делать адресную ссылку в специальной таблице адресов, пришитой к коду. Правка будет заключаться в корректировании всех адресов, входящих в эту таблицу (получаем классический dll). Но есть и другие варианты |
Автор: | Hishnik [ Ср янв 07, 2009 22:49 ] |
Заголовок сообщения: | |
mOleg писал(а): Эти слова можно перехватить, и для каждого случая делать адресную ссылку в специальной таблице адресов, пришитой к коду.
Правка будет заключаться в корректировании всех адресов, входящих в эту таблицу (получаем классический dll). Но есть и другие варианты То есть и получается, что код генерировать можно только с оглядкой, пытаясь вычитать в документации, в какие еще таблицы мы не занесли информацию о себе. |
Автор: | mOleg [ Ср янв 07, 2009 23:18 ] |
Заголовок сообщения: | |
Хищник писал(а): mOleg писал(а):Эти слова можно перехватить, и для каждого случая делать адресную ссылку в специальной таблице адресов, пришитой к коду.
Правка будет заключаться в корректировании всех адресов, входящих в эту таблицу (получаем классический dll). Но есть и другие варианты То есть и получается, что код генерировать можно только с оглядкой, пытаясь вычитать в документации, в какие еще таблицы мы не занесли информацию о себе. а не пошел бы Хищник посмотреть SMAL32 потому как там это дело реализовано, и никаких напрягов из-за этого не возникает (если их себе не придумывать). |
Автор: | Hishnik [ Ср янв 07, 2009 23:26 ] |
Заголовок сообщения: | |
mOleg писал(а): а не пошел бы Хищник посмотреть SMAL32 Шо, опять? И смотреть, надо полагать, до просветления? mOleg писал(а): потому как там это дело реализовано, и никаких напрягов из-за этого не возникает (если их себе не придумывать).
Конечно, какие могут быть напряги? Просто пиши как разрешили, и дело с концом. |
Автор: | Pretorian [ Пт янв 30, 2009 18:46 ] |
Заголовок сообщения: | |
Смысла выкусывания кода из середины я не вижу, а вот перемещение кодофайла по любому адресу в полне, но тогда переход будет рассчитайсь по смещению. Кстати в таком случае кодофайл будет себя хорошим образом чуствовать в куче. |
Автор: | in4 [ Сб янв 31, 2009 17:50 ] |
Заголовок сообщения: | |
Трудности есть при перемещении... Если интенсивно используется интерпретация - для получения адресов слов - и оптимизация - непосредственная загрузка констант - адресов кода (mov ax, offset myWord), то перемещение затрудняется... Столкнулся с таким при создании самокомпилирующегося компилятора - старался принимать более "высокоуровневые" решения, без "магических констант" и вставки байтов машинного кода через C, ... |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |