Отказ от ответственности: Я не являюсь носителем английского языка и не являюсь экспертом в этой области, я любитель - ожидайте неточностей и / или ошибок в каких следовать. Итак, в духе stackoverflow, не бойтесь исправлять и улучшать мою прозу и / или мой контент. Также обратите внимание, что это , а не полный обзор методов автоматического программирования ( генерация кода (CG) из модельно-управляемых архитектур (MDA) ) заслуживает хотя бы мимолетного упоминания).
Я хочу добавить больше к тому, на что Varkhan ответил (что по существу правильно).
Подход Генетическое программирование (GP) к Автоматическое программирование объединяет с его фитнес-функциями две разные проблемы ("самокомпиляция" концептуально ежу понятно):
- самосовершенствование / адаптация - синтезированной программы и, если необходимо, самого синтезатора; и
- программа синтеза .
w.r.t. самосовершенствование / адаптация см. машины Гёделя Юргена Шмидхубера : самореферентные универсальные решения проблем, обеспечивающие доказуемо оптимальное самосовершенствование . (В качестве примечания: интересна его работа по искусственному любопытству .) Для этого обсуждения также важны Автономные системы .
w.r.t. программный синтез , я думаю, можно классифицировать 3 основные ветви: стохастический (вероятностный - как вышеупомянутый GP), индуктивные и дедуктивные .
GP по существу стохастик , поскольку он создает пространство вероятных программ с эвристиками, такими как кроссовер, случайная мутация, дупликация генов , удаление генов и т. д. (чем он тестирует программы с фитнес-функцией и позволяет выжившим и размножаться наиболее приспособленным).
Индуктивный программный синтез обычно известен как Индуктивное программирование (IP), из которых Индуктивное логическое программирование (ILP) является подполем. То есть, в общем, метод не ограничен логической программой синтезом или синтезаторами, написанными на языке логического программирования (ни оба не ограничены " .. автоматической демонстрацией или изучением языка / таксономии * 1084" * ").
IP часто детерминированный (но есть исключения): начинается с неполной спецификации (такой как пример пар ввода / вывода) и используется для ограничить пространство поиска вероятных программ, удовлетворяющих такой спецификации, а затем протестировать ее ( метод генерации и тестирования ) или непосредственно синтезировать программу, обнаруживающую повторения в данных примерах, которые затем обобщаются ( управляемый данными или аналитический подход). Процесс в целом по существу статистический индукция / логический вывод - т.е. рассмотрение того, что включить в неполную спецификацию, похоже на случайную выборку.
Генерирование и тестирование и управляемые данными / аналитические § подходы могут быть довольно быстрыми, поэтому оба являются многообещающими (даже если только небольшие синтезированные программы до сих пор демонстрировались публично), но генерировать-и-тестировать (как и GP) - смущающе параллельны , и тогда можно ожидать заметных улучшений (масштабирование до реалистичных размеров программы). Но обратите внимание, что Постепенное индуктивное программирование (IIP) §, которое по своей природе является последовательным, показало, что оно на несколько порядков более эффективно для неинкрементных подходов.
§ Эти ссылки непосредственно на файлы PDF: извините, я не могу найти реферат.
Программирование с помощью демонстрации (PbD) и Программирование на примере (PbE) - это разработка для конечного пользователя методы, известные для использования индуктивный синтез программ практически.
Синтез дедуктивной программы начинается с (предполагаемой) полной (формальной) спецификации (логических условий). Одна из техник использует автоматические средства доказательства теорем : чтобы синтезировать программу, она создает доказательство существования объекта, соответствующего спецификации; следовательно, через изоморфизм Карри-Говарда-де-Брюина (соответствие доказательств как программ и соответствий формул как типов) он извлекает программу из доказательства. Другие варианты включают использование решения ограничений и дедуктивной композиции подпрограммных библиотек .
По моему мнению индуктивный и дедуктивный синтез на практике атакуют одну и ту же проблему под двумя несколько разными углами, потому что то, что составляет полный * Спецификация 1154 * является дискуссионной (кроме того, полная спецификация сегодня может стать неполной завтра - мир не статичен).
Когда (если) эти методы (самосовершенствование / адаптация и программный синтез) станут зрелыми, они обещают повысить степень автоматизации, обеспечиваемую декларативным программированием (что такой параметр следует учитывать " программирование"* иногда обсуждается ): мы сконцентрируемся больше на Разработка предметной области и Анализ требований и разработка , чем на проектировании и разработке программного обеспечения, ручная отладка, ручная настройка производительности системы и т. д. (возможно, с меньшей случайной сложностью по сравнению с той, что была введена в текущем руководстве, а не в методах самосовершенствования / адаптации). Это также повысит уровень ловкости , который еще должен быть продемонстрирован современными методами.