Как стать автором
Обновить

Автоматическое порождение программ, обратная задача и некоторые связанные с ними решения

Время на прочтение8 мин
Количество просмотров4.1K
Всего голосов 20: ↑15 и ↓5+10
Комментарии9

Комментарии 9

> Составить программу. Ввести скаляр max. Ввести скаляр min.
по сути сложность не уменьшилась, а вот лаконичность пострадала.
Мне кажется проще тоже самое написать на обычном языке программирования.

Да, это учебный пример (можно использовать при обучении программированию, показывая, какие программы можно получать для решения различных простых задач). Профессиональному программисту такую программу, конечно, написать несложно. Порождение же программ оправданно для решения сложных задач, когда однократно затраченное на создание порождающих классов время намного меньше суммарного времени на написание требуемых программ специалистом.
В данном случае следует просто говорить про DSL и компиляцию из одного языка программирования в другой.
DSL — действительно, одно из направлений прикладного автоматического порождения программ. Но ни решение задачи, обратной порождению, ни строгая верификация порождённой программы, для DSL-направления не характерны, насколько я знаю.
НЛО прилетело и опубликовало эту надпись здесь
Если в нескольких словах: речь идет о создании такой системы, которая во-многом заменяет программиста, поскольку позволяет:
а) описывать решаемую задачу в виде некоторой схемы;
б) автоматически генерировать по такой схеме программу, решающую данную задачу;
в) решать обратную проблему: брать некоторую программу и, хотя бы частично, распознавать, какую задачу эта программа решает.
Кроме того, речь идет о некоторых побочных применениях такой системы: о том, что можно генерировать программу не только по некоторой визуальной блочной схеме, но и по текстовому описанию этой задачи, например на русском языке (с упрощениями и ограниченими).
Можно почитать про DSL (Domain Specific Language). Похожими вещами также занимается, например, программа Rational Rose. Кроме того, на схожие темы существуют бумажные книги (например, немного, но есть в книге К.Чарнецки, У.Айзенекера «Порождающее программирование: Методы, инструменты, применение»). Есть много научных книг и статей, например, про SWITCH-технологии, можете поискать в Интернете.
К сожалению, «определенной новизны» я в тексте не увидел. Метапрограммирование, генераторы программ, графическое программирование, DSL...— все это известно давно, согласитесь.

В этом смысле обзор аналогов, от которого Вы отказались, был бы весьма кстати. Комментаторы справедливо указывают, что четких терминов, которые можно легко нагуглить, у Вас практически нет. Вашу «прямую задачу» в настоящее время связывают с направлением program synthesis (superoptimization и другие подходы «на примерах»). К «обратной задаче» относится направление automatic algorithm recognition (в этом контексте постановка задачи автораспараллеливания как раз весьма и весьма уместна). Оба этих направления чрезвычайно перспективны и по ним уже накоплен определённый объём серьезных результатов.
Все изложенное основано на идее применения особого вида моделей, которые я называю объектно-событийными (ОСМ). В этом и состоит новизна, если в паре слов.
Пусть исходная постановка решаемой задачи представляется в виде блочной схемы ...

Напомнило язык ДРАКОН.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории