| |
[Oct. 26th, 2019|04:00 am] |
Постановка вопроса не моя, но ссылаться на Шеня не буду, потому что легко могу переврать, что конкретно его беспокоит. Впрочем, в любом случае на сей счет прохаживается не он один.
Если немного изменить программу, она не будет работать. С крошечной вероятностью она пройдет стадию компиляции, но зациклится или сделает что-нибудь неосмысленное. Как же получается, что мутации в генетическом коде порождают другого зверя, но тоже жизнеспособного? (По ряду причин, которые, возможно, обозначу ниже, я не хочу говорить об этом в терминах эволюционного ландшафта.)
Предположим, что компилятор действует так: натыкаясь на то, что он считает ошибкой, соответствующую строку комментирует. Тогда программа на выходе будет короткой, но исполняемой, или просто будет закомментирована целиком. Если немного усложнить компилятор и разрешить ему исправлять строку на ближайшую в какой-нибудь заранее заданной метрике грамматически верную -- на выходе будут частые сообщения об ошибке, зацикливание, но что-то будет. Потребуем еще, чтобы всякая программа содержала блок, создающий самозапускающиеся копии ее текста на диске.
Исходно единственный мыслимый ресурс здесь ресурс памяти, и он ограничен. Если какая-либо программа умеет стирать другие программы, она быстро заполнит все пространство. Если их несколько, они будут конкурировать между собой. Если программа может защитить себя от стирания (например, посредством прикрепления к стирающей программе), у нее появится шанс, и т. д. Если стирающая программа сможет инкорпорировать блок, который улучшает ее эффективность в деле стирания чужих и производства своих копий, ей повезло.
Нужен язык, на котором несколько самых простых функций отделены друг от друга несколькими опечатками. Тогда много разных случайных опечаток будут приводить к одному и тому же варианту после коррекции. Остальные -- сравнительно далекие "аттракторы", осмысленно исполняемые -- могут подождать своей очереди.
Разумеется, все это полная ерунда, в искусстве программирования я сильна примерно столько же, сколько в биологии (да и главная проблема, проблема возникновения жизни, есть как раз история отделения программы и многоуровневого компилятора), но все же вопрос "непрерывности кода жизни" -- вероятно, именно в силу некомпетентности -- мне представляется переоцененным.
А парадигма ландшафта, конечно, наглядная, но не очень рабочей кажется, потому что (мне) непонятно, как учесть то обстоятельство, что движение по ландшафту и простое его заселение меняет ландшафт вплоть до катастроф уровня кислородной. [Эволюционный ландшафт изображает мутации, способствующие выживанию, как движение вверх, нейтральные по хребту ии плато, негативные -- вниз, в затопленные области, где смерть и запустение. Но затопленные области могут временно пересыхать, горизонтальный обмен генами наводить мосты и т. п.] |
|
|