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

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

Обзор темы - Перемещаемость кода.
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
in4 писал(а):
Хищник писал(а):
Кстати, как инструмент ускорения повторной компиляции, можно просто загрузить исходные тексты в память и транслировать уже оттуда.
Только это надо стандартизовать как-то...

Это не надо стандартизовать. На стандарт вообще уже навешано очень много лишнего, это же не мантра, от повторения которой все будет появляться само. Чем больше обязательная часть стандарта, тем больше барьер вхождения в системное программирование. Чем больше необязательная, тем больше сужается круг возможного поиска - какой смысл искать новые решения, если "как надо" уже давно высосано из пальца?
Сообщение Добавлено: Вс фев 01, 2009 15:37
  Заголовок сообщения:   Ответить с цитатой
Варнак писал(а):
Было такое определение: " ... - именованный набор данных, расположенный во внешней памяти". А это, всего лишь, всем знакомый "файл".
С большим количеством мелких файлов обычные ОС работают плохо... Да и неудобно с ними возиться стандартными средствами... Надо или редактор, приспособленный для удобной работы со многими файлами, либо все в одном файле хранить. :(
Хищник писал(а):
Кстати, как инструмент ускорения повторной компиляции, можно просто загрузить исходные тексты в память и транслировать уже оттуда.
Только это надо стандартизовать как-то...
Сообщение Добавлено: Вс фев 01, 2009 14:48
  Заголовок сообщения:   Ответить с цитатой
Кстати, как инструмент ускорения повторной компиляции, можно просто загрузить исходные тексты в память и транслировать уже оттуда. Потому что перемещение кода все равно связано с пробегом по всему скомпилированному коду с определением модифицируемого при перемещении, то есть работа тут имеет место. По сравнению с этим главным фактором снижения скорости при повторной трансляции является необходимость заново прочитать все с диска. А вот если все предварительно прочитать в память, то альтернативы будут такими: либо скомпилированный код "править на живую", с риском неправильно обработать какие-то нестандартные фрагменты кода, либо заново оттранслировать "из памяти в память", сохранив все особенности трансляции, в том числе и получая возможность компилировать нестандартные фрагменты кода, о которых алгоритмы перемещения могут не знать.
Сообщение Добавлено: Вс фев 01, 2009 14:00
  Заголовок сообщения:   Ответить с цитатой
in4 писал(а):
А может, не заморачиваться и делать повторную компиляцию вместо перемещения? ;)
Но для этого надо уметь выделять именованные блоки исходника (если он в текстовом файле, это такой предлагаемый мною аналог номеров блоков из "старого" Форта), а этого я еще нигде не видел. :(

Было такое определение: " ... - именованный набор данных, расположенный во внешней памяти". А это, всего лишь, всем знакомый "файл".
Сообщение Добавлено: Вс фев 01, 2009 13:59
  Заголовок сообщения:   Ответить с цитатой
А может, не заморачиваться и делать повторную компиляцию вместо перемещения? ;)
Но для этого надо уметь выделять именованные блоки исходника (если он в текстовом файле, это такой аналог номеров блоков из "старого" Форта), а этого я еще нигде не видел. :(
Сообщение Добавлено: Вс фев 01, 2009 13:50
  Заголовок сообщения:   Ответить с цитатой
Угу, действительно, а как хотелось бы.
Сообщение Добавлено: Сб янв 31, 2009 21:11
  Заголовок сообщения:   Ответить с цитатой
Трудности есть при перемещении... :( Если интенсивно используется интерпретация - для получения адресов слов - и оптимизация - непосредственная загрузка констант - адресов кода (mov ax, offset myWord), то перемещение затрудняется... :(
Столкнулся с таким при создании самокомпилирующегося компилятора - старался принимать более "высокоуровневые" решения, без "магических констант" и вставки байтов машинного кода через C, ...
Сообщение Добавлено: Сб янв 31, 2009 17:50
  Заголовок сообщения:   Ответить с цитатой
Смысла выкусывания кода из середины я не вижу, а вот перемещение кодофайла по любому адресу в полне, но тогда переход будет рассчитайсь по смещению. Кстати в таком случае кодофайл будет себя хорошим образом чуствовать в куче.
Сообщение Добавлено: Пт янв 30, 2009 18:46
  Заголовок сообщения:   Ответить с цитатой
mOleg писал(а):
а не пошел бы Хищник посмотреть SMAL32

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

Конечно, какие могут быть напряги? Просто пиши как разрешили, и дело с концом.
Сообщение Добавлено: Ср янв 07, 2009 23:26
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
mOleg писал(а):Эти слова можно перехватить, и для каждого случая делать адресную ссылку в специальной таблице адресов, пришитой к коду.
Правка будет заключаться в корректировании всех адресов, входящих в эту таблицу (получаем классический dll).
Но есть и другие варианты
То есть и получается, что код генерировать можно только с оглядкой, пытаясь вычитать в документации, в какие еще таблицы мы не занесли информацию о себе.

а не пошел бы Хищник посмотреть SMAL32 :)
потому как там это дело реализовано, и никаких напрягов из-за этого не возникает (если их себе не придумывать).
Сообщение Добавлено: Ср янв 07, 2009 23:18
  Заголовок сообщения:   Ответить с цитатой
mOleg писал(а):
Эти слова можно перехватить, и для каждого случая делать адресную ссылку в специальной таблице адресов, пришитой к коду.
Правка будет заключаться в корректировании всех адресов, входящих в эту таблицу (получаем классический dll).
Но есть и другие варианты

То есть и получается, что код генерировать можно только с оглядкой, пытаясь вычитать в документации, в какие еще таблицы мы не занесли информацию о себе.
Сообщение Добавлено: Ср янв 07, 2009 22:49
  Заголовок сообщения:   Ответить с цитатой
эхехех. Зависит от модели памяти и от кучи других вещей простота перемещаемости.
Ну, вот, к примеру, в СПФ все переходы внутри слов относительные, это значит что править их не придется при любом расположении кода.
Остаются только внешние ссылки, которые компилируются словами COMPILE, и возможно BRANCH, .
Эти слова можно перехватить, и для каждого случая делать адресную ссылку в специальной таблице адресов, пришитой к коду.
Правка будет заключаться в корректировании всех адресов, входящих в эту таблицу (получаем классический dll).
Но есть и другие варианты
Сообщение Добавлено: Вт янв 06, 2009 20:17
  Заголовок сообщения:   Ответить с цитатой
(глубокий вздох) значит, придется таки отставить эту идею в сторону, оставив для тех случаев, когда хаки идут лесом, а все ссылки учитываются через таблицу ссылок, строящуюся в процессе компиляции.
Во всяком случае, на ZX-Spectrum - такое прокатывало, и в небезызвестные перемещаемые GENS4-MONS4 я для себя вставлял куски перемещаемого кода.
Тем более, когда ШК сам по себе является структурой, несущей в себе таблицы ссылок.
Сообщение Добавлено: Вт янв 06, 2009 17:25
  Заголовок сообщения:   Ответить с цитатой
Простых вариантов 2
1) Оставить уже загруженный код
2) Все-таки откатить назад состояние и загрузить другой

Потому что перемещение видится опасным из-за возможного наличия "форт-хаков", которыми на деле могут стать некоторые конструкции, неучтенные алгоритмами перемещения. Ведь надо понять, что в системе ссылается на перемещаемый код, и каким образом надо изменить ссылки. Теперь сакраментальный вопрос: а что из скомпилированного является ссылкой на убиваемый/перемещаемый адрес? И главное, как надежно отличить ссылки от не-ссылок, причем с учетом всех возможных CREATEd слов?
Сообщение Добавлено: Вт янв 06, 2009 15:48
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
А зачем же? Удаляем все, подбираем нужный список загрузок, и перетранслируем один раз.


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

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


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