Новый программный инструмент обеспечивает более простой способ отладки любого предметно-ориентированного языка программирования.
Где-то в 2019 году доктор философии Массачусетского технологического института. Студент Аджай Брахмакшатрия сформулировал простую, но все же довольно сложную цель. Он хотел, чтобы люди, имеющие опыт в определенной области, такой как моделирование климата, биоинформатика или архитектура, могли писать свои собственные языки программирования, так называемые предметно-ориентированные языки (или DSL), даже если у них было мало знаний. или нет опыта создания языков программирования.
Брахмакшатрия, член исследовательской группы, возглавляемой профессором Массачусетского технологического института Саманом Амарасингхе в Лаборатории компьютерных наук и искусственного интеллекта (CSAIL), хотел, чтобы эти языки поставлялись со всеми вспомогательными функциями, которые потребуются людям для комфортного их использования, включая инструменты для отладки . Он и Амарасингхе согласились, что этот процесс избавления от ошибок в программном обеспечении необходим, так как они назвали отсутствие поддержки отладки «ахиллесовой пятой DSL».
Это были продуктивные несколько лет для них обоих. В 2021 году Брахмакшатрия и Амарасингхе представили BuildIt, программный пакет, значительно упрощающий задачу создания DSL. А в прошлом месяце на международной конференции в Монреале, организованной Ассоциацией вычислительной техники, дуэт представил D2X, инструмент, который упрощает добавление отладки к любому DSL и, как было показано, особенно хорошо работает с BuildIt. Их статья о работе даже получила одну из двух наград Distinguished Paper Awards, врученных на конференции.
Брахмакшатрия объясняет, что основная причина создания языка в специализированной области «состоит в том, чтобы способствовать простоте использования». Например, 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, добавляет он, «маленькие ребята могут получить все, что есть у других, включая отладчики и, в конечном счете, редакторы и профилировщики — те же преимущества, что и традиционные языки. инженеры, пишущие всевозможный сложный код».
Теги: IT, программист