Вы можете сделать это в Maple (язык компьютерной алгебры). В отличие от многих приведенных выше ответов, в которых используются скомпилированные языки, которые позволяют создавать и ссылаться только на новый код во время выполнения, здесь вы можете честно изменить код работающей в данный момент программы. (Ruby и Lisp, как указывают другие авторы, также позволяют вам делать это; возможно, также Smalltalk).
На самом деле, в Maple стандартно было то, что большинство библиотечных функций были небольшими заглушками, которые при первом вызове загружали свое «настоящее» Я с диска, а затем самостоятельно изменяли себя до загруженной версии. Это больше не так, поскольку загрузка библиотеки была виртуализирована.
Как указали другие: для достижения этой цели вам нужен устный перевод с сильными возможностями для размышлений и овеществления.
Я написал автоматический нормализатор / упрощитель для кода Maple, который я начал выполнять для всей библиотеки (включая ее); и поскольку я не был слишком осторожен во всем своем коде, нормализатор изменил сам себя. Я также написал Partial Evaluator (недавно принятый SCP) под названием MapleMIX - доступный на sourceforge - но не мог полностью применить его к себе (это не было целью проектирования).