D2X, разработанный в Массачусетском технологическом институте, представляет собой новый инструмент, упрощающий отладку любого предметно-ориентированного языка программирования.

В какой-то момент в 2019 году доктор философии Массачусетского технологического института. дублер Аджай Брахмакшатрия определил простую, но все же очень сложную цель. Ему нужно было сделать так, чтобы люди, обладающие навыками в определенной области — например, в отображении окружающей среды, биоинформатике или инженерии — могли составлять свои собственные диалекты программирования, предполагаемые явные диалекты области (или DSL), независимо от того, имели ли они практический опыт. никакого участия в создании диалектов программирования. Брахмакшатрия, член экзаменационной группы, возглавляемой преподавателем Массачусетского технологического института Саманом Амарасингхе в лаборатории разработки программного обеспечения и компьютерного мышления (CSAIL), считал, что эти диалекты должны сопровождать все вспомогательные возможности, которые люди должны будут безмятежно использовать, включая устройства для устранения неполадок. . Этот цикл устранения грубых ошибок в части программы является фундаментальным, соглашаются он и Амарасингхе, поскольку они назвали отсутствие поддержки по устранению неполадок «фатальным недостатком для DSL».

Это были полезные несколько лет для них двоих. В 2021 году Брахмакшатрия и Амарасингхе представили BuildIt, набор продуктов, который отлично справляется с задачей создания DSL. Кроме того, в прошлом месяце на всемирной встрече в Монреале при поддержке Relationship for Processing Hardware пара представила D2X, устройство, которое упрощает добавление устранения неполадок в любой DSL и продемонстрировало превосходную работу с BuildIt. Их статья о работе даже выиграла один из двух грантов на признанную работу, предоставленных на собрании.

Брахмакшатрия считает, что основным оправданием использования языка в определенном пространстве является «повышение удобства». DSL, обрабатывающий изображения, например, может иметь возможность, которая гласит: «скрыть всю картинку». Брахмакшатрия отмечает, что для того, чтобы придать такой же порядок на широко используемом языке, потребовалось бы гораздо больше строк кода. «Это важно для мотивации использования DSL. Другой — казнь». Ввиду того, что действия четко определены для данного пространства, их можно еще быстрее доработать — сделать все аккуратно и аккуратно, а впоследствии завершить еще эффективнее и быстрее.

Брахмакшатрия описывает BuildIt как «DSL для создания DSL». Он работает с многоступенчатой ​​системой, позволяющей взять текущий, универсальный удобный язык программирования и сократить его до тех пор, пока он не станет неким опытом в идеальной манере. «Предположим, у вас есть проблема, и вам нужно составить программу для ее решения», — говорит он. «Вы можете составить программу, чтобы решить ее полностью, или вы можете написать более скромную программу, чтобы решить только подкласс интересующей вас проблемы. Чем точнее вы сделаете программу, тем быстрее она будет работать». BuildIt предназначен для разработки DSL с учетом этих основных ценностей.

Halide — язык обработки изображений, придуманный в 2012 году, за много лет до появления BuildIt, — вполне возможно, самый ранний Dsl, появившийся на собрании Амарасингхе. Его улучшение было проведено тогдашним дублером Джонатаном-Раганом Келли и Эндрю Адамсом, постдоком CSAIL на тот момент. «Halide сейчас исключительно хорошо известен и используется во многих приложениях Adobe, включая Photoshop, но на самом деле у него нет отладчика», — говорит Амарасингхе. Обоснование этого, добавляет он, «в том, что отладчики исключительно запутаны. О них чрезвычайно сложно думать, поэтому большинство небольших DSL не имеют поддержки по устранению неполадок».

Это не лучшая ситуация, согласно Брахмакшатрии, который требует, чтобы каждый DSL имел свой собственный отладчик. «Вы не можете напрямую задействовать существующие отладчики для вашего нового диалекта, поскольку они не определяют пространство». Кроме того, немыслимо составить программу, которая была бы абсолютно верной в тот момент, когда он говорит. «Обычно вы начинаете с чего-то, в чем есть ошибка, однако они часто не появляются до тех пор, пока в какой-то другой момент цикла улучшения. Предполагая, что ошибка проявляется к тому времени, когда у вас есть 5000 строк кода, она имеет тенденцию быть чрезвычайно неуловимой». Таким образом, когда программа «закончена с кодом» — считается, что ее разработчики готовы к тестированию, — программистам может потребоваться посвятить большую часть своего времени обременительной задаче устранения неполадок.

Тем не менее, помощь уже в пути, как D2X (формулированный «детокс», поскольку он связан с мыслью об освобождении вашей программы от токсичных веществ или несовершенств). D2X — это не программа как таковая, а скорее делегированная библиотека — часть кода ПК, которую можно повторно использовать в разных проектах. Он предназначен для работы с существующими отладчиками (такими как GDB или LLDB), выступая в качестве расширения между этими устройствами и данным DSL. Отладчику нужны данные о программе или языке программирования, которые будут приведены в порядок. «Каждый отладчик ожидает эти данные в своей конкретной организации, которая может представлять собой запись на 400 страниц», — говорит Амарасингхе. «Предполагая, что вы используете D2X, вам не нужно беспокоиться об этом. Это решено для вас.

Брахмакшатрия говорит, что с D2X в качестве точки подключения: «Ваша программа может быть исправлена ​​с использованием известных отладчиков практически без изменений в реальных отладчиках». По его мнению, это основное преимущество объединения D2X с BuildIt: «Если вы создаете DSL с помощью BuildIt, вам не нужно выполнять никакой дополнительной работы. Вы получаете отладчик бесплатно, не составляя ни единой дополнительной строчки кода».

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

Однако это не конец истории, несомненно. Другой компонент, который он может захотеть объединить с BuildIt, а также изучить, — это изменение, которое упрощает создание программы. Редакторы, например, могут использовать в отчете определенные крылатые фразы, которые могут работать над его понятностью. Они могут выполнять разные роли, например, автозаполнение, которое последовательно заполняет текст после размещения небольшого фрагмента.

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

Эти усилия, за которыми следит Амарасингхе, сделают возможность создания отдельных диалектов значительно более привлекательной. «С моей точки зрения, есть бесчисленное множество людей, которые поддерживают обычные диалекты — огромное количество инженеров-программистов, создающих устройства для C, C++ или Java», — говорит он. «С другой стороны, если предположить, что я создаю простую DSL, у меня не так много инженеров-программистов, которые могли бы предложить всю эту помощь». Тем не менее, теперь, с BuildIt и D2X, добавляет он, «маленькие люди могут получить все, что есть у других, включая отладчики, а в конечном итоге редакторы и профилировщики — ту самую помощь, которая сопровождает обычные диалекты. Более того, вы можете получить это, не имея групп дизайнеров, создающих широкий спектр запутанного кода».

Эта работа была поддержана Исследовательским центром прикладных разработок, Управлением прогрессивных венчурных предприятий США (DARPA), Объединенным центром программ микроэлектроники колледжа при совместной поддержке Semiconductor Exploration Enterprise и DARPA; Общественное научное учреждение (NSF); и грант Intel/NSF.

Оригинальная статья: https://news.mit.edu/2023/d2x-easier-way-get-bugs-out-programming-languages-0407