Примерно через год я думал о написании программы, которая пишет программы. Это было бы прежде всего игривым упражнением, которое могло бы научить меня некоторым новым концепциям. Мое вдохновение исходило из negentropy, и способность к появлению из хаоса и нового хаоса возникла из-за неупорядоченной последовательности.
Чтобы быть более конкретным, программа начнет с написания короткой случайной строки. Если строка компилируется, программы будут записывать ее для последующего сравнения. Если строка не компилируется, программа попытается переписать ее, пока она не скомпилируется. По мере того, как записывается больше строк (мини- "бесполезных" программ), они могут анализироваться на сходства и использоваться для генерации грамматики. Затем эту грамматику можно нарисовать, чтобы написать больше строк, которые имеют более высокую вероятность компиляции, чем чисто случайные строки.
Это, очевидно, более чем глупо, но я подумал, что было бы здорово попробовать и разработать такую программу. И как побочный продукт, я получаю кучу уникальных программ, которые я могу визуализировать и называть искусством.
Я, вероятно, напишу это в Ruby из-за его простой синтаксиса и динамической компиляции, а затем я буду визуализировать обработку с использованием рубиновой обработки.
Что я хотел бы знать:
- Есть ли название для этого типа программирования?
- Что в настоящее время существует в этом поле?
- Кто является основными участниками?
- БОНУС! - Каким образом я могу процедурно присваивать значение выходным программам за пределами компиляции (y/n)?
Я могу расширить функциональность этой программы, чтобы сгенерировать программу на основе параметров, но я хочу, чтобы программа определяла эти параметры посредством запуска программ, которые компилируют и присваивают значение выводам программ. Этот вопрос, вероятно, более востребован, чем разумный для бонуса, но если вы можете подумать о простом способе получить что-то вроде этого, сделанного менее чем в 23 строках или одной гиперссылке, пожалуйста, подбросьте его в свой ответ.
Я знаю, что это не совсем мета-программирование, и от того, что я знаю об ИИ и генеративных алгоритмах, они обычно более ориентированы на цели, чем то, что я думаю. То, что было бы оптимальным, - это программа, которая постоянно переписывает и улучшает себя, поэтому мне не нужно ^ _ ^