Было бы здорово, если бы в начале/в конце статьи вы бы кратко перечисляли возможности, о которых пойдет речь.
Например, так:
Первый пример показывает, как программа может изменять значения инициализации массива в своем собственном коде
Второй пример показывает, как программа может выполнить лишь раз определенный фрагмент своего кода, а затем удалить его
По самой идеи: у вас получается крайне неустойчивая система. Я и в свой-то код стараюсь без необходимости не лезть, а если в него еще и сам компьютер будет вносить правки, это будет будет просто ужасно. Может вам стоит подумать про версионность? Во всяком случае на текущий момент, как я думаю, поддерживать код на вашем языке будет крайне проблематично.
А зачем вообще программе модифицировать свой код? В приведённых случаях достаточно просто записывать данные в файл, а не в код программы. Получаем разделение данных и инструкций, а это легче понимать, чем самомодифицируемый код.
Дело в том, что существует позиция в схеме алгоритма, которая указывает на текущую команду. По этому можно удалять любую часть алгоритма, кроме той, в которой находится текущая команда удаления. Именно для решения этой проблемы существует Spirit(), который само удаляется, как одна команда, сразу после своего исполнения.
Во-первых, эта «проблема» («можно удалять любую часть алгоритма, кроме той, в которой находится текущая команда удаления») присуща только вашему языку, в общем случае ничто не мешает удалить любую часть кода.
Во-вторых, я вообще не очень понимаю, какую задачу решает удаление части алгоритма в момент выполнения.
Во-первых, самооптимизация — это не задача, это средство решения задачи
А во-вторых, достаточно исключить ветвь алгоритма из выполнения, и эффект достигнут.
Простейшие самообучающиеся алгоритмы на языке «Автор»