Система, которая автоматически заполняет пробелы в коде компьютерных программистов, набирает силу

Если его усовершенствовать и сделать более удобным для пользователя, Sketch в конечном итоге может облегчить жизнь разработчикам программного обеспечения. Но в то же время он доказывает свою ценность в качестве основы для других инструментов, использующих механику «синтеза программ» или автоматического создания программ.

Недавние проекты Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института, основанные на Sketch, включают систему автоматической оценки заданий по программированию для классов информатики, систему, которая преобразует нарисованные от руки диаграммы в код, и систему, которая создает запросы к базе данных SQL из написанного кода. в Java.На конференции этого года по проверке, проверке моделей и абстрактной интерпретации Солар-Лезама и группа его учеников — аспирантов Рохит Сингх, Ришаб Сингх и Жилей Зу вместе со старшим специалистом Массачусетского технологического института Ребеккой Кросник — описали новую разработку Sketch. это во многих случаях позволяет гораздо более эффективно решать сложные задачи синтеза. Исследователи протестировали новую версию Sketch в нескольких существующих приложениях, включая автоматизированную систему оценивания. В тех случаях, когда у предыдущей версии «истекло время ожидания» или требовалось так много времени для достижения решения, что она просто отказывалась, новая версия могла исправить код учащихся за миллисекунды.

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

В своей новой статье исследователи находят способ уменьшить это пространство поиска.Цепочка командования«Когда вы пытаетесь синтезировать более крупный фрагмент кода, вы полагаетесь на другие функции, другие части кода», — объясняет Ришаб Сингх. "Если так получилось, что ваша система зависит только от определенных свойств компонентов, вы должны иметь возможность каким-то образом выразить это на языке высокого уровня. Как только вы сможете указать, что требуются только определенные свойства, вы сможете чтобы успешно синтезировать более крупный код ».Например, объясняет Сингх, предположим, что одна из частей кода — это процедура нахождения квадратного корня из числа, а функция более высокого уровня полагается на результаты этого вычисления.

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

Однако в новой версии Sketch программист может просто указать условия, которым должна удовлетворять функция извлечения квадратного корня: результат, умноженный сам на себя, должен быть равен входу. Теперь Sketch может убедиться, что функция извлечения квадратного корня, которую он предлагает, соответствует этому критерию, и перейти к функции более высокого уровня. Нет необходимости повторно оценивать функцию извлечения квадратного корня на каждом проходе.

Фактически, это возлагает немного большую ответственность на программиста, который теперь должен рассуждать о критериях, которым должна соответствовать каждая низкоуровневая функция. Но это позволяет Sketch справляться с гораздо более сложными проблемами.Ближайшие перспективы

Солар-Лезама признает, что потребуется немало усилий, прежде чем Sketch станет полезным для разработчиков коммерческого программного обеспечения. «Приложение как инфраструктура для создания инструментов, используя его для построения на его основе систем более высокого уровня, мы очень убедительно продемонстрировали, создав множество систем, которые делают то, что раньше было невозможно», — говорит он.Тем не менее, он провел исследования удобства использования со Sketch, наняв студентов MIT с опытом программирования всего за семестр, чтобы протестировать его. По его словам, во всех случаях студенты успешно использовали Sketch для создания рабочего кода. Но во многих случаях синтез отсутствующего кода занимал неприемлемо много времени из-за того, как студенты описывали проблему.

«Это по-прежнему требует определенного уровня знаний и понимания лежащей в основе технологии, чтобы она не взорвалась», — говорит Солар-Лезама. «Что касается более амбициозной цели — отказаться от C и вместо этого использовать Sketch, нам все равно придется приложить немало усилий».Дополнительная информация: http://people.csail.mit.edu/rishabh/papers/modelsVMCAI14.pdf