В исследовании языков программирования меня всегда наиболее привлекала их разработка.
Когда аккуратно мастеришь язык программирования, синтаксис и семантика которого тщательно подогнаны под конкретную предметную область, ты как программист должен предоставить конечным пользователям интерфейс, полностью согласующийся с наработанной ими интуицией и их устоявшимися привычками. Так пользователи языка смогут сосредоточиться на интересных аспектах стоящих перед ними задач и браться за более крупные и сложные проекты.
Не надо писать такую многословную последовательность вызовов API, если требуется всего лишь вывести диалоговое окно пользователю видеоигры:
Напротив, DSL позволяет разработчикам сосредоточиться на высокоуровневых деталях — то есть, в общем виде представить, как должен вестись диалог:
Запрограммировав относящиеся к предметной области «эмпирические правила» в сам язык, можно в принципе исключить возможность создания некорректных программ, устранить когнитивную нагрузку и минимизировать зону поражения, через которую в программу проникают баги и эксплойты.
Свой язык для каждой предметной области. Устранив всё некорректное, можно не сомневаться в правильности того, что осталось, даже если оставшаяся информация сложная, туманная или запутанная.
На несколько последних десятилетий приходится интересная, захватывающая и влиятельная история исследований, но в данном случае с моей стороны было бы небрежно не приметить главного слона — большие языковые модели. Всего за несколько лет большие языковые модели (БЯМ) и сгенерированный ими код обильно пропитали всю экосистему, в которой существует софт, и теперь разработчикам приходится постоянно переоценивать собственные предубеждения по поводу того, что может и что не может сгенерировать машина. Между прочим, эти изменения распространяются и на те проблемы, которые раньше пытались решать на уровне проектирования языков (устранение шаблонного кода, фиксация соглашений или повышение степени логичности кода).
Этот ландшафт только формируется, но в нём заключён большой потенциал, и можно задать много интересных вопросов о том, как большие языковые модели могут поспособствовать разработке ПО. Но, наблюдая за этими процессами, я также наблюдаю тревожную тенденцию: разработки в области БЯМ постепенно гасят интерес к проектированию DSL. В самом деле, зачем проектировать такой DSL, который мог бы устранить весь шаблонный код, если у вас есть БЯМ, способная запрограммировать для вас буквально что угодно?
Есть ли будущее у проектирования языков в эту новую эру БЯМ? В данном посте я хотела бы поделиться некоторыми давно назревшими у меня мыслями по поводу этого новоиспечённого ландшафта, дать пищу для дискуссии и очертить некоторые потенциальные пути к сосуществованию проектирования языков и новейших достижений в области БЯМ.
Проблема БЯМ или "на Python всё равно проще"
Начнём с той проблемы, привнесённой БЯМ, которая кажется мне наиболее серьёзной в контексте проектирования языков: за что бы мы ни брались, на Python всё равно будет проще.
Я немного преувеличиваю, но в данном случае хочу указать, что БЯМ значительно обходят по эффективности человека при работе с теми языками программирования, которые широко представлены в поданных им обучающих датасетах — я говорю о Python, JavaScript, TypeScript, т.д.

Когда аккуратно мастеришь язык программирования, синтаксис и семантика которого тщательно подогнаны под конкретную предметную область, ты как программист должен предоставить конечным пользователям интерфейс, полностью согласующийся с наработанной ими интуицией и их устоявшимися привычками. Так пользователи языка смогут сосредоточиться на интересных аспектах стоящих перед ними задач и браться за более крупные и сложные проекты.
Не надо писать такую многословную последовательность вызовов API, если требуется всего лишь вывести диалоговое окно пользователю видеоигры:
Код:
# пример кода для VN
character.draw("alice", character.LEFT, 0.1)
character.draw("bob", character.RIGHT, 0.1)
character.say("alice", "hello there!")
character.say("bob", "hi!")
character.state("alice", "sad")
character.say("alice", "did you hear the news?")
Код:
# Пример диалогового DSL (предметно-ориентированного языка)
[ alice @ left in 0.1, bob @right in 0.1 ]
alice: hello there!
bob: hi!
alice[sad]: did you hear the news?...
Свой язык для каждой предметной области. Устранив всё некорректное, можно не сомневаться в правильности того, что осталось, даже если оставшаяся информация сложная, туманная или запутанная.
На несколько последних десятилетий приходится интересная, захватывающая и влиятельная история исследований, но в данном случае с моей стороны было бы небрежно не приметить главного слона — большие языковые модели. Всего за несколько лет большие языковые модели (БЯМ) и сгенерированный ими код обильно пропитали всю экосистему, в которой существует софт, и теперь разработчикам приходится постоянно переоценивать собственные предубеждения по поводу того, что может и что не может сгенерировать машина. Между прочим, эти изменения распространяются и на те проблемы, которые раньше пытались решать на уровне проектирования языков (устранение шаблонного кода, фиксация соглашений или повышение степени логичности кода).
Этот ландшафт только формируется, но в нём заключён большой потенциал, и можно задать много интересных вопросов о том, как большие языковые модели могут поспособствовать разработке ПО. Но, наблюдая за этими процессами, я также наблюдаю тревожную тенденцию: разработки в области БЯМ постепенно гасят интерес к проектированию DSL. В самом деле, зачем проектировать такой DSL, который мог бы устранить весь шаблонный код, если у вас есть БЯМ, способная запрограммировать для вас буквально что угодно?
Есть ли будущее у проектирования языков в эту новую эру БЯМ? В данном посте я хотела бы поделиться некоторыми давно назревшими у меня мыслями по поводу этого новоиспечённого ландшафта, дать пищу для дискуссии и очертить некоторые потенциальные пути к сосуществованию проектирования языков и новейших достижений в области БЯМ.
Проблема БЯМ или "на Python всё равно проще"
Начнём с той проблемы, привнесённой БЯМ, которая кажется мне наиболее серьёзной в контексте проектирования языков: за что бы мы ни брались, на Python всё равно будет проще.
Я немного преувеличиваю, но в данном случае хочу указать, что БЯМ значительно обходят по эффективности человека при работе с теми языками программирования, которые широко представлены в поданных им обучающих датасетах — я говорю о Python, JavaScript, TypeScript, т.д.
