Рубрика Разработка языков программирования в эру больших языковых моделей: ренессанс посредственности?

  • Автор темы Автор темы TaLLeR43
  • Дата начала Дата начала
В исследовании языков программирования меня всегда наиболее привлекала их разработка.

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

Не надо писать такую многословную последовательность вызовов 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 позволяет разработчикам сосредоточиться на высокоуровневых деталях — то есть, в общем виде представить, как должен вестись диалог:
Код:
# Пример диалогового 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, т.д.
aa0e556395acbff13d752defd16e30fb.webp
 
Яндекс.Метрика
Назад
Сверху