У меня есть предстоящий проект, в котором основным требованием будет изменение способа работы метода во время выполнения. Обратите внимание, что я не говорю о концепции объектно-ориентированного программирования более высокого уровня, такой как "затенение одного метода другим", хотя практический эффект будет аналогичным.
Ключевые свойства, которые мне нужны:
Я должен иметь возможность модифицировать метод таким образом, чтобы я мог добавлять новые выражения, удалять существующие выражения или изменять любые выражения, которые в нем присутствуют.
После изменения метода последующие вызовы этого метода вызовут новую последовательность операций. (Или, если язык связывает методы, а не оценивает каждый раз, предоставьте мне способ отменить/повторно связать новый метод.)
В идеале я хотел бы манипулировать атомарными единицами языка (например, "вызвать метод
foo
для объектаbar
"), а не непосредственно сборкой (например, "поместить эти три параметра в стек"). Другими словами, я хотел бы иметь высокую степень уверенности в том, что операции, которые я создаю, семантически значимы в языке. Но я возьму то, что смогу.
Если вы не уверены, соответствует ли язык-кандидат этим критериям, вот простая лакмусовая бумажка:
Можете ли вы написать другой метод с именем
clean
, который:
принимает метод
m
в качестве входных данныхвозвращает другой метод
m2
, который выполняет те же операции, что иm
так что
m2
идентиченm
, но не содержит никаких вызовов метода печати в стандартный вывод на вашем языке (puts, System.Console.WriteLn, println и т. д.)?
Сейчас я хотел бы провести предварительное исследование и выяснить, какие самые сильные кандидаты. Наличие большого активного сообщества так же важно для меня, как и практичность реализации того, что я хочу сделать. Я знаю, что здесь может быть какая-то неизведанная территория, поскольку прямое манипулирование байт-кодом обычно не является операцией, которую нужно раскрывать.
Какие варианты доступны для меня? Если возможно, можете ли вы предоставить пример игрушки на одном или нескольких рекомендуемых вами языках или указать мне на недавний пример?
Обновление: Причина, по которой я хочу этого, заключается в том, что я хотел бы написать программу, способную изменять себя во время выполнения в ответ на новую информацию. Эта модификация выходит за рамки простых параметров или настраиваемых данных, но представляет собой полноценные эволюционные изменения в поведении. (Нет, я не пишу вирус. ;))