00:00:08 Доменно-специфические языки (DSL) и их разнообразие.
00:01:36 Примеры DSL: AMPL для математического программирования и HTML для веб-страниц.
00:03:00 Преимущества использования DSL по сравнению с языками общего назначения для решения конкретных задач.
00:05:22 Использование DSL компанией Lokad для оптимизации цепочки поставок в различных ситуациях.
00:07:23 Преимущества использования DSL для более быстрой и надёжной конфигурации.
00:09:35 Ограничения DSL и их преимущества в оптимизации цепочки поставок.
00:12:55 Вопросы безопасности при использовании DSL по сравнению с языками программирования общего назначения.
00:13:01 Затратный по времени процесс разработки DSL.
00:14:49 Советы для стартапов, рассматривающих возможность разработки собственного DSL.
00:16:01 Недостаточное использование DSL и традиционных решений, приводящих к неудовлетворительным продуктам.
00:17:26 Дилемма использования DSL по сравнению с основными языками программирования и их исходы.
00:18:32 SQL и HTML как успешные примеры доменно-специфических языков.
00:19:46 Потенциал DSL в различных отраслях и их преобразующая мощь.
00:21:19 Заключение и возможные будущие разработки в области использования DSL.

Резюме

В этом интервью Киран Чендлер обсуждает доменно-специфические языки (DSL) с Жоаннесом Верморелем, основателем компании supply chain optimization Lokad. DSL — это языки программирования, разработанные для решения конкретных задач, в отличие от языков общего назначения, таких как Java или Python. Верморель объясняет, что DSL используются в таких отраслях, как автомобильная, где они обеспечивают бесперебойную работу критически важных компонентов, например, систем антиблокировки тормозов (ABS). Он также рассказывает о разработке собственной DSL компанией Lokad, Envision, для оптимизации цепочки поставок. Верморель подчёркивает преимущества DSL, такие как эффективные вычисления и возможность настройки под конкретные области, одновременно отмечая сложности и затраты на их разработку.

Расширенное резюме

В этом интервью ведущий Киран Чендлер обсуждает доменно-специфические языки (DSL) с Жоаннесом Верморелем, основателем компании Lokad — фирмы, специализирующейся на оптимизации цепочки поставок.

DSL — это особый класс языков программирования, предназначенных для решения очень специфических задач, в отличие от языков общего назначения, таких как Java или Python, которые рассчитаны на выполнение более широкого спектра задач. Языки общего назначения созданы для того, чтобы предоставить удобный, продуктивный и эффективный способ делать всё, что возможно с помощью компьютеров, в то время как DSL сосредоточены на решении конкретных проблем. Некоторые из первых доменно-специфических языков, таких как AMPL, были созданы для математического программирования и других узкоспециализированных задач.

DSL используются в реальных приложениях для реализации критически важных компонентов в различных отраслях. Например, в автомобильной промышленности DSL может применяться для разработки программного обеспечения, управляющего системой ABS в автомобиле. Цель — создать систему с минимальным количеством ошибок, так как сбой этого компонента может привести к потере тормозной способности. В отличие от этого, языки программирования общего назначения не всегда могут обеспечить столь высокую надежность без ошибок.

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

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

Верморель поясняет, что задачи в цепочке поставок настолько разнообразны, что ни одна компания не похожа на другую. У компаний различная IT-инфраструктура, прикладные ландшафты, а также различные комбинации ERP-систем, WMS и других систем. Это разнообразие создаёт сложности для программных решений, пытающихся оптимизировать цепочку поставок по принципу “один размер подходит всем”. Традиционные фреймворки, основанные на конфигурации, часто требуют широкой настройки для каждого клиента, что отнимает много времени и средств.

Признавая, что каждая клиентская ситуация требует индивидуального программного обеспечения, Lokad стремилась разработать более эффективный и надёжный процесс. Компания приняла решение создать собственный DSL, Envision, для ускорения процесса конфигурации и повышения продуктивности. Верморель сравнивает использование Envision с такими языками общего назначения, как C#, F# и TypeScript. Несмотря на то, что эти языки уже активно используются, выполнение задач для клиентов с их помощью оказалось медленным и затратным. Envision был создан как более гибкий инструмент, лучше приспособленный к уникальным требованиям оптимизации цепочки поставок.

Верморель отмечает, что одной из причин, по которой многие решения в области программного обеспечения для цепочки поставок становятся громоздкими, является попытка учесть каждую возможную функцию и сценарий использования. Lokad выбрала иной подход, разработав узкоспециализированный базовый DSL, где сам программный продукт представляет собой Envision и его функциональные возможности. Это позволяет создавать индивидуальные реализации для каждого клиента с использованием Envision, при том что компилятор и среда для Envision реализованы на C#, F# и TypeScript.

Верморель объясняет, что применение DSL может вносить определённые ограничения, что в некоторых случаях оказывается даже преимуществом. Например, при оптимизации большой цепочки поставок с огромными объёмами данных сложно гарантировать завершение расчётов в заданные сроки при использовании языков общего назначения. DSL с установленными ограничениями может обеспечить своевременное выполнение расчётов, предотвращая сбои в цепочке поставок.

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

Несмотря на сложности, Верморель считает, что потенциал DSL недостаточно использован и может быть особенно полезен для стартапов. Разработка DSL не отменяет необходимости в программистах или использовании языков общего назначения; фактически, для этого может потребоваться ещё больше инженеров. Однако, сосредоточившись на конкретной проблемной области, DSL могут предложить преимущества в эффективности, безопасности и оптимизации.

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

Верморель отмечает, что многие современные программные продукты оставляют желать лучшего и часто превращаются в нечто, напоминающее крупное корпоративное ПО, что является далеко не идеальным результатом. Он приводит в пример системы многоканального управления заказами (MOMS), которые со временем превратились в ERP-системы с сотнями экранов и тысячами опций. Первоначальная цель отличаться от ERP была утрачена, и итоговый продукт не намного лучше исходных ERP.

Он утверждает, что использование DSL могло бы привести к более лаконичному и мощному продукту в случае MOMS. Однако внедрение DSL сопряжено с собственными трудностями, такими как годы головной боли и ограничений. С другой стороны, применение более распространённого языка программирования могло бы способствовать более быстрому росту, но привести к продукту, которым трудно управлять.

Одним из успешных примеров DSL является SQL (язык структурированных запросов), используемый для управления реляционными базами данных. Верморель отмечает, что когда DSL становятся очень успешными, люди часто забывают, что изначально это был DSL. Он считает, что у DSL есть значительный потенциал в различных отраслях, в том числе в оптимизации цепочки поставок с Lokad.

Чендлер интересуется, в каких ещё отраслях DSL могут быть полезны. Верморель предлагает рассмотреть маркетинг как одну из возможностей, поскольку компании часто сталкиваются с комплексными программными решениями, не обладающими достаточной функциональностью для удовлетворения их потребностей. Другой областью, где DSL могут предложить индивидуальное решение, является управление персоналом, так как оно отражает уникальную культуру каждой компании, что затрудняет применение универсальных подходов.

Полный текст интервью

Киран Чендлер: Сегодня мы подробнее узнаем, как они разрабатываются, а также поймем, почему они могут быть полезнее по сравнению с более распространёнными языками программирования. Итак, Жоаннес, возможно, начните с рассказа, что же такое DSL и как они работают.

Жоаннес Верморель: DSL — это особый класс языков программирования, которые, в отличие от языков общего назначения, таких как Java, Python и C++, не предназначены для решения абсолютно всех задач, которые можно выполнить на компьютере. Языки программирования общего назначения созданы для того, чтобы предоставить вам максимально удобный, продуктивный и эффективный способ делать всё, что возможно с помощью компьютеров или даже множества компьютеров. А доменно-специфические языки программирования — это нечто иное. Это программирование, сопряжённое с кодом, формальное и абстрактное, но предназначенное для решения очень конкретных видов задач. Например, исторически первые доменно-специфические языки программирования в основном были связаны с такими задачами, как AMPL — язык математического программирования, разработанный для выполнения весьма специфических задач.

Киран Чендлер: Для каких задач вы используете доменно-специфический язык и для чего они применяются в реальном мире?

Жоаннес Верморель: В реальном мире историческим применением было внедрение критически важных компонентов. Например, вам нужно, чтобы программное обеспечение управляло системой ABS в вашем автомобиле — антиблокировочной системой, и вы хотите иметь доказательство того, что оно никогда не даст сбоя, ведь если произойдёт сбой, ваш автомобиль внезапно потеряет тормозную способность. Это ситуация, когда последствия крайне серьезны, и возникает мысль: давайте постараемся, чтобы здесь не было ошибок. Это относится к встроенным системам. Затем есть задачи, такие как HTML для веб-страниц, где хоть и используется язык программирования, но его делают более доступным. Существует уважительная причина, по которой HTML можно изучить ещё в начальной школе — он очень прост. Его основы буквально доступны даже для людей с минимальными техническими знаниями. Но компромисс заключается в том, что HTML позволяет контролировать только макет веб-страницы; он не позволяет управлять роботом или заниматься искусственным интеллектом.

Киран Чендлер: Итак, они очень просты и ограничены. Почему же вы не используете более распространённые языки программирования, обладающие большей выразительностью для этих задач, ведь они способны их выполнить?

Жоаннес Верморель: Если представить, что означало бы создание HTML-страницы, где вместо использования языка разметки, позволяющего задать “title”, “большой размер шрифта”, “основной текст”, “выравнивание текста” и т.д. — простых элементов управления, вам пришлось бы контролировать каждый пиксель на экране, а это непрактично.

Киран Чендлер: …это то, что можно было бы ожидать от крайне низкоуровневого подхода, а если пойти ещё ниже, можно сказать, что вы собираетесь напрямую управлять своей графической картой для достижения сверхвысокой производительности, и именно этим, если вы действительно создаёте 3D-движок для видеоигр, вы могли бы заниматься. Но если вам нужно сделать что-то простое, например, веб-страницу, это займет бесконечное количество времени. При разработке 3D-игр гораздо проще и прямолинейнее использовать идентификаторы, как в HTML. Ладно, это тема, с которой мы хорошо знакомы в Lokad, учитывая, что мы как бы создали свой собственный DSL. Так почему же это оказалось таким интересным для нас как для компании, работающей в сфере цепочек поставок?

Joannes Vermorel: Проблема, которая слегка сводит с ума в сфере цепочек поставок, заключается в том, что проблемы настолько разнообразны. Буквально, нет двух компаний, которые были бы одинаковыми, точнее, не совсем одинаковыми. У них нет единого прикладного ландшафта. Некоторые компании имеют одну ERP-систему; многие имеют две ERP по не лучшим причинам. У них есть система управления складом (WMS); у них несколько WMS. У них 10 различных ERP, потому что они работают в десяти разных странах с разными IT-ландшафтами. У них также есть платформа электронной коммерции, появившаяся позже, что является отдельной сущностью. У них есть дополнительные ускорители. Проблема заключалась в том, что мы хотели оптимизировать цепочку поставок, и я понял в первые годы, что классический подход с настраиваемой платформой просто не работает. Ситуации были настолько разнообразны, что в итоге приходилось делать огромное количество кастомизации и настройки для каждого клиента. И буквально, когда начинаешь думать о программном обеспечении, готовом к использованию «с полки», но которое требует шести месяцев на какую-то настройку, действительно ли это настройка? Или это не похоже на полное переизобретение нового программного обеспечения? Реальность такова: да, это так. Поэтому мы решили пойти дальше по логической цепочке: если каждая ситуация требует абсолютно разного программного обеспечения, то почему бы не создать нечто, что будет поддерживать этот процесс, делая его чрезвычайно продуктивным, быстрым и надежным? Именно так и возникла идея создания DSL, специфичного для домена языка.

Kieran Chandler: Так, если вы использовали более распространённый язык программирования, такая настройка заняла бы гораздо больше времени, в то время как ограниченная среда позволяет делать всё гораздо быстрее.

Joannes Vermorel: Интересно. В Lokad мы используем универсальные языки программирования. С самого начала мы работали на C#, C#.NET — это по сути программный стек Microsoft — а позже добавили F# и TypeScript для различных задач. Таким образом, мы уже широко используем универсальные языки программирования и хорошо знаем, на что они способны. Но в первые годы работы Lokad мы поняли, что обработка запросов клиентов с использованием этих языков просто невероятно медленная и затратная. Нам нужно было нечто лучшее, и дело было не в том, что мы не знакомы с этими языками. Мы осознали, что проходить через них для каждой клиентской ситуации — настоящий кошмар. И, кстати, это ещё одна причина, почему все эти решения для цепочек поставок превращаются в гигантские монстры программного обеспечения. Они пытаются включить в свой продукт абсолютно всё, и в итоге получается программный монстр. Поэтому мы решили подумать: а что если программный продукт будет…

Kieran Chandler: А что если программный продукт будет просто DSL и его возможностями, то есть чем-то вроде сверхкомпактного ядра, а затем, при обращении к клиенту, мы будем создавать кастомную реализацию не на C#, а на Envision — нашем собственном DSL? Но компилятор и среда для Envision, на самом деле, не реализованы на Envision, их сделали на C#, F# и TypeScript.

Joannes Vermorel: Хорошо.

Kieran Chandler: Вы упомянули, что цепочки поставок, очевидно, невероятно разнообразны, и каждый клиент совершенно различен. Создаёт ли использование DSL какие-либо ограничения? Препятствует ли оно реализации определённых решений?

Joannes Vermorel: Абсолютно, и в этом весь смысл, насколько это может удивлять. Видите ли, например, одна из самых базовых проблем возникает, когда у вас большая цепочка поставок, которую вы хотите оптимизировать, и в итоге у вас оказывается довольно объёмный набор данных. Допустим, у вас один терабайт данных. Это не настолько огромно; вы можете пойти в супермаркет и купить жёсткий диск на 1 терабайт примерно за 100 евро, что довольно дешево. Так что объём данных большой, но не гигантский. Проблема в том, что ваш набор данных обновляется каждый день, и вы хотите, например, пройтись по нему, чтобы принимать разумные решения для цепочки поставок, такие как решения о пополнении запасов и установлении цен.

Теперь проблема в том, что если вы используете универсальный язык программирования, как вы можете гарантировать, что вычисления займут, скажем, менее 60 минут? Это очень сложно. Как только у вас появляются произвольные циклы или конструкции, становится крайне трудно доказать, что выполнение укладывается в заданный временной интервал, что может стать проблемой, если расчеты, необходимые для принятия определённых решений (например, решений о пополнении запасов), должны выполняться в сжатых временных рамках вашей ERP-системы. Вам действительно нужно, чтобы вычисление было завершено за 60 минут; иначе вы нарушите всю цепочку поставок, потому что расчет займёт слишком много времени.

Таким образом, универсальные языки программирования не могут дать вам таких гарантий, потому что они позволяют сделать буквально всё, и получить какие-либо гарантии практически невозможно. Но у DSL, с его встроенными ограничениями, появляется другое преимущество: дизайн. На самом деле очень сложно создать программную среду, которая была бы полностью безопасной, используя универсальный язык программирования. С такими языками, как Java, Python или C#, вы открываете дверь целым классам уязвимостей в области безопасности. Если с помощью компьютера можно сделать что угодно, можно совершить действия, которые являются относительно опасными с точки зрения IT-безопасности.

Опять же, использование DSL означает, что целые классы операций просто недоступны, например, взаимодействие с операционной системой, и таким образом устраняются целые классы проблем, которые даже не находятся в поле вашего зрения. Всё, что вам нужно, — это оптимизация цепочки поставок.

Kieran Chandler: Да, и именно об этом мы говорили в нашем выпуске о безопасности. Давайте обсудим разработку DSL. Скажем, сколько же на самом деле занимает разработка такого языка? На ваш взгляд, сколько времени потребовалось на разработку Envision?

Joannes Vermorel: Хороший вопрос. Буквально, это занимает десятилетие, что несколько безумно. Когда вы находитесь в стартапе, вы говорите: «Двигайтесь быстро и ломайте всё», создаёте минимально жизнеспособный продукт, который можно продать в течение шести месяцев, а затем начинаете разрабатывать собственный DSL, и это буквально процесс…

Kieran Chandler: Конечно, это многолетнее усилие, и основная сложность в том, что вам действительно нужно с нуля переосмыслить основные проблемы, которые вы решаете. Какие являются фундаментальными аспектами этих проблем и какие логические примитивы должны быть доступны для их решения с помощью компьютеров? Это даже сложнее, чем просто изобретать новые слова; это изобретение логических примитивов для связывания концепций, чтобы в конечном итоге сформировать целые классы решений, генерируемых компьютерами автоматически. Но вы буквально задумываетесь о самом языке программирования, его синтаксисе, типах операторов, которые в нём используются, и вы действительно хотите, чтобы всё это было полностью согласовано с решаемой проблемой. Так что, если бы вы сейчас начинали стартап, порекомендовали бы вы разработку такого языка, что может оказаться невероятно затратным по времени и достаточно сложным, или советовали бы остаться при использовании более распространённых языков программирования?

Joannes Vermorel: Во-первых, создание вашего DSL не является заменой для традиционных языков программирования. Если вы — софтверная компания и хотите создать этот новый язык для решения определённого класса проблем, как мы делаем для цепочек поставок, вам понадобятся компилятор и среда выполнения для запуска программ, написанных на этом языке. И этот компилятор будет написан на обычном языке программирования. То есть, если вы пойдёте по пути DSL, это не значит, что вам не понадобятся программисты; наоборот, вам потребуется ещё больше разработчиков.

Учитывая вопрос для стартапов, я думаю, что путь DSL настолько амбициозен, что он значительно недоиспользован. Я вижу множество софтверных компаний и стартапов, которые пытаются решать проблемы классическим способом, потому что спешат, и в итоге получают несколько неудовлетворительные продукты. Когда я смотрю на тип продуктов, которые они выводят на рынок, я думаю: это интересно, но они прямо идут по пути превращения в огромное корпоративное программное обеспечение, что не совсем то, к чему стоит стремиться.

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

Kieran Chandler: Мы обсуждаем различия между использованием специализированного языка (DSL) и традиционного языка программирования для разработки программного обеспечения. С DSL вы можете столкнуться с годами проблем, но в итоге получить мощное и оптимизированное решение. С другой стороны, использование традиционного языка программирования может привести к быстрому росту, но впоследствии создать неуправляемую систему.

Joannes Vermorel: Примечательно, что одним из первых успешных DSL был SQL — язык запросов для баз данных. В наши дни каждый поставщик баз данных фактически продаёт DSL, поскольку единственный способ взаимодействия с базой данных — это через запросы, написанные на специализированном языке. Когда DSL становится невероятно успешным, люди забывают, что это даже DSL. Например, HTML стал настолько распространённым, что теперь его уже не воспринимают как DSL. Я считаю, что DSL имеет огромный потенциал в различных отраслях, например, в оптимизации цепей поставок с Lokad.

Kieran Chandler: Помимо отрасли цепей поставок, какие ещё отрасли, по вашему мнению, могут извлечь выгоду из использования DSL?

Joannes Vermorel: Маркетинг — одна из отраслей, которая приходит на ум. Я вижу, как многие компании борются со сложными программными решениями, которые просто не обладают достаточной мощью. В итоге они выполняют множество операций в Excel, что затруднительно в поддержке и переводе в промышленное производство. Управление персоналом — ещё одна область, где DSL может быть полезен. Управление персоналом часто отражает культуру компании, что затрудняет создание универсального решения, подходящего для всех. Я считаю, что DSL имеет потенциал оказать значительное влияние практически в каждой отрасли, но способы его реализации могут существенно различаться в зависимости от решаемой проблемы.

Kieran Chandler: На этом мы закончим. Спасибо за ваше время сегодня, Joannes.

Joannes Vermorel: Пожалуйста.

Kieran Chandler: На этом всё на сегодня. Спасибо, что были с нами, и до встречи в следующий раз. Пока.