You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Код, генерируемый для статических ящиков, на уровне RASL’а представляет собой одну команду (#CmdSwap s.ScopeClass e.Name), но по факту генерируется в здоровый кусок кода, содержащий как несколько типовых элементов (начало и конец функции), так и команд, которые можно заменить имеющимися командами RASL’а (после преобразования можно будет выделить #CmdCallSave и команды сплайсов). Останется только добавить характерные примитивные команды для извлечения и сохранения данных в статическом ящике.
Задача в чём-то конкурирует, в чём-то дополняется с задачей #46.
The text was updated successfully, but these errors were encountered:
)
Дескрипторы этих объектов являются структурами-наследниками структуры
refalrts::RefalFunction. Наследование без виртуальных функций, поскольку
предполагается, что работа будет выполняться всегда с правильным типом
дескриптора (функция refalrts::RefalSwap::run всегда будет вызываться
для RefalSwap и наоборот, дескриптор RefalSwap всегда будет содержать
в поле функции RefalSwap::run).
Поскольку код тела статического ящика вынесен в рантайм, задачу #47 можно
закрывать как невыполнимую.
Задачу выполнить уже невозможно, поскольку теперь все статические ящики разделяют одну и ту же функцию.
Даже если бы задача #46 не выполнялась, всё равно она не имела бы пользы, поскольку вынести можно call_left и команды переносов, для остального пришлось бы генерить новые команды. Причём делать режим интерпретации для этих команд было бы нерентабельно: функция использует статические переменные, которые пришлось бы передавать в интерпретатор и для обычных функций (или указатели NULL). Овчинка выделки не стоит.
В связи с переходом на интерпретацию, имеет смысл, чтобы избежать дублирования кода, удалить из функции refalrts::perform_swap повторяющийся код, заменив его командами в refalrts::RefalSwap::run[] (см. коммит 534ba5d).
Код, генерируемый для статических ящиков, на уровне RASL’а представляет собой одну команду
(#CmdSwap s.ScopeClass e.Name)
, но по факту генерируется в здоровый кусок кода, содержащий как несколько типовых элементов (начало и конец функции), так и команд, которые можно заменить имеющимися командами RASL’а (после преобразования можно будет выделить#CmdCallSave
и команды сплайсов). Останется только добавить характерные примитивные команды для извлечения и сохранения данных в статическом ящике.Задача в чём-то конкурирует, в чём-то дополняется с задачей #46.
The text was updated successfully, but these errors were encountered: