Автоматический синтез программ -- что нового?
От: malphunction  
Дата: 24.06.14 05:39
Оценка: 8 (1)
Когда-то в университете занимался subj'евой тематикой,
даже диплом по этой теме писал.

Автоматический синтез программы -- это когда текст программы
создаётся по спецификации задачи (ну и знаниям предметной области).

Потом эту тему забросил, а вот сейчас снова стало любопытно,
какие есть разработки.

Такое впечатление, что после древних работ Тыугу
"Концептуальное программирование" и Ильина
"Система порождения программ" больше ничего не
было.

И что, действительно, такое многообещающее направление
никому не интересно?? Есть тут кто-то, занимающийся подобным?
Можете написать, что сейчас в мире на эту тему происходит?
Re: Автоматический синтез программ -- что нового?
От: dimgel Россия https://github.com/dimgel
Дата: 24.06.14 05:49
Оценка: +2 -1
Здравствуйте, malphunction, Вы писали:

M>И что, действительно, такое многообещающее направление никому не интересно??


Выглядит заявкой на серебряную пулю. На входе — задача, на выходе — кнопка "сделать п----то". Сказки.
Re[2]: Автоматический синтез программ -- что нового?
От: LaptevVV Россия  
Дата: 24.06.14 05:55
Оценка: +2
Здравствуйте, dimgel, Вы писали:
M>>И что, действительно, такое многообещающее направление никому не интересно??
Ну, универсальный механизм создать не удалось — народ и несколько забросил.
D>Выглядит заявкой на серебряную пулю. На входе — задача, на выходе — кнопка "сделать п----то". Сказки.
Нет.
Только не нужно писать УНИВЕРСАЛЬНЫЙ всемогутер.
Если ограничиться некоторой предметной областью — то вполне можно.
Вопрос в объеме задач предметной области.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Автоматический синтез программ -- что нового?
От: мыщъх США http://nezumi-lab.org
Дата: 24.06.14 06:02
Оценка: 10 (1) +2
Здравствуйте, malphunction, Вы писали:

M>Когда-то в университете занимался subj'евой тематикой,

M>даже диплом по этой теме писал.
это случайно не является частным (или общем) случаем метапрограммирования? метапрограммированием я интересуюсь давно и эта область активно развивается. метапрограммирование это когда результатом работы программы является программа, причем рекурсивно. и на верхнем уровне абстракции не только язык может быть предельно выразительным, нет! на вернем уровне абстракции могут быть данные, на основе которых автоматически генерируется программа для их обработки.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[3]: Автоматический синтез программ -- что нового?
От: malphunction  
Дата: 24.06.14 06:14
Оценка: 7 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>Если ограничиться некоторой предметной областью — то вполне можно.

LVV>Вопрос в объеме задач предметной области.

Да, так и есть. В дипломе делал такую штуку для школьной геометрии
(для задачек типа "даны длины сторон и углы какой-то штуки, найти параметры другой штуки"),
худо-бедно получалось синтезировать программки, решающие такие
задачки.
Re[2]: Автоматический синтез программ -- что нового?
От: malphunction  
Дата: 24.06.14 06:23
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>Здравствуйте, malphunction, Вы писали:


M>>Когда-то в университете занимался subj'евой тематикой,

M>>даже диплом по этой теме писал.
М>это случайно не является частным (или общем) случаем метапрограммирования? метапрограммированием я интересуюсь давно и эта область активно развивается. метапрограммирование это когда результатом работы программы является программа, причем рекурсивно. и на верхнем уровне абстракции не только язык может быть предельно выразительным, нет! на вернем уровне абстракции могут быть данные, на основе которых автоматически генерируется программа для их обработки.

По вашему описанию, похоже на Турчинское метапрограммирование в языке Рефал.
Мой "автоматический синтез", в общем-то, рядом, но не совсем метапрограммирование.
Впрочем, интересно было бы почитать о современном уровне исследований по
метапрограммированию, можете накидать ссылок?
Re: Автоматический синтез программ -- что нового?
От: Rinbe Россия  
Дата: 24.06.14 07:44
Оценка: +2 -1
Здравствуйте, malphunction, Вы писали:

M>Когда-то в университете занимался subj'евой тематикой,

M>даже диплом по этой теме писал.

M>Автоматический синтез программы -- это когда текст программы

M>создаётся по спецификации задачи (ну и знаниям предметной области).

Формальное описание того, как должна работать программа имеет туже сложность, что и сама программа.

M>И что, действительно, такое многообещающее направление

M>никому не интересно?? Есть тут кто-то, занимающийся подобным?

Это такое же программирование, только на языке предметной области.
Re: Автоматический синтез программ -- что нового?
От: alpha21264 СССР  
Дата: 24.06.14 07:52
Оценка:
Здравствуйте, malphunction, Вы писали:

M>Когда-то в университете занимался subj'евой тематикой,

M>даже диплом по этой теме писал.

M>Автоматический синтез программы -- это когда текст программы

M>создаётся по спецификации задачи (ну и знаниям предметной области).

Компилятор?
DSL?
Ну и что тут может быть нового?

Течёт вода Кубань-реки куда велят большевики.
Re: Автоматический синтез программ -- что нового?
От: Буравчик Россия  
Дата: 24.06.14 10:49
Оценка: 8 (2) +2
Здравствуйте, malphunction, Вы писали:

M>Когда-то в университете занимался subj'евой тематикой,

M>даже диплом по этой теме писал.

M>Автоматический синтез программы -- это когда текст программы

M>создаётся по спецификации задачи (ну и знаниям предметной области).

M>Потом эту тему забросил, а вот сейчас снова стало любопытно,

M>какие есть разработки.

M>Такое впечатление, что после древних работ Тыугу

M>"Концептуальное программирование" и Ильина
M>"Система порождения программ" больше ничего не
M>было.

M>И что, действительно, такое многообещающее направление

M>никому не интересно?? Есть тут кто-то, занимающийся подобным?
M>Можете написать, что сейчас в мире на эту тему происходит?

Как-то читал книгу "Порождающее программирование". Впечатлило, что можно создать программу из кусочков на основе спецификации. Но сразу же было видно, что написать и отладить "порождающую программу было очень сложно. Посчитал, что писать "порождающую программу" нужно только если существует очень много вариантов "порожденных программ". Но тема тоже заинтересовала.

Думаю это направление сейчас вылилось:
а) кодогенераторы. Таковых существует много под различные задачи.
б) метапрограммирование. Тот же кодогенератор, но без явного промежуточного этапа в виде кода программы.

Сложности все те же — сложность написания и отладки.

Полезные ссылки
Automatic programming
Model Driven Architecture
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 17>>
Best regards, Буравчик
Re[2]: Автоматический синтез программ -- что нового?
От: kl Германия http://stardog.com
Дата: 24.06.14 12:31
Оценка:
Здравствуйте, Rinbe, Вы писали:

M>>Автоматический синтез программы -- это когда текст программы

M>>создаётся по спецификации задачи (ну и знаниям предметной области).

R>Формальное описание того, как должна работать программа имеет туже сложность, что и сама программа.


Не совсем, формально задается не "как должна работать программа", а что она должна выдавать. В общем-то компиляторы функциональных языков или даже оптимизаторы реляционных запросов вполне попадают в эту категорию.

Автору: попробуй погуглить по словам generative programming.
no fate but what we make
Re[3]: Автоматический синтез программ -- что нового?
От: Rinbe Россия  
Дата: 24.06.14 13:22
Оценка:
Здравствуйте, kl, Вы писали:

kl>Здравствуйте, Rinbe, Вы писали:


M>>>Автоматический синтез программы -- это когда текст программы

M>>>создаётся по спецификации задачи (ну и знаниям предметной области).

R>>Формальное описание того, как должна работать программа имеет туже сложность, что и сама программа.


kl>Не совсем, формально задается не "как должна работать программа", а что она должна выдавать. В общем-то компиляторы функциональных языков или даже оптимизаторы реляционных запросов вполне попадают в эту категорию.


Ну это частный случай, я имел ввиду "вообще".
Re: Автоматический синтез программ -- что нового?
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.06.14 17:16
Оценка:
Здравствуйте, malphunction, Вы писали:

M>Автоматический синтез программы -- это когда текст программы

M>создаётся по спецификации задачи (ну и знаниям предметной области).

А в чем added value? Все равно эти спецификации придется писать на некоем формальном языке, описывать в мельчайших деталях, искать противоречия и отличия от того, что имелось ввиду. Это будет задача, по сложности сравнимая с программированием, просто программировать придется на некоем специализированном языке описаний.
Re[2]: Автоматический синтез программ -- что нового?
От: denisko http://sdeniskos.blogspot.com/
Дата: 24.06.14 17:27
Оценка:
Здравствуйте, dimgel, Вы писали:

D>Выглядит заявкой на серебряную пулю. На входе — задача, на выходе — кнопка "сделать п----то". Сказки.

Это имело бы смысл, если бы задача ставилась следующим образом: ты задаешь вход- выход, возможные блоки из которых строилось бы решение, и потом дописываешь тесты, которое решение должно было пройти, а вся комбинация блоков, их связи -- лежит на генераторе программ. Такое машинное обучение вместо программежа. Это можно сделать, но полученные решение будут скорее всего очень неоптимальными и придется обкладывать его очень изощренными тестами, чтобы оно хоть как то работало.
<Подпись удалена модератором>
Re[4]: Автоматический синтез программ -- что нового?
От: dimgel Россия https://github.com/dimgel
Дата: 24.06.14 17:51
Оценка:
Здравствуйте, Rinbe, Вы писали:

R>>>Формальное описание того, как должна работать программа имеет туже сложность, что и сама программа.


kl>>Не совсем, формально задается не "как должна работать программа", а что она должна выдавать. В общем-то компиляторы функциональных языков или даже оптимизаторы реляционных запросов вполне попадают в эту категорию.


R>Ну это частный случай, я имел ввиду "вообще".


Причём эти частные случаи десятками-сотнями человеко-лет оптимизируют, и есть у меня подозрение, что ничего общего с автоматическим синтезом эта деятельность по оптимизации не имеет. А про "вообще" — повторюсь, сказки. Вообще сказки.
Re: Автоматический синтез программ -- что нового?
От: __kot2  
Дата: 24.06.14 18:46
Оценка: +1 :)
Здравствуйте, malphunction, Вы писали:
M>Когда-то в университете занимался subj'евой тематикой,
M>даже диплом по этой теме писал.
M>Автоматический синтез программы -- это когда текст программы
M>создаётся по спецификации задачи (ну и знаниям предметной области).
TDD чем-то перекликается с этой областью
как я понимаю, люди поняли, что спецификацию задавать удобно в виде тестов
а требование — минимальная программа, удовлетворяющая этим тестам.
это уже достаточно формализованная задача, которая отдается низкоквалифицированному народу или, однажды, может быть даже чат-бот из Одессы сможет с этим справиться
Re[2]: Автоматический синтез программ -- что нового?
От: malphunction  
Дата: 26.06.14 01:17
Оценка:
Здравствуйте, Rinbe, Вы писали:

R>Формальное описание того, как должна работать программа имеет туже сложность, что и сама программа.


Отнюдь. Вы ж, когда программируете, не пишите весь софт с нуля, а используете
функциональность ОС и библиотек. Это раз. Далее, программируете вы не в машинных
кодах, а на ЯВУ, это упрощает программирование и понимание, хотя алгоритм внутри
остаётся, грубо говоря, тем же. Это два. Ну и три: находясь в тупике, вы пользуетесь
гуглом, StackOverflow, форумами, книжками, наконец.

Вот и Тыугу предлагал те же три составляющих (только на декларативный лад):
1) библиотеки готовых решений типовых задач,
2) удобный язык спецификаций, позволяющий скрыть детали,
3) самая писечка: база знаний о том, как решаются задачи. Синтезатор программ
мог бы обращаться к ней, чтобы ускорить вывод синтезируемой программы.

Таким образом, эта самая "формальная сложность" оказывается сниженой
за счёт использования этих трёх составляющих.
Представляется, что из-за этого написание спецификации будет проще,
чем программирование. Собственно, ради этого всё и затевается.

Другое дело, что Тыугу и Ильин скорее обозначили цели и наметили
способы решения, но не предложили готовых разработок.

M>>И что, действительно, такое многообещающее направление

M>>никому не интересно?? Есть тут кто-то, занимающийся подобным?

R>Это такое же программирование, только на языке предметной области.


Ага, это как сказать, что SELECT * FROM tbl -- тот же cmp cx, cx; jne loop_start
и никакого прогресса последние лет сорок не было.
Re[2]: Автоматический синтез программ -- что нового?
От: malphunction  
Дата: 26.06.14 01:24
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, malphunction, Вы писали:


M>>Автоматический синтез программы -- это когда текст программы

M>>создаётся по спецификации задачи (ну и знаниям предметной области).

Pzz>А в чем added value? Все равно эти спецификации придется писать на некоем формальном языке, описывать в мельчайших деталях, искать противоречия и отличия от того, что имелось ввиду. Это будет задача, по сложности сравнимая с программированием, просто программировать придется на некоем специализированном языке описаний.


Ответил тут: http://rsdn.ru/forum/philosophy/5662518.1
Автор: malphunction
Дата: 26.06.14


Библиотеки методов решения задач, высокоуровневый язык спецификаций -- всё это
снижает сложность написания кода. Детали тоже иногда можно опустить (к примеру,
вы ж не занимаетесь управлением памятью в программах на современных ЯВУ,
это делается автоматически, освобождая вас от рутины).
Re[3]: Автоматический синтез программ -- что нового?
От: Rinbe Россия  
Дата: 26.06.14 07:08
Оценка:
Пробуйте, сами увидите.
Re: Автоматический синтез программ -- что нового?
От: Blazkowicz Россия  
Дата: 27.06.14 12:58
Оценка: 24 (2) +1
Здравствуйте, malphunction, Вы писали:

M>И что, действительно, такое многообещающее направление

M>никому не интересно?? Есть тут кто-то, занимающийся подобным?
M>Можете написать, что сейчас в мире на эту тему происходит?
CMS, по-моему одни из немногих систем, которые в этом чего-то добились. Всякие Wordpress, например. Можно сделать сайт без программиста и даже поддерживать его.
Было много попыток делать более сложные системы без программирования ещё лет 10 назад. Но, как-то ни одной не выстрелило. Я постоянно вижу анонсы и рекламу таких систем. А в одной такой даже участвовал.

Задумка достаточна простая. Система типа ERP это несколько составляющих.
— Модель предметной области
— Бизнес-процесс
— UI формы
— Отчеты

Все эти подсистемы можно нарисовать с помощью некого UI.
— Модель это сущности, свойства и ассоциации — вроде легко рисуется
— Процесс это блок-схема — аналогично можно изобразить
— UI формошлепается через WYSIWYG
— Отчеты тоже рисуются в WYSIWYG и Query Builder для модели данных, не такая уж и сложная фигня.
В теории всё кучеряво. Нарисовал, проставил связи и запускай себе.

На практике же оказывается, что программировать без программирования не так просто.
— Нельзя без определенных навыков нарисовать модель, чтобы она нормально ложилась на более менее нормализованую БД.
— Не может блок-схема лаконично уместить всё то что может язык программирования. Да, и нарисовать блок-схему, оказывается не так просто. Нужно что-то понимать в циклах, переменных, условиях и пр.
— Ну, вот формошлепство, по-моему не самый сложный момент. Хотя usability это тоже целая наука.
— Нельзя построить сложный запрос к модели не понимая SQL.

На самом деле подсистем может быть больше. Интеграции, например. Кто-то через SOAP их делает, а кто-то через DLL.
Сложные алгоритмы и интеграции в таких системых принципиально невозможны из-за слишком высокого уровня абстракции. Поэтому подобные решения позволяют внедрять на каком-то уровне код на популярном языке программирования. А это уже головная боль для программиста, которому помимо программирования на языке, приходится паралельно часть задачь решать в терминах этой системы.
Re: Автоматический синтез программ -- что нового?
От: Evgeny.Panasyuk Россия  
Дата: 27.06.14 21:33
Оценка: +1
Здравствуйте, malphunction, Вы писали:

M>Автоматический синтез программы -- это когда текст программы

M>создаётся по спецификации задачи (ну и знаниям предметной области).

Тут скорее речь идёт об автоматическом решении задач описанных в некоторых декларативных терминах.
Генерация кода/текста программы по готовому формальному плану решения — это ортогональная примочка к такому решателю, реализация которой при наличии оного — всего лишь дело техники.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.